LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
static std::string str;
switch(message) //处理消息
{
case WM_PAINT:
{
HDC hdc; //设备环境句柄
PAINTSTRUCT ps;//声明绘画结构体,以存储和绘画有关的信息
//无效化客户区并重新绘制,取得环境句柄
hdc = BeginPaint(hwnd,&ps);
//输出文字
TextOutA(hdc,0,0,str.c_str(),str.length());
EndPaint(hwnd,&ps);
return 0;
}
case WM_COMMAND:
{
switch(LOWORD(wParam))
{
case ID_FILE_EXIT:
SendMessage(hwnd,WM_CLOSE,0,0);
break;
}
}
case WM_CHAR:
{
str = str + char(wParam);
InvalidateRect(hwnd,NULL,0);
return 0;
}
case WM_DESTROY://销毁窗口,退出程序
{
PostQuitMessage(0);
return 0;
}
}
//将我们不处理的消息交给系统做默认处理
return DefWindowProc(hwnd,message,wParam,lParam);
}
//————————————————
参考GPT和自己的思路:
您可以使用Unicode字符集来支持中文输入。在窗口程序中,定义窗口类时将Unicode字符集作为类名的后缀即可,例如:
WNDCLASSW wc = {0};
wc.lpfnWndProc = WndProc;
wc.hInstance = hInstance;
wc.hCursor = LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszClassName = L"MyWindowClass"; //注意此处是带有L前缀的宽字符集字符串
RegisterClassW(&wc);
HWND hWnd = CreateWindowW(L"MyWindowClass",L"窗口标题",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,500,300,NULL,NULL,hInstance,NULL);
在处理WM_CHAR消息时,使用wchar_t类型的字符串存储输入的字符即可,例如:
case WM_CHAR:
{
WCHAR wch = (WCHAR)wParam;
wchar_t input[2] = {0};
input[0] = wch;
str = str + input;
InvalidateRect(hwnd,NULL,0);
return 0;
}