如果我不想要默认的消息处理函数DefWindowProc替我处理默认消息,请问DefWindowProc中自动处理的哪些消息。因为有些消息我不要它处理,所以得自己写所有的消息处理,但发现删了DefWindowProc程序就不能运行了,看来中间还有些消息不得不处理啊。不知道哪些是程序必要的消息,如果给出DefWindowProc所有的消息更好。

解决方案 »

  1.   

    明确地说,对于你自己注册的窗口类、创建的窗口来说,哪一个消息都是必要的,都需要处理。你可以只处理自己感兴趣的,然后把其余的消息交给DefWindowProc来处理。
      

  2.   

    不知道你为什么要删除DefWindowProc?
      

  3.   

    DefWindowProc是必需的,你点个按钮都需要DefWindowProc帮你对它进行重画.
    如果你不想DefWindowProc处理一些消息,你大可以重载相应的消息映射函数,然后在里面注释到相应默认代码,或直接返回true或false即可.范不着和DefWindowProc过不去.
      

  4.   

    当然,你也可以把DefWindowProc这个API钩起来,自已加消息的判断逻辑,再考虑要不要交给DefWindowProc来处理,即可.不过这种方法要求的编程基础要高一些,楼主量力而为.
    以下网页内有相应代码和注释.
    http://community.csdn.net/Expert/topic/3313/3313733.xml?temp=.9965021
      

  5.   

    WinProc()函数明确的处理了4个消息,分别是WM_KEYDOWN(击键消息)、WM_RBUTTONDOWN(鼠标右键按下消息)、WM_PAINT(窗口重画消息)、WM_DESTROY(销毁窗口消息)。值得注意的是,应用程序发送到窗口的消息远远不止以上这几条,象WM_SIZE、WM_MINIMIZE、WM_CREATE、WM_MOVE等这样频频使用的消息就有几十条。为了减轻编程的负担,Windows的API提供了DefWindowProc()函数来处理这些最常用的消息,调用了这个函数后,这些消息将按照系统默认的方式得到处理。如果你不想DefWindowProc处理某些消息,你可以重载相应的映射函数,然后在里面添加你自己的代码就可以了
      

  6.   

    我做的是一个联网对战的游戏程序,发现客户端如果安ALT+SPACE的话游戏就会出BUG,我只好在ALT+SPACE触发的消息中(message==WM_SYSKEYDOWN,wParam==VK_SPACE)暂停游戏,这样就没有BUG了,但这不是单机游戏,所以我最终还是要屏蔽这个消息的。但我没写过几天windows程序,连MFC都用不熟,现在是在Win32SDK写的游戏客户端,服务器端才用的MFC写的。看来我只有重载相应的映射函数了,but how?
      

  7.   

    没写过几天windows程序,一上来就用的win32sdk,你真牛的象你的名字了
      

  8.   

    你可以看看msdn的解释The DefWindowProc function calls the default window procedure to provide default processing for any window messages that an application does not process. This function ensures that every message is processed. DefWindowProc is called with the same parameters received by the window procedure.
      

  9.   

    alt+空格,是激发了窗口的标题栏的那个菜单,你可以试试在窗口过程里面自己处理,里面什么都不作.那么消息就不会流去缺省窗口过程了
      

  10.   

    的确windows前处理了那个消息,不管我在那个消息下PAUSE了GAME还是break了那个消息都要弹出那个讨厌的菜单中断我的游戏,现在游戏BUG已经解决了,但看到那个菜单还是不爽,到底怎样才能屏蔽呢。
    一般游戏都屏蔽了这些快捷键消息的,特别是EA的游戏最狠,连ALT+TAB和CTRL+ALT+DEL都屏蔽了。
      

  11.   

    我在www.gamedev.net问了,在CreateWindow()的时候窗口样式不要WS_SYSMENU就行了。