我正在嘗試一次更改“靜態文本”控制元件的文本及其顏色,我已經做到了,但問題是先更改文本然后更改該文本的顏色時,需要一些明顯的時間在更改文本及其顏色之間。

bool IsGameOpen = false;
INT_PTR CALLBACK DialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch (uMsg) {
case WM_INITDIALOG:
{
SetTimer(hDlg, GAME_STATUS_TIMER, 1000, NULL);
return TRUE;
}
case WM_TIMER:
switch (wParam) {
case GAME_STATUS_TIMER:
if (Mem->FindProcess()) {
SetDlgItemTextW(hDlg, GAME_CURRENT_STATUS_LBL, L"Open");
IsGameOpen = true;
} else {
SetDlgItemTextW(hDlg, GAME_CURRENT_STATUS_LBL, L"Closed");
IsGameOpen = false;
}
break;
}
return TRUE;
case WM_CTLCOLORSTATIC:
{
if ((HWND)lParam == GetDlgItem(hDlg, GAME_CURRENT_STATUS_LBL)) {
if (IsGameOpen) {
SetTextColor((HDC)wParam, RGB(29, 122, 9));
return (BOOL)GetSysColorBrush(COLOR_MENU);
} else {
SetTextColor((HDC)wParam, RGB(176, 12, 12));
return (BOOL)GetSysColorBrush(COLOR_MENU);
}
}
break;
}
}
return FALSE;
}
我的代碼有什么問題,導致程式在更改文本及其顏色之間花費了一些明顯的時間?
uj5u.com熱心網友回復:
如評論中所述,靜態控制元件可能會立即重新繪制,因此正在處理時發送WM_CTLCOLORSTATIC給您,但您尚未更新變數,因此新顏色直到下一次靜態時才會生效控制元件必須重新繪制。SetDlgItemTextW()IsGameOpen
試試這個:
case GAME_STATUS_TIMER:
IsGameOpen = Mem->FindProcess();
SetDlgItemTextW(hDlg, GAME_CURRENT_STATUS_LBL, IsGameOpen ? L"Open" : L"Closed");
break;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/526408.html
標籤:C 温纳皮
上一篇:RAM、存盤單元和地址
