2011-08-24 34 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。