基于对话框的应用程序,
F1键是帮助键,
想要屏蔽原有的帮助功能
而改用static void CXX::CallHelp()函数我的实现代码是LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam)
{
if(VK_F1==wParam)
{
CXX::CallHelp();
return 1;
}
else
{
return CallNextHookEx(g_hKeyboard, code, wParam, lParam);
}
}但是实现的效果是  它即调用CXX::CallHelp(),也调用系统原有的帮助功能,
怎么改?

解决方案 »

  1.   

    dddddddddddddddddddddddddddddddddddddddd
      

  2.   

    KeyboardProc是什么?HOOK? 确定运行时,代码会走到KeyboardProc里面来吗?为什么不用 PreTranslateMessage ?
      

  3.   

    KeyboardProc是什么?HOOK? 确定运行时,代码会走到KeyboardProc里面来吗?为什么不用 PreTranslateMessage ?
      

  4.   

    就是因为调用PreTranslateMessage实现的效果是既调用CXX::CallHelp(),也调用系统原有的帮助功能,才尝试用hook
      

  5.   

    应该不会的,你贴下PreTranslateMessage的代码吧
      

  6.   


    BOOL CXX::PreTranslateMessage(MSG* pMsg) 
    {
    USES_CONVERSION;
    // TODO: Add your specialized code here and/or call the base class
    if(pMsg->message == WM_KEYDOWN && IsCTRLPressed())
    {
    switch (pMsg->wParam)
    {
    ...
    case 'e':
    case 'E':
    OnCoolMenuClose();
    return TRUE;
    ...
            default:
    break;
    }
    }
    else if (IsDELPressed())
    {
    OnCoolRemove();
    return TRUE;
    }
      else if (pMsg->message == WM_KEYDOWN && pMsg->wParam==VK_F1)
      {
      CallHelp();
      return TRUE;
      }

    return CDialog::PreTranslateMessage(pMsg);
    }
      

  7.   

    不管怎么搞!
    就是弹出这样的提示框
    Can't find the HLP file,do you want to try to find this file yourself?帮助文件是自己写的chm文件
      

  8.   

    应该是对F1作了特殊处理。
    你处理一下WM_HELPINFO消息,在里面return TRUE;试试
      

  9.   

    试了一下,我用VS2005,在对话框类中处理WM_HELPINFO消息,用下面代码就行了。
    BOOL Cf1Dlg::OnHelpInfo(HELPINFO* pHelpInfo)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    return TRUE;
    //return CDialog::OnHelpInfo(pHelpInfo);
    }
      

  10.   

    你判断失误了 , 不是vk_f1, 试试VK_HELP