我是windows編程的新手,並且不斷遇到各種各樣的問題,其中大部分問題我都能夠自己解決。C++ win32編輯框光標不閃爍
我手邊的問題是文本區域中顯示的插入符(或光標)。指示你在哪裏輸入文字的東西?那麼它至少表現出來,但它不會像應該那樣閃爍。
我在WM_CREATE創建像這樣的編輯框:
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)中的插入符不閃爍。
如果您需要它們,請詢問更多詳情。
Unicode不應該假設爲btw,這種代碼寫入的方式很可能是調用'CreateWindowA'例如ANSI版本。 Unicode版本將'LPCWSTR'作爲第一個參數,傳遞一個'LPCSTR'。我會**高度**建議確保您將字符集設置爲Unicode,如果您使用的是VS,或者如果不是,則定義「UNICODE」和「_UNICODE」。 – Mgetz
哦,原來就是這樣。我從VS2012升級到VS2013,突然我所有的L字符串都出錯了,我不得不將它改成隻字符串。我將UNICODE和_UNICODE都添加到我的預處理器定義中,一切都恢復正常。 –
你應該不需要手動執行該操作,你應該檢查你可能設置爲MBCS的VC++項目設置 – Mgetz