CDialog程序响应键盘消息

KeyMsgDlg.cpp

  1 None.gif //  KeyMsgDlg.cpp : 实现文件
  2 None.gif //
  3 None.gif
  4 None.gif#include  " stdafx.h "
  5 None.gif#include  " KeyMsg.h "
  6 None.gif#include  " KeyMsgDlg.h "
  7 None.gif
  8 None.gif#ifdef _DEBUG
  9 None.gif #define  new DEBUG_NEW
 10 None.gif #endif
 11 None.gif
 12 None.gif
 13 None.gif //  用于应用程序“关于”菜单项的 CAboutDlg 对话框
 14 None.gif
 15 None.gif class  CAboutDlg :  public  CDialog
 16 ExpandedBlockStart.gifContractedBlock.gif dot.gif {
 17InBlock.gifpublic:
 18InBlock.gif    CAboutDlg();
 19InBlock.gif
 20InBlock.gif// 对话框数据
 21ExpandedSubBlockStart.gifContractedSubBlock.gif    enum dot.gif{ IDD = IDD_ABOUTBOX };
 22InBlock.gif
 23InBlock.gif    protected:
 24InBlock.gif    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
 25InBlock.gif
 26InBlock.gif// 实现
 27InBlock.gifprotected:
 28InBlock.gif    DECLARE_MESSAGE_MAP()
 29ExpandedBlockEnd.gif}
;
 30 None.gif
 31 None.gifCAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
 32 ExpandedBlockStart.gifContractedBlock.gif dot.gif {
 33ExpandedBlockEnd.gif}

 34 None.gif
 35 None.gif void  CAboutDlg::DoDataExchange(CDataExchange *  pDX)
 36 ExpandedBlockStart.gifContractedBlock.gif dot.gif {
 37InBlock.gif    CDialog::DoDataExchange(pDX);
 38ExpandedBlockEnd.gif}

 39 None.gif
 40 None.gifBEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
 41 None.gifEND_MESSAGE_MAP()
 42 None.gif
 43 None.gif
 44 None.gif //  CKeyMsgDlg 对话框
 45 None.gif
 46 None.gif
 47 None.gif
 48 None.gif
 49 ExpandedBlockStart.gifContractedBlock.gifCKeyMsgDlg::CKeyMsgDlg(CWnd *  pParent  /**/ /*=NULL*/ )
 50 None.gif    : CDialog(CKeyMsgDlg::IDD, pParent)
 51 ExpandedBlockStart.gifContractedBlock.gif dot.gif {
 52InBlock.gif    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
 53ExpandedBlockEnd.gif}

 54 None.gif
 55 None.gif void  CKeyMsgDlg::DoDataExchange(CDataExchange *  pDX)
 56 ExpandedBlockStart.gifContractedBlock.gif dot.gif {
 57InBlock.gif    CDialog::DoDataExchange(pDX);
 58ExpandedBlockEnd.gif}

 59 None.gif
 60 None.gifBEGIN_MESSAGE_MAP(CKeyMsgDlg, CDialog)
 61 None.gif    ON_WM_SYSCOMMAND()
 62 None.gif    ON_WM_PAINT()
 63 None.gif    ON_WM_QUERYDRAGICON()
 64 None.gif     // }}AFX_MSG_MAP
 65 None.gif END_MESSAGE_MAP()
 66 None.gif
 67 None.gif
 68 None.gif //  CKeyMsgDlg 消息处理程序
 69 None.gif
 70 None.gifBOOL CKeyMsgDlg::OnInitDialog()
 71 ExpandedBlockStart.gifContractedBlock.gif dot.gif {
 72InBlock.gif    CDialog::OnInitDialog();
 73InBlock.gif
 74InBlock.gif    // 将“关于dot.gif”菜单项添加到系统菜单中。
 75InBlock.gif
 76InBlock.gif    // IDM_ABOUTBOX 必须在系统命令范围内。
 77InBlock.gif    ASSERT((IDM_ABOUTBOX & 0xFFF0== IDM_ABOUTBOX);
 78InBlock.gif    ASSERT(IDM_ABOUTBOX < 0xF000);
 79InBlock.gif
 80InBlock.gif    CMenu* pSysMenu = GetSystemMenu(FALSE);
 81InBlock.gif    if (pSysMenu != NULL)
 82ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
 83InBlock.gif        CString strAboutMenu;
 84InBlock.gif        strAboutMenu.LoadString(IDS_ABOUTBOX);
 85InBlock.gif        if (!strAboutMenu.IsEmpty())
 86ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 87InBlock.gif            pSysMenu->AppendMenu(MF_SEPARATOR);
 88InBlock.gif            pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
 89ExpandedSubBlockEnd.gif        }

 90ExpandedSubBlockEnd.gif    }

 91InBlock.gif
 92InBlock.gif    // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
 93InBlock.gif    //  执行此操作
 94InBlock.gif    SetIcon(m_hIcon, TRUE);            // 设置大图标
 95InBlock.gif    SetIcon(m_hIcon, FALSE);        // 设置小图标
 96InBlock.gif
 97InBlock.gif    // TODO: 在此添加额外的初始化代码
 98InBlock.gif
 99InBlock.gif    return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
100ExpandedBlockEnd.gif}

101 None.gif
102 None.gif void  CKeyMsgDlg::OnSysCommand(UINT nID, LPARAM lParam)
103 ExpandedBlockStart.gifContractedBlock.gif dot.gif {
104InBlock.gif    if ((nID & 0xFFF0== IDM_ABOUTBOX)
105ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
106InBlock.gif        CAboutDlg dlgAbout;
107InBlock.gif        dlgAbout.DoModal();
108ExpandedSubBlockEnd.gif    }

109InBlock.gif    else
110ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
111InBlock.gif        CDialog::OnSysCommand(nID, lParam);
112ExpandedSubBlockEnd.gif    }

113ExpandedBlockEnd.gif}

114 None.gif
115 None.gif //  如果向对话框添加最小化按钮,则需要下面的代码
116 None.gif //   来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
117 None.gif //   这将由框架自动完成。
118 None.gif
119 None.gif void  CKeyMsgDlg::OnPaint()
120 ExpandedBlockStart.gifContractedBlock.gif dot.gif {
121InBlock.gif    if (IsIconic())
122ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
123InBlock.gif        CPaintDC dc(this); // 用于绘制的设备上下文
124InBlock.gif
125InBlock.gif        SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
126InBlock.gif
127InBlock.gif        // 使图标在工作矩形中居中
128InBlock.gif        int cxIcon = GetSystemMetrics(SM_CXICON);
129InBlock.gif        int cyIcon = GetSystemMetrics(SM_CYICON);
130InBlock.gif        CRect rect;
131InBlock.gif        GetClientRect(&rect);
132InBlock.gif        int x = (rect.Width() - cxIcon + 1/ 2;
133InBlock.gif        int y = (rect.Height() - cyIcon + 1/ 2;
134InBlock.gif
135InBlock.gif        // 绘制图标
136InBlock.gif        dc.DrawIcon(x, y, m_hIcon);
137ExpandedSubBlockEnd.gif    }

138InBlock.gif    else
139ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
140InBlock.gif        CDialog::OnPaint();
141ExpandedSubBlockEnd.gif    }

142ExpandedBlockEnd.gif}

143 None.gif
144 None.gif // 当用户拖动最小化窗口时系统调用此函数取得光标显示。
145 None.gif //
146 None.gif HCURSOR CKeyMsgDlg::OnQueryDragIcon()
147 ExpandedBlockStart.gifContractedBlock.gif dot.gif {
148InBlock.gif    return static_cast<HCURSOR>(m_hIcon);
149ExpandedBlockEnd.gif}

150 None.gifBOOL CKeyMsgDlg::PreTranslateMessage(MSG  * pMsg)
151 ExpandedBlockStart.gifContractedBlock.gif dot.gif {
152InBlock.gif    if(pMsg->message==WM_KEYDOWN)
153ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{            
154InBlock.gif        switch(pMsg->wParam)
155ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
156InBlock.gif        case VK_DOWN:
157InBlock.gif                ::AfxMessageBox(_T("VK_SHIFT"));//CTRL 按键按下
158InBlock.gif                return TRUE;
159InBlock.gif            case 'M':
160InBlock.gif                if(::GetKeyState(VK_SHIFT)<0)
161ExpandedSubBlockStart.gifContractedSubBlock.gif                dot.gif{
162InBlock.gif                    ::AfxMessageBox(_T("VK_SHIFT+M"));//SHIFT+M 按键被按下
163ExpandedSubBlockEnd.gif                }

164InBlock.gif                return TRUE;
165ExpandedSubBlockEnd.gif        }

166ExpandedSubBlockEnd.gif    }

167InBlock.gif    return CDialog::PreTranslateMessage(pMsg);
168ExpandedBlockEnd.gif}

169 None.gif
170 None.gif

转载于:https://www.cnblogs.com/LIfelse/archive/2006/02/21/KeyMsgToDio.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值