社区
界面
帖子详情
对话框如何响应按键消息?我想用来做按钮快捷键(在线等)
luchang
2005-07-28 04:48:10
按钮可以定义快捷键,但是只有在按钮获得焦点时才有效
我希望无论什么时候都能响应按键消息
可是我用SPY发现对话框对按键消息不响应
问对话框能响应按键消息吗?如何实现?
...全文
518
6
打赏
收藏
对话框如何响应按键消息?我想用来做按钮快捷键(在线等)
按钮可以定义快捷键,但是只有在按钮获得焦点时才有效 我希望无论什么时候都能响应按键消息 可是我用SPY发现对话框对按键消息不响应 问对话框能响应按键消息吗?如何实现?
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lianglp
2005-07-28
打赏
举报
回复
建议注册系统热键来实现。这样太快了。
caocheng8230
2005-07-28
打赏
举报
回复
我的做法是在preTranslateMessage()中去拦截消息然后组合消息,然后再处理
goodboyws
2005-07-28
打赏
举报
回复
用Accelerator,很佩服楼上,好详细啊
Kudeet
2005-07-28
打赏
举报
回复
方法一:
http://support.microsoft.com/?kbid=222829
1 插入一个新的Accelerator到资源里,把加速键和对应的响应控件(如一个按钮)关联
2 在对话框头文件中声明:
HACCEL m_hAccel;
3 在对话框的构造函数里初始化m_hAccel
m_hAccel = ::LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_ACCELERATOR1));
4 然后重载对话框的PreTranslateMessage函数,在
BOOL CAboutDlg::PreTranslateMessage(MSG* pMsg)
{
if (m_hAccelTable)
{
if (::TranslateAccelerator(m_hWnd, m_hAccelTable, pMsg))
{
return(TRUE);
}
}
return CDialog::PreTranslateMessage(pMsg);
}
方法二:
1 声明热键消息处理函数原型
在.h中消息映射声明处(AFX_mSG字样之后)加入如下语句:
LRESULT OnHotKey(WPARAM wParam,LPARAM lParam);
2. 消息与相应处理函数相关联
在.Cpp中加入消息映射宏,使消息与相应处理函数发生关系,
ON_MESSAGE(WM_HOTKEY,OnHotKey);
3. 为方便以后的操作
预先在类中创建一个响应WM_CREATE和WM_DESTROY消息的函数
OnCreate()与OnDestroy()的框架
4.向系统登记热键
在OnCreate()函数中加入如下代码以向系统登记热键,本例子的热键设为
Ctrl+Shift+A.
RegisterHotKey(m_hWnd,1001,MOD_CONTROL|MOD_SHIFT,'A');
RegisterHotKey(m_hWnd,1002,MOD_CONTROL|MOD_SHIFT,'a');
5.处理热键
在消息处理函数OnHotKey()中对热键进行处理,并可加入用户希望运行的程序代码
LRESULT C****::OnHotKey(WPARAM wParam,LPARAM lParam)
if(wParam==1001||wParam==1002)
CWnd::SetForegroundWindow();//使得被激活窗口出现在前景
MessageBox("Hello!");
//用户可在此添加代码
return 0;
6.程序运行完毕后解除热键
在OnDestroy()中通过UnRegisterHotKey()解除热键登记,释放系统资源.
UnRegisterHotKey(m_hWnd,1001);
UnRegisterHotKey(m_hWnd,1002);
7.编译并运行程序
wuprograme
2005-07-28
打赏
举报
回复
在对话框中响应键盘消息只有直接在pretranslatemessage()中直接调用onkeydown()或onchar();
luchang
2005-07-28
打赏
举报
回复
还有,按钮定义的快捷键如果是数字的话,它不能区分 shift+num,也就是说我按下8和*结果都一样
该如何才能区分出shift+num??
MFC中DIALOG(
对话框
)程序
响应
加速键(
快捷键
)
新建一个
对话框
程序,项目名为Test,删除默认确定,取消和静态文本框控件。添加一个
按钮
,Caption修改为“打开”,ID为IDC_Open,双击该
按钮
添加
响应
函数,
响应
函数如下:
c语言
对话框
的快捷添加
按钮
,MFC中基于
对话框
程序
快捷键
的实现
MFC中基于
对话框
程序
快捷键
的实现作者:苍竹先生下载源代码MFC中基于SDI和MDI的程序,默认情况下有
快捷键
资源,直接建立
快捷键
与
消息
的映射,就能实现程序的
快捷键
,而基于
对话框
的程序默认情况下没有
快捷键
资源,鉴于网友问到这个问题,下面我就分别用两种方法来实现。一是在PreTranslateMessage函数中,判断键盘的
按键
消息
,比如
快捷键
是Ctrl + Q,我们就检测
按键
消息
的Ctrl键和Q是...
MFC中基于
对话框
程序
快捷键
的实现
FC中基于SDI和MDI的程序,默认情况下有
快捷键
资源,直接建立
快捷键
与
消息
的映射,就能实现程序的
快捷键
,而基于
对话框
的程序默认情况下没有
快捷键
资源,鉴于网友问到这个问题,下面我就分别用两种方法来实现。 一是在PreTranslateMessage函数中,判断键盘的
按键
消息
,比如
快捷键
是Ctrl + Q,我们就检测
按键
消息
的Ctrl键和Q是否同时按下就可以了。 //用PreTranslateM...
MFC键盘
响应
事件、不
响应
怎么办、亲测解决、字母和数字键的键码值
①
对话框
右击->属性 然后会生成代码 void CTimeRecordingDlg::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) { // TODO: 在此添加
消息
处理程序代码和/或调用默认值 CDialogEx::OnChar(nChar, nRepCnt, nFlags); } ②添加
响应
事件(自由发挥,我的如下,我是调用我的Button
按钮
,相当于用按下
按键
,BUTTON下的函数执行) void CTimeRecordingDlg::On
在MFC
对话框
程序中使用加速键
新建一个基于
对话框
的工程,添加一个
按钮
,修改
按钮
ID,这里为ID_BTN_OPENFILE,为
按钮
添加
消息
响应
事件,这里我打开文件保存
对话框
: void CAccelDlg::OnBtnOpenfile() { // TODO: Add your control notification handler code here CFileDialog dlg (TRUE); dlg.DoMo
界面
15,976
社区成员
115,866
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章