非可编辑控件接收方向键按键消息

MFCJCK 2010-08-27 09:27:44
问题:在对对话框中的一个非可编辑控件,如按钮控件,如何接收方向键按键消息。
失败的方法:我试过在按钮中响应WM_CHAR、WM_KEYDOWN好像都不行。
现象:我按下方向键 好像只是对话框焦点在几个控件中切换。求助高手了~~~
...全文
155 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
MFCJCK 2010-08-27
  • 打赏
  • 举报
回复
在大家指导下 我找到了这个WM_GETDLGCODE。可以在控件中处理方向键和TAB键消息。多谢大家,尤其感谢是wujiabao。
wujiabao 2010-08-27
  • 打赏
  • 举报
回复
BOOL CREdit::Create(HWND pParent, int x, int y, int w, int h, int style)
{
m_pParent = pParent;
WNDCLASSEX wcex;
int ret;

wcex.cbSize = sizeof(WNDCLASSEX);

wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = newwndproc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = (HINSTANCE)GetWindowLongPtr(pParent,GWL_HINSTANCE);
wcex.hIcon = NULL;
wcex.hCursor = LoadCursor(NULL, IDC_IBEAM);
wcex.hbrBackground = (HBRUSH)(COLOR_GRAYTEXT);
wcex.lpszMenuName = NULL;
wcex.lpszClassName = szWindowClassRedit;
wcex.hIconSm = NULL;


ret = RegisterClassEx(&wcex);
ret = GetLastError();
m_hWnd = CreateWindowEx(WS_EX_ACCEPTFILES,szWindowClassRedit, TEXT("redit"), style | WS_TABSTOP, x, y, w, h, pParent, NULL, NULL,0);
ret = GetLastError();
if(m_hWnd == NULL) return FALSE;
return TRUE;
}
MFCJCK 2010-08-27
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wujiabao 的回复:]

可以的, 我刚刚试了我的程序
[/Quote]
能把部分代码 发我邮箱看看嘛?mfcjck@yeah.net 谢谢啦
MFCJCK 2010-08-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 visualeleven 的回复:]

对话框默认是不直接处理WM_KEYDOWN消息的,你可以重载PreTranslateMessage虚函数,在它里面处理WM_KEYDOWN消息
[/Quote]
我是要在控件中响应 方向键按键事件,请问有什么方法吗?
wujiabao 2010-08-27
  • 打赏
  • 举报
回复
可以的, 我刚刚试了我的程序
MFCJCK 2010-08-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wujiabao 的回复:]

试一下我的方法,100%可以, 我也遇到跟我想同的问题, 就这么解决的
[/Quote]
我是MFC里 控件对方向键的响应。。我好想还没看懂您的方法哦,麻烦您在解释一下,行吗?
wujiabao 2010-08-27
  • 打赏
  • 举报
回复
试一下我的方法,100%可以, 我也遇到跟我想同的问题, 就这么解决的
MFCJCK 2010-08-27
  • 打赏
  • 举报
回复
PreTranslateMessage(MSG* pMsg) 好像也不行。小弟愚笨,还请说明。

我要在控件中响应方向键。。但控件直接把方向键传给了对话框类。请问该怎么在控件中截获。
Eleven 2010-08-27
  • 打赏
  • 举报
回复
对话框默认是不直接处理WM_KEYDOWN消息的,你可以重载PreTranslateMessage虚函数,在它里面处理WM_KEYDOWN消息
wujiabao 2010-08-27
  • 打赏
  • 举报
回复
用CreateWindexEx创建窗口, 窗口的dwExStyle为WS_EX_ACCEPTFILES
dwStyle为WS_CHILE|WS_VISIBLE|WS_TABSTOP

创建完成后, 窗口的焦点一般不会在你这个窗口上, 即时你使用了SetFocus
所以你在消息处函数里加入
case WM_LBUTTONDOWN:
case WM_RBUTTONDOWN:
SetFocus(hwnd);
这样你用鼠标点击一下你的窗口,获得焦点后,就可以接收WM_KEYDOWN消息了
na_he 2010-08-27
  • 打赏
  • 举报
回复
PreTranslateMessage(MSG* pMsg) 中处理了

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧