MFC 注册热键

 

具体实现步骤如下:
1.声明热键消息处理函数原型
在XXXDlg.h中消息映射声明处(afx_msg字样之后)加入如下语句:

    afx_msg LRESULT OnHotKey(WPARAM wParam,LPARAM lParam);

2.消息与相应处理函数相关联
在XXXDlg.Cpp中加入消息映射宏,使消息与相应处理函数发生关系,

    ON_MESSAGE(WM_HOTKEY,OnHotKey)

3.为方便以后的操作
添加Dlg的事件

WM_CREATE

WM_DESTROY

系统自动创建响应 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 CExampleView::OnHotKey(WPARAM wParam,LPARAM lParam)

{
    if (wParam== 1001||wParam == 1002)

    {

        CWnd::SetForegroundWindow();//使得被激活窗口出现在前景

        MessageBox("Hello,How   do   you   do!");//验证

    }

    return 0;

}

6.程序运行完毕后解除热键
在OnDestroy()中通过UnRegisterHotKey()解除热键登记,释放系统资源.

    UnregisterHotKey(m_hWnd, 1001);
    UnregisterHotKey(m_hWnd, 1002);

7.编译并运行程序
运行程序后,无论何时只要按下热键Ctrl+Shift+A后本程序便立即成为前台运行程序,并出现在DeskTop上。

 

注册热键
下面是两个关键的函数:
BOOL   RegisterHotKey(
   HWND hWnd,
   int id,
   UINT fsModifiers,
   UINT vk
   );
//用于在系统中注册热键

hWnd用于指定注册热键的窗口,如果为NULL的话将使热键被注册到该函数的调用线程;

id用于指定该热键的标识,在热键消息相应的时候,我们将通过该ID来对不同的热键消息作区分;

fsModifiers用于指定修改键(如:control、alt、shift甚至窗口键都可以),它有下列值可选:
值    描述
MOD_ALT   任一Alt键按下
MOD_CONTROL  任一Control键按下
MOD_KEYUP  任意键按下
MOD_SHIFT  任一Shift键按下
MOD_WIN  任一窗口键按下

vk的值对应用户按下的键值,
VK_0-VK_9是数字键   0-9,
VK_A-VK_Z是字母   a-z,
其他更多的键值请查阅MSDN。
注意:This function cannot associate a hot key with a window created by another thread.(MSDN里的原话) 


BOOL UnregisterHotKey(HWND  hWnd, int id);
//用于在系统中注消热键
该函数的参数和RegisiterHotKey的那两个参数意义大体相同。

或者可以使用Hook,利用函数SetWindowsHook挂接一个键盘Hook,具体例子请看VC带的例子Spy。

MFCGridCtrl是一个在MFC应用程序中使用的自定义控件,它用于创建和管理类似于Excel表格的网格视图。在使用MFCGridCtrl之前需要完成注册的步骤。 首先,确保已经将MFCGridCtrl控件的头文件(GridCtrl.h)和源文件(GridCtrl.cpp)添加到您的项目中。 接下来,打开您的MFC应用程序的资源.rc文件,并在文件中找到IDD_MAIN_DIALOG(或您所使用的对话框标识符)。然后,将下面的代码添加到该对话框的资源中: ``` #include "GridCtrl.h" IDD_MAIN_DIALOG DIALOGEX 0, 0, 320, 200 STYLE DS_SETFONT | DS_FIXEDSYS | WS_MAXIMIZEBOX | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU FONT 8, "MS Shell Dlg", 0, 0, 0x1 BEGIN ... CONTROL "",IDC_GRID_CTRL,"GridCtrl",WS_TABSTOP,15,167,296,88 ... END ``` 在代码中的CONTROL部分,我们使用"GridCtrl"作为控件的类名。这是我们之前添加的MFCGridCtrl控件的类名。 接下来,打开您的项目的对话框文件(比如MainDialog.h和MainDialog.cpp),并在头文件中添加以下代码: ``` #include "GridCtrl.h" class CMainDialog : public CDialogEx { ... GridCtrl m_GridCtrl; ... } ``` 在源文件中,您需要为GridCtrl控件进行初始化和添加所需的行和列。在OnInitDialog()的函数体中,添加以下代码: ``` BOOL CMainDialog::OnInitDialog() { ... m_GridCtrl.AttachGrid(GetDlgItem(IDC_GRID_CTRL)->GetSafeHwnd()); m_GridCtrl.SetRowCount(5); m_GridCtrl.SetColumnCount(3); m_GridCtrl.SetFixedRowCount(1); m_GridCtrl.SetFixedColumnCount(1); m_GridCtrl.EnableTitleTips(FALSE); ... } ``` 最后,在应用程序的InitInstance()函数中添加一行代码,将MFCGridCtrl控件注册到应用程序: ``` BOOL CYourApp::InitInstance() { ... CRuntimeClass* pGridCtrlClass = RUNTIME_CLASS(CGridCtrl); AfxRegisterClass(pGridCtrlClass); ... } ``` 通过以上步骤,您已经成功注册并在您的MFC应用程序中使用MFCGridCtrl控件了。可以根据您的具体需求,对GridCtrl控件进行更多的自定义和操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值