我是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