error: invalid conversion from 'wchar_t*' to 'TCHAR' {aka 'char'} [-fpermissive]怎么解决

使用easyx编辑一个输出按钮以及文字的函数,在outtextxy行处出现了报错:error: invalid conversion from 'wchar_t*' to 'TCHAR' {aka 'char'} [-fpermissive]。这应该怎么解决?

typedef struct btNode
{
    int x,y;
    wchar_t text[20];
}btNode;

void drawBtn(btNode t);

btNode leftMen[3]=
{
    {5,5, L" 考试科目 "},
    {5,35,L" 考试历史记录 "},
    {5,65,L" 设置 "}

};

void drawBtn(btNode t)
{
    setfillcolor(BLACK);
    fillroundrect(t.x,t.y,t.x+140,t.y+20,10,10);
    outtextxy(t.x+2,t.y+1,t.text);//报错的地方
}

void drawLeft()
{
    SetWorkingImage(&leftImg);//设置绘图目标为 leftImg 对象
    setbkcolor(RGB(204, 224, 251));//绘图目标设置颜色
    cleardevice();//使用当前背景色清空绘图设备。

    //绘制按钮
    for(int i=0;i<3;i++)
    {
        drawBtn(leftMen[i]);
    }


    SetWorkingImage();//回到初始绘图窗口
    putimage(0,0,&leftImg);//在当前窗口坐标(0,0)处输出leftImg图像
}

img

该回答引用ChatGPT
在EasyX中,outtextxy 函数的第三个参数的类型是 TCHAR,而 wchar_t* 类型的数据不是 TCHAR 类型的,因此编译器提示错误。

为了解决这个问题,你需要将 wchar_t* 类型的数据转换为 TCHAR 类型的数据,可以使用 wctomb 函数或者 MultiByteToWideChar 函数将其转换为 char* 类型的数据,再将 char* 类型的数据转换为 TCHAR 类型的数据。具体实现可以参考以下代码:


#include <Windows.h>
#include <tchar.h>
#include <easyx.h>

typedef struct btNode
{
    int x, y;
    wchar_t text[20];
}btNode;

void drawBtn(btNode t);

btNode leftMen[3] =
{
    { 5,5, L" 考试科目 " },
    { 5,35,L" 考试历史记录 " },
    { 5,65,L" 设置 " }

};

void drawBtn(btNode t)
{
    setfillcolor(BLACK);
    fillroundrect(t.x, t.y, t.x + 140, t.y + 20, 10, 10);
    char buf[256];
    int len = WideCharToMultiByte(CP_ACP, 0, t.text, wcslen(t.text), buf, sizeof(buf), NULL, NULL);
    buf[len] = 0;
    outtextxy(t.x + 2, t.y + 1, _T(buf));
}

void drawLeft()
{
    SetWorkingImage(NULL);
    IMAGE leftImg;
    GetImage(&leftImg, 0, 0, 150, 600);
    SetWorkingImage(&leftImg);
    setbkcolor(RGB(204, 224, 251));
    cleardevice();

    //绘制按钮
    for (int i = 0; i < 3; i++)
    {
        drawBtn(leftMen[i]);
    }


    SetWorkingImage(NULL);
    putimage(0, 0, &leftImg);
}