我有一个正在开发的应用程序,一个游戏,并且卡住了一个按钮,没有进行(视觉上)更新。
该按钮是一个暂停按钮。当应用启动时,它被禁用(具有WS_DISABLED样式),但是当用户启动游戏时,我只是删除了负责禁用它的样式(WS_DISABLED)。
问题是:按钮(在视觉上)保持为禁用的样式(删除样式时)。
或保留(启用时)样式(添加样式时)。
但是,单击按钮后按钮已正确更新。我认为这是一个重涂/更新问题。
我试图重新绘制窗口(没有成功):
RedrawWindow(hWnd,NULL,NULL,RDW_ALLCHILDREN | RDW_UPDATENOW);
这是WinProc函数中的代码片段:
switch (message) {
case WM_CREATE:
CreateControls(hWnd);
break;
case WM_COMMAND:
{
switch (HIWORD(wParam)) {
case BN_CLICKED:
switch (LOWORD(wParam)) {
case 3:
{
char text[50];
GetDlgItemTextA(hWnd, 3, text, 50);
HWND pauseB = GetDlgItem(hWnd, 4);
LONG style = GetWindowLong(pauseB, GWL_STYLE);
if (strncmp(text, "Start", strlen(text)) == 0) {
SetDlgItemTextA(hWnd, 3, "Stop");
SetWindowLong(pauseB, GWL_STYLE, style & ~WS_DISABLED);
std::thread bt(RunGame, hWnd);
bt.detach();
} else {
SetDlgItemTextA(hWnd, 3, "Start");
SetWindowLong(pauseB,GWL_STYLE,style | WS_DISABLED);
}
RedrawWindow(hWnd,NULL,NULL,RDW_ALLCHILDREN | RDW_UPDATENOW);
//SendMessage(hWnd, WM_PAINT, NULL, NULL);
}
default:
break;
}
break;
default:
break;
}
}
break;
// other cases...
}
我可能承认我对c ++不太了解。非常抱歉我的错误。