[英]c++ win32 edit box cursor not flashing
我是Windows編程的新手,並且不斷遇到各種問題,大多數問題我都能自己解決。
我手頭的問題是在文本區域中顯示的插入符號(或光標)。 指示您在哪里鍵入文本的東西? 好吧,至少已經顯示了,但是它並沒有像應該的那樣閃爍。
我在WM_CREATE中創建了一個EDIT框,如下所示:
case WM_CREATE:
{
if(!logged) {
HWND userField = CreateWindow(
"EDIT", // Predefined class; Unicode assumed
NULL, // Button text
WS_VISIBLE | WS_CHILD | WS_BORDER | ES_LEFT, // Styles
C_WIDTH/2 - 80, // x position
C_HEIGHT - 240, // y position
160, // Button width
25, // Button height
hwnd, // Parent window
NULL, // No menu.
(HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE),
NULL); // Pointer not needed.
// initialize NONCLIENTMETRICS structure
NONCLIENTMETRICS ncm;
ncm.cbSize = sizeof(ncm);
// obtain non-client metrics
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(ncm), &ncm, 0);
// create the new font
HFONT hNewFont = CreateFontIndirect(&ncm.lfMessageFont);
// set the new font
SendMessage(userField, WM_SETFONT, (WPARAM)hNewFont, 0);
}
}
break;
那就是有關編輯框的所有代碼。 如果我不夠清楚或缺少我的代碼,對不起。 我不確定代碼的哪些部分在這里是相關的,哪些是不相關的。 我也不認為我應該將整個代碼粘貼到這里。
同樣,問題是文本框(userField)中的插入符號不閃爍。
如果需要,請詢問更多詳細信息。
使用您的代碼,我沒有出現閃爍的插入符號。 但后來我補充說:
SetFocus( userField );
和voilà,閃爍的插入符號:-)
這可能不是OP遇到的問題,但是我也遇到相同的症狀,如果有人遇到此問題,我將在此處發布解決方案...
簡而言之,如果您將編輯控件作為子類,並處理WM_SETFOCUS事件,則需要調用DefSubclassProc(),否則插入符號將不會顯示。 據推測,您可以自己調用ShowCaret(),但如果需要進行其他處理,則僅調用DefSubclassProc()可能會更安全。
在玩了之后-使我的代碼有點整潔-我不小心自己解決了這個問題
我變了
HWND userField = CreateWindow(
"EDIT", // Predefined class; Unicode assumed
NULL, // Button text
WS_VISIBLE | WS_CHILD | WS_BORDER | ES_LEFT, // Styles
C_WIDTH/2 - 80, // x position
C_HEIGHT - 240, // y position
160, // Button width
25, // Button height
hwnd, // Parent window
NULL, // No menu.
(HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE),
NULL); // Pointer not needed.
成
HWND userField = CreateWindow("EDIT", NULL, WS_VISIBLE | WS_CHILD | WS_BORDER | ES_LEFT,
C_WIDTH/2 - 80, C_HEIGHT - 240, 160, 25, hwnd, NULL, g_hInstance, NULL);
唯一的區別是hInstance:在第一個代碼中,這顯然是錯誤的。 我將其更改為hInstance的全局引用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.