我有一个应用程序,编译ok (mingw)和运行ok,然而,创建的编辑控件有滚动条,但垂直滚动条不做任何事情。同样的可执行文件在WinXP上运行良好。此外,编辑控件有垂直和水平滚动条,水平滚动条可以正常工作,但垂直滚动条不行。垂直滚动条是可见的,可点击的,但什么也没发生…
创建编辑控件时使用以下代码:
HWND hwndEdit = CreateWindow(TEXT("EDIT"), TEXT("Edit control"),
WS_OVERLAPPED | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | ES_LEFT | ES_MULTILINE |
ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_SIZEBOX,
1000, 480, 400, 500, NULL, 0, GetModuleHandle(NULL), NULL);
SendMessage(hwndEdit, WM_SETTEXT, 0, (LPARAM) TEXT(""));
SendMessage(hwndEdit, EM_LIMITTEXT, 0, 0);
重复使用以下代码向编辑控件添加文本:
char test[] = "test";
SendMessage(hWndDbg, EM_SETSEL, 0x7FFFFFFF, 0x7FFFFFFF); // Undo any selection and move to end.
SendMessage(hWndDbg, EM_REPLACESEL, 0, (LPARAM) temp);
终于找到修复方法了。在WinXP中,编辑控件不需要定义父窗口,在Win7中,垂直滚动条需要工作,水平滚动条在Win7中工作,即使没有定义父窗口。
请注意,垂直滚动条甚至在单行编辑控件上也有意义。在这种情况下,必须设置WM_VSCROLL,而不设置ES_AUTOVSCROLL。(EM_AUTOVSCROLL表示EM_AutoHIDEVScroll。)与捕获VM_VSROLL消息,然后在编辑控件中更改(通常是数字)值相比,可选的UpDown控件使编程更加困难。
不幸的是,MS Visual Studio内置的资源编辑器不允许您将WM_VSROLL添加到单行编辑中!您必须通过在文本模式下编辑. rc文件来添加这个位。与此类似,此资源编辑器不允许您向控件添加默认文本,而资源加载器仍支持此功能。
使用GetDesktopWindow()作为hWndParent参数。