如何给对话框添加“加速键”响应

MFC的对话框(不是从CFrameWnd类继承下来的),不会自动响应加速键,这需要自己添加代码去实现这个功能

@1.对话框中添加成员变量:

HACCEL m_hAccel;

@2.在OnInitDialog()函数中添加代码:
	// 装载加速键
	m_hAccel = ::LoadAccelerators(AfxGetResourceHandle(), MAKEINTRESOURCE(IDR_ACCELERATOR1));
	ASSERT(m_hAccel);


@3.重载PreTranslateMessage函数:
BOOL CMainDlg::PreTranslateMessage(MSG *pMsg)
{
    if (WM_KEYFIRST <= pMsg->message && pMsg->message <= WM_KEYLAST)
    {
        if (m_hAccel && ::TranslateAccelerator(m_hWnd, m_hAccel, pMsg))
            return TRUE;
    }
    return CDialog::PreTranslateMessage(pMsg);
}

@4.后面的操作就和Frame-View框架的程序一样了:
    a.资源中插入一个加速键IDR_ACCELERATOR1,编辑一个加速键的值
      如ID_XXXX, VK_F9, VIRTKEY
    b.添加成员函数void Xxxx(void)
    c.在BEGIN_MESSAGE_MAP、END_MESSAGE_MAP之间添加
      ON_COMMAND(ID_XXXX, &CMyDlg::Xxxx)


这样对话框就能响应加速键调用对应的函数了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值