2011-08-24 38 views
1

我有一个编译好(mingw)并运行正常的应用程序,但创建的编辑控件有滚动条,但垂直滚动条不起作用。相同的可执行文件在WinXP上运行良好。此外,编辑控件同时具有垂直和水平滚动条,水平工作正常,但垂直不起作用。垂直滚动条可见和点击,但没有任何反应......创造的编辑控件时Windows 7编辑控件,垂直滚动不起作用

下面的代码是使用:

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); 

回答

0

终于找到了修复程序。看起来在WinXP中,编辑控件不必定义父窗口,在Win7中需要垂直滚动条工作,即使没有定义父窗口,水平滚动条也能在Win7中工作。

0

请注意,垂直滚动条甚至在单行编辑控件上有意义。在这种情况下,必须设置WM_VSCROLL,而不是ES_AUTOVSCROLL。 (EM_AUTOVSCROLL表示EM_AutoHIDEVScroll。)另一种UpDown控件比捕获VM_VSROLL消息更有利于编程,然后更改编辑控件内的(通常是数字)值。

不幸的是,MS Visual Studio内置的资源编辑器不会让您将WM_VSROLL添加到单行编辑中!您必须通过在文本模式下编辑.RC文件来添加此位来完成此操作。 与此资源编辑器不允许您向控件添加默认文本的情况类似,该资源仍由资源加载器支持。

+1

请勿混淆WM_和WS_,EM_和ES_前缀。 ES_AUTOVSCROLL与隐藏或显示滚动条无关。 –

0

使用GetDesktopWindow()作为hWndParent参数。它适用于Win7。