如何只让我的对话框屏蔽alt+f4热键,而不影其他窗口对alt+f4热键的响应???

解决方案 »

  1.   

    用全局钩子吧,SetWindowHookEx(),钩住Alt+F4
      

  2.   

    PretranslateMessage这函数应该可以 
     if ( pMsg->message == WM_KEYDOWN )
        {
            switch ( pMsg->wParam )
              .....
    我没试,你自己试试
      

  3.   

    如果你只是想某几个对话框(而不是有超多的对话框)就在对话框类的OnSysCommand函数里加上一句 else if( nID == SC_CLOSE )
    {
    return;
    }如下:
    void CAsdDlg::OnSysCommand(UINT nID, LPARAM lParam)
    {
    if ((nID & 0xFFF0) == IDM_ABOUTBOX)
    {
    CAboutDlg dlgAbout;
    dlgAbout.DoModal();
    }
    else if( nID == SC_CLOSE )
    {
    return;
    }
    else
    {
    CDialog::OnSysCommand(nID, lParam);
    }
    }
      

  4.   

    BOOL CXXXDlg::PreTranslateMessage(MSG* pMsg) 
    {
    // TODO: Add your specialized code here and/or call the base class
       if((WM_SYSKEYDOWN == pMsg->message) && (VK_F4 == pMsg->wParam) && (GetKeyState(VK_MENU) & 0x8000))
       {
       AfxMessageBox(_T("You press ALT + F4"));
       return TRUE;
       }
      return CDialog::PreTranslateMessage(pMsg);
    }
      

  5.   

    BOOL CXXXDlg::PreTranslateMessage(MSG* pMsg) 
    {
    // TODO: Add your specialized code here and/or call the base class
       if((WM_SYSKEYDOWN == pMsg->message) && (VK_F4 == pMsg->wParam) && (GetKeyState(VK_MENU) & 0x8000))
       {
       AfxMessageBox(_T("You press ALT + F4"));
       return TRUE;
       }
      return CDialog::PreTranslateMessage(pMsg);
    }
      

  6.   

    钩子如何屏蔽 alt+f4,那个虚拟键值怎么找啊