继承自CDialog的对话框 如何相应键盘事件

心雨楼 2007-07-20 10:52:14
我自己继承CDialog

class CMainForm : public CDialog
...
H文件:
virtual void OnKeyUp(UINT nchar,UINT nRepCnt,UINT nFlags);

CPP文件:
void CMainForm::OnKeyUp(UINT nchar,UINT nRepCnt,UINT nFlags)
{
MessageBox(L"ff",0,0);
}




然后

CMainForm* pMainForm = new CMainForm();
pMainForm->Create(IDD_MAINFORM, theApp.m_pMainWnd);
pMainForm->ShowWindow(SW_SHOW);


随便按键盘 问什么不能弹出提示框呢?

有什么需要注意的地方呢?

...全文
763 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
emptyness 2007-07-23
  • 打赏
  • 举报
回复
LZ?
程序没什么保密性吧. 我想看看代码..
QQ 32242132 ..
邮箱my_empty_bottle@163.com
jasonshark 2007-07-22
  • 打赏
  • 举报
回复
对话框的输入焦点一般落在子控件上,所以只能在消息分发到子控件之前进行拦截.
如楼上所说,重写PreTranslateMessage即可
systemthink 2007-07-22
  • 打赏
  • 举报
回复
只要对话框上有子窗口就没机会响应到此消息。
在PreTranslateMessage中过滤此消息,如下 :
BOOL CMainForm::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if( pMsg->message>=WM_KEYDOWN && pMsg->message<=WM_KEYUP)
{
this->SendMessage(pMsg->message,pMsg->wParam,pMsg->lParam);
return TRUE;
}
else
return CDialog::PreTranslateMessage(pMsg);
}
===============================
emptyness 2007-07-22
  • 打赏
  • 举报
回复
CXXApp是什么东西 怎么重载 ?说的详细一点 谢谢

hehe ..你是VC自动生成的吗??不是的话.
创建对话框的代码是在哪里出现的.是main()??
能说下,你这个程序主要几个步骤吗?

如果是VC自动生成的话,点类视图就可以看APP类了,然后右键添加 虚Virtual Virtual函数,
选择里面的PreTranslateMessage就可以了.
心雨楼 2007-07-22
  • 打赏
  • 举报
回复
CXXApp是什么东西 怎么重载 ?说的详细一点 谢谢
lyg_zy 2007-07-22
  • 打赏
  • 举报
回复
对话框 SetFocus()
lyg_zy 2007-07-22
  • 打赏
  • 举报
回复
不对话框是非模式对话框,所以它无自己的消息循环。
如果lz
BOOL CMainForm::PreTranslateMessage(MSG* pMsg)
{
MessageBox(L"ff",0,0);

return CDialog::PreTranslateMessage(pMsg);
}
没有反应

那么请你重载
CXXApp的的PreTranslateMessage虚函数
BOOL CXXApp::PreTranslateMessage(MSG* pMsg)
{
if ( ( 你的对话框->PreTranslateMessage( pMsg ) )
{
return true;
};
return CWinApp::PreTranslateMessage( pMsg );

};

心雨楼 2007-07-22
  • 打赏
  • 举报
回复
我这样写根本没有任何反应的
BOOL CMainForm::PreTranslateMessage(MSG* pMsg)
{
MessageBox(L"ff",0,0);

return CDialog::PreTranslateMessage(pMsg);
}

我的对话框 是这样出来的pMainForm->ShowWindow(SW_SHOW); 不是Domodal

为什么没有消息循环
MeridaWarrior 2007-07-21
  • 打赏
  • 举报
回复
楼上正解...
Yao-debo 2007-07-21
  • 打赏
  • 举报
回复
void CMainForm::OnKeyUp(UINT nchar,UINT nRepCnt,UINT nFlags)
{
//加这句试试
CDialog::OnKeyUp(UINT nchar,UINT nRepCnt,UINT nFlags);
MessageBox(L"ff",0,0);
}
livedeal 2007-07-21
  • 打赏
  • 举报
回复
BOOL CMainForm::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if( pMsg->message>=WM_KEYDOWN && pMsg->message<=WM_KEYUP)
{
this->SendMessage(pMsg->message,pMsg->wParam,pMsg->lParam);
return TRUE;
}
else
return CDialog::PreTranslateMessage(pMsg);
}
加这个就可以了``
DentistryDoctor 2007-07-21
  • 打赏
  • 举报
回复
只要对话框上有子窗口就没机会响应到此消息。
在PreTranslateMessage中过滤此消息。
心雨楼 2007-07-20
  • 打赏
  • 举报
回复
这样貌似没有消息循环 不知道怎么回事呢 救命一下下

15,979

社区成员

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

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