如何禁用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