如何禁用CComboBox mfc鍵盤導航,我需要當我按下鍵盤上的打開下拉列表,項目不得選擇。謝謝!如何禁用CComboBox mfc鍵盤導航?
1
A
回答
2
如果你真的只是想說:「我怎麼禁止改變控制?」,然後調用CComboBox上的EnableWindow方法。
但是,如果您確實希望阻止鍵盤消息觸擊控件,請使用window subclassing來吞嚥鍵盤消息。 (不要將術語「窗口子類」與C++類混淆 - 不是一回事)。基本上,我們只是要攔截與組合框相關的所有WM_CHAR和WM_KEYDOWN消息,並讓所有其他消息通過。
這樣做:
WNDPROC g_prevFunc = NULL;
LRESULT MyWindowHook(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
if ((uMsg == WM_CHAR) || (uMsg == WM_KEYDOWN) || (uMsg == WM_KEYUP))
{
return 0; // swallow message
}
return ::CallWindowProcW(g_prevFunc, hWnd, uMsg, wParam, lParam);
}
void MySubclassWindow(HWND hwnd)
{
g_prevFunc = (WNDPROC)::SetWindowLongW(hwnd, GWL_WNDPROC, (LONG_PTR)MyWindowHook);
}
// wherever your code gets initialized
CYourWindow::OnInit()
{
// whatever other initialization you got going on...
// I'm assuming your CComboBox is named something like m_combobox.
::MySubclassWindow(m_combobox.m_hWnd);
}
仔細檢查,以確保這不會打破Tab鍵導航。我剛剛嘗試過,它似乎工作正常。你可能不需要吞下WM_CHAR,只需要吞下WM_KEYUP和WM_KEYDOWN即可。您可能需要進行一些實驗。
還有一個名爲SubclassWindow的CWnd類的MFC方法。所以如果你想要使用純MFC,你也可以考慮一下。
2
而不子類的組合框的簡單的解決方法是設置它的第一子窗口(這是CEdit的框)爲只讀,像這樣:
函數GetDlgItem(IDC_MY_COMBO) - > GetWindow(GW_CHILD) - >的SendMessage(EM_SETREADONLY ,1,0);
相關問題
- 1. 如何禁用鍵盤導航?
- 2. 如何禁用Kendo UI TabStrip中的鍵盤導航?
- 3. 如何通過鍵盤禁用ListView導航
- 4. React.js:鍵盤導航
- 5. 如何在j2me中禁用導航鍵?
- 6. 鍵盤導航使用jQuery
- 7. Tumblr Style鍵盤導航
- 8. 鍵盤導航與jquery
- 9. jQuery SlidesJS鍵盤導航
- 10. 歌劇鍵盤導航
- 11. JOGL鍵盤導航場景
- 12. jqGrid的鍵盤導航
- 13. Jquery:鍵盤導航問題
- 14. 鍵盤消失導航
- 15. 在谷歌地圖中禁用鍵盤導航
- 16. 在ListView中禁用鍵盤箭頭導航
- 17. 禁用WPF列表框中的鍵盤導航
- 18. 箭頭鍵與JQuery的鍵盤導航
- 19. 焦點在文本輸入或textarea上時,如何禁用jQuery鍵盤導航?
- 20. JavaScript/jQuery:用於鍵盤導航的鍵盤(event.which不起作用)
- 21. 如何禁用所有鍵盤按鍵?
- 22. 導航使用鍵盤使用jQuery
- 23. 引導,選擇和鍵盤導航
- 24. 使用鍵盤在WebView中導航
- 25. 鍵盤可以使用導航功能
- 26. Xceed數據網格:用鍵盤導航
- 27. 如何啓用大型應用程序的鍵盤導航
- 28. 禁用導航鍵\改變其功能
- 29. 當禁用鍵盤
- 30. 禁用Android鍵盤
感謝您的回答! – lebron2323 2011-01-10 08:47:08