现在的位置: 首页 > 综合 > 正文

按下Ctrl弹出一个对话框松开关闭此对话框,如何实现?

2013年10月11日 ⁄ 综合 ⁄ 共 814字 ⁄ 字号 评论关闭

                                   
(一),新建一个单文档工程CtrlEg。
(二),在视图类中为WM_KEYDOWN和WM_KEYUP增加响应函数。具体代码如下:
Dialog dlg ;//定义成类成员更规范,这儿定成变量是为了方便查看
void CCtrlEgView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
 if(nChar == VK_CONTROL )
  if( NULL == dlg.GetSafeHwnd())
  {
   dlg.Create(IDD_ABOUTBOX);
   dlg.ShowWindow(SW_SHOW);    
  } 
 CView::OnKeyDown(nChar, nRepCnt, nFlags);
}

void CCtrlEgView::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)
{
 if(nChar == VK_CONTROL)
  dlg.DestroyWindow(); 
 CView::OnKeyUp(nChar, nRepCnt, nFlags);
}
(三),运行CtrlEg.exe,按Ctrl可以弹出对话框,松开没有关闭此对话框。根本原因是CCtrlEgView并没有收到WM_KEYUP消息。
(四),进行如下修改就好了:
void CCtrlEgView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
 if(nChar == VK_CONTROL )
  if( NULL == dlg.GetSafeHwnd())
  {
   dlg.Create(IDD_ABOUTBOX);
   dlg.ShowWindow(SW_SHOW);
   SetFocus();
  } 
 CView::OnKeyDown(nChar, nRepCnt, nFlags);
}

抱歉!评论已关闭.