WindowProc和DefWindowProc的区别

1.

WindowProc是你给自己的窗口定义的窗口处理函数

DefWindowProc是windows平台提供的默认窗口处理函数

如果某些消息你不需要做特别的处理,调用DefWindowProc进行处理就可以了,不需要你自己再去些那些windows的"标准动作"

2.

根据1,显然,你只能定义WindowProc而不能定义DefWindowProc

看看MFC的CWnd源码就一目了然了

LRESULT CWnd::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)

{

// OnWndMsg does most of the work, except for DefWindowProc call

LRESULT lResult = 0;

if (!OnWndMsg(message, wParam, lParam, &lResult)) // 如果消息是需要自己处理的,

//处理后就不必让windows系统进行默认处理了

lResult = DefWindowProc(message, wParam, lParam); // 自己没有处理的就交给windows去做

return lResult;

}

WindowProc和DefWindowProc的区别,布布扣,bubuko.com

时间: 2024-10-17 09:23:13

WindowProc和DefWindowProc的区别的相关文章

[VC]WindowProc和DefWindowProc函数

在Windows操作系统里,当窗口显示之后,它就可以接收到系统源源不断地发过来的消息,然后窗口就需要处理这些消息,因此就需要一个函数来处理这些消 息.在API里定义了一个函数为回调函数,当系统需要向窗口发送消息时,就会调用窗口给出的回调函数WindowProc,如果WindowProc函数 不处理这个消息,就可以把它转向DefWindowProc函数来处理,这是系统的默认消息处理函数.当你按下菜单,或者点击窗口时,窗口需要运行这个消 息处理函数.函数WindowProc声明如下:LRESULT

MFC自绘控件学习总结第二贴

首先感谢大家对第一帖的支持,应一些网友烈要求下面我在关于上一贴的一些补充和说明(老鸟可以无视)这一贴是实战+理论不知道第一帖的先看第一帖:http://topic.csdn.net/u/20110710/19/5209f358-31c8-4057-b108-02155a417fd0.html 1).补充个高级可重载函数PreSubclassWindow(),我的理解是允许用户在子类化之前再做一额外些处理 ,这个重载函数也是非常重要的,要引起相当的注意.可以在这里改变控件的大小,位置,窗口样式,字

Window 32位 编程总结

Lesson01 win32 Window 32位 编程 1.Windows编程基础 2.Windows的字符 3.窗口处理 4.消息处理 5.绘图 6.对话框 7.控件 Win32编程: Windows API:函数接口 一.Windows编程基础 1.Windows应用程序分类 1.1 控制台程序 DOS程序,本身没有窗口,通过WINDOWS下的DOS窗口执行. 1.2 窗口程序 拥有自己的窗口,通过窗口可以和用户进行交互 1.3 库程序 1.3.1 静态库程序 存放代码,数据的程序,其他执

命令消息传递

OnCmdMsg是虚拟函数,CFrameWnd覆盖了该函数,当前对象(this所指)是MFC单文档的边框窗口对象.故CFrameWnd的 OnCmdMsg被调用.CFrameWnd::OnCmdMsg在MFC消息发送中占有非常重要的地位,MFC对该函数的缺省实现确定了MFC的标准命 令发送路径: 送给活动(Active)视处理,调用活动视的OnCmdMsg.由于当前对象是MFC视对象,所以,OnCmdMsg将搜索CTview及其基类的消息映射数组,试图得到相应的处理函数. 如果视对象自己不处理,

VC 模式对话框和非模式对话框的创建,销毁和区别

在WIN32中,模式对话框的创建一般是使用DialogBox来进行创建的.而非模式对话框则是利用CreateWindow来创建的.在MFC或是WTL中,模式对话框一般是使用DoModal,而非模式对话框的创建则是使用Create.模式对话框创建后,程序的其他窗口便不能进行操作,必须将该窗口关闭后,其他窗口才能进行操作.而非模式对话框则无需这样,它不强制要求用户立即反应,而是与其他窗口同时接受用户操作.Create的Dialog一般是modalless,如果你的程序本身就是只有一个Dialog,就

子类化和超类化区别(介绍Windows的窗口、消息、子类化和超类化)(转)

原文地址:http://maqianli210.blog.sohu.com/75497589.html 这篇文章本来只是想介绍一下子类化和超类化这两个比较“生僻”的名词.为了叙述的完整性而讨论了Windows的窗口和消息,也简要讨论了进程和线程.子类化(Subclassing)和超类化(Superclassing)是伴随Windows窗口机制而产生的两个复用代码的方法.不要把“子类化.超类化”与面向对象语言中的派生类.基类混淆起来.“子类化.超类化”中的“类”是指Windows的窗口类. 0 运

DefWndProc/WndProc/IMessageFilter的区别

谈到Winform的消息处理,多数时候是通过事件处理程序进行的,但当没有对应的事件时通常的做法是声明DefWndProc或者WndProc或者IMessageFilter,经常在网上看见有文章将三者并列,那么它们有什么区别呢? DefWndProc和WndProc都是继承自Control类中的虚方法,原型如下: 1: protected override void DefWndProc(ref Message m) 2: { 3: .... 4: base.DefWndProc(m); 5: }

PreTranslateMessage和TranslateMessage区别

PreTranslateMessage是消息在送给TranslateMessage函数之前被调用的,绝大多数本窗口的消息都要通过这里,比较常用,当需要在MFC之前处理某些消息时,常常要在这里添加代码. MFC 消息控制流最具特色的地方是CWnd类的虚拟函数PreTranslateMessage(),通过重载这个函数,可以改变MFC的消息控制流程,甚至可 以作一个全新的控制流出来.只有穿过消息队列的消息才受PreTranslateMessage()影响,采用SendMessage()或其他类似的方

WM_CLOSE、WM_DESTROY、WM_QUIT的区别(询问,销毁窗口,退出进程,都不是一回事)

1.发送消息SendMessage.PostMessage PostMessage将消息放入消息队列后马上返回,而SendMessage直到窗口过程处理完消息后才返回 2.三个消息的区别 WM_CLOSE: 在系统菜单里选择了“关闭”或者点击了窗口右上角的“X”按钮,你的窗口过程就会收到WM_CLOSE.DefWindowProc对 WM_CLOSE的处理是调用DestroyWindow.当然,你可以不让DefWindowProc处理,而是自己处理,例如询问用户是否保存更改等.如果用户选择“取消