如题,如何禁止CFileDialog打开文件对话框中的backspace键?
如果实在不行,禁止整个键盘也行!!!

解决方案 »

  1.   

    可以试试在pretranslatemessage中处理不行的话,可以用键盘钩子
      

  2.   

    pretranslatemessage 和 OnkeyDown 都试过了。我是在派生的CFileDialogEx类中实现这两个函数的,结果都 不行。
    楼上所说的键盘钩子能否说的详细一些?我每用过键盘钩子。
      

  3.   

    键盘钩子WH_KEYBOARD_LL使用
    HHOOK glhHook = SetWindowsHookEx(WH_KEYBOARD_LL,LowLevelKeyboardProc,glhInstance,0);// 卸载钩子
    if (glhHook!=NULL)
    UnhookWindowsHookEx(glhHook);
    // 低级键盘钩子处理函数
    LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)可以上网搜索下载一个源码例子来看,做一个DLL屏蔽所有你想要屏蔽的键盘按键
      

  4.   

    由于MFC中的CFileDialog已经安装了一个键盘钩子,并对键盘消息进行了处理,所以pretranslatemessage 和OnkeyDown 都无法获取键盘消息。
    钩子函数是对操作系统的消息队列进行监控的,所以在pretranslatemessage 之前获取消息。
    实现屏蔽backspace键的方法:派生CFileDialog类,在派生类中的构造函数里用SetWindowsHookEx加一个键盘钩子,注意在设定参数是只设定和本程序的主线程相关:
    hHook = SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,0,GetCurrentThreadId());。
    如果最后一个参数为0,则安装的钩子过程将与桌面上运行的所有线程都相关,也就是说只要打开了这个对话框,那么桌面上所有的线程都将无法接收backspace键!!!
    对于钩子函数的声明和定义sz_04022已经给了定义键盘钩子的基本过程。