使用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图像
}
该回答引用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);
}