第一篇:MFC应用程序中处理消息的顺序(模版)
MFC应用程序中处理消息的顺序
MFC应用程序中处理消息的顺序
1.AfxWndProc()该函数负责接收消息,找到消息所属的CWnd对象,然后调用AfxCallWndProc
2.AfxCallWndProc()该函数负责保存消息(保存的内容主要是消息标识符和消息参数)供应用程序以后使用,然后调用WindowProc()函数
3.WindowProc()该函数负责发送消息到OnWndMsg()函数,如果未被处理,则调用DefWindowProc()函数
4.OnWndMsg()该函数的功能首先按字节对消息进行排序,对于WM_COMMAND消息,调用OnCommand()消息响应函数,对于WM_NOTIFY消息调用OnNotify()消息响应函数。任何被遗漏的消息将是一个窗口消息。OnWndMsg()函数搜索类的消息映像,以找到一个能处理任何窗口消息的处理函数。如果OnWndMsg()函数不能找到这样的处理函数的话,则把消息返回到WindowProc()函数,由它将消息发送给DefWindowProc()函数
5.OnCommand()该函数查看这是不是一个控件通知(lParam参数不为NULL,如果lParam参数为空的话,说明该消息不是控件通知),如果它是,OnCommand()函数会试图将消息映射到制造通知的控件;如果他不是一个控件通知(或者如果控件拒绝映射的消息)OnCommand()就会调用OnCmdMsg()函数
6.OnCmdMsg()根据接收消息的类,OnCmdMsg()函数将在一个称为命令传递(Command Routing)的过程中潜在的传递命令消息和控件通知。例如:如果拥有该窗口的类是一个框架类,则命令和通知消息也被传递到视图和文档类,并为该类寻找一个消息处理函数
MFC应用程序创建窗口的过程
1.PreCreateWindow()该函数是一个重载函数,在窗口被创建前,可以在该重载函数中改变创建参数(可以设置窗口风格等等)
2.PreSubclassWindow()这也是一个重载函数,允许首先子分类一个窗口
3.OnGetMinMaxInfo()该函数为消息响应函数,响应的是WM_GETMINMAXINFO消息,允许设置窗口的最大或者最小尺寸
4.OnNcCreate()该函数也是一个消息响应函数,响应WM_NCCREATE消息,发送消息以告诉窗口的客户区即将被创建
5.OnNcCalcSize()该函数也是消息响应函数,响应WM_NCCALCSIZE消息,作用是允许改变窗口客户区大小
6.OnCreate()该函数也是一个消息响应函数,响应WM_CREATE消息,发送消息告诉一个窗口已经被创建
7.OnSize()该函数也是一个消息响应函数,响应WM_SIZE消息,发送该消息以告诉该窗口大小已经发生变化
8.OnMove()消息响应函数,响应WM_MOVE消息,发送此消息说明窗口在移动
9.OnChildNotify()该函数为重载函数,作为部分消息映射被调用,告诉父窗口即将被告知一个窗口刚刚被创建
MFC应用程序关闭窗口的顺序(非模态窗口)
1.OnClose()消息响应函数,响应窗口的WM_CLOSE消息,当关闭按钮被单击的时候发送此消息
2.OnDestroy()消息响应函数,响应窗口的WM_DESTROY消息,当一个窗口将被销毁时,发送此消息
3.OnNcDestroy()消息响应函数,响应窗口的WM_NCDESTROY消息,当一个窗口被销毁后发送此消息
4.PostNcDestroy()重载函数,作为处理OnNcDestroy()函数的最后动作,被CWnd调用MFC应用程序中打开模式对话框的函数调用顺序
1.DoModal()重载函数,重载DoModal()成员函数
2.PreSubclassWindow()重载函数,b31.org 允许首先子分类一个窗口
3.OnCreate()消息响应函数,响应WM_CREATE消息,发送此消息以告诉一个窗口已经被创建
4.OnSize()消息响应函数,响应WM_SIZE消息,发送此消息以告诉窗口大小发生变化
5.OnMove()消息响应函数,响应WM_MOVE消息,发送此消息,以告诉窗口正在移动
6.OnSetFont()消息响应函数,响应WM_SETFONT消息,发送此消息,以允许改变对话框中控件的字体
7.OnInitDialog()消息响应函数,响应WM_INITDIALOG消息,发送此消息以允许初始化对话框中的控件,或者是创建新控件
8.OnShowWindow()消息响应函数,响应WM_SHOWWINDOW消息,该函数被ShowWindow()函数调用
9.OnCtlColor()消息响应函数,响应WM_CTLCOLOR消息,被父窗口发送已改变对话框或对话框上面控件的颜色
10.OnChildNotify()重载函数,作为WM_CTLCOLOR消息的结果发送
MFC应用程序中关闭模式对话框的顺序
1.OnClose()消息响应函数,响应WM_CLOSE消息,当“关闭”按钮被单击的时候,该函数被调用
2.OnKillFocus()消息响应函数,响应WM_KILLFOCUS消息,当一个窗口即将失去键盘输入焦点以前被发送
3.OnDestroy()消息响应函数,响应WM_DESTROY消息,当一个窗口即将被销毁时,被发送
4.OnNcDestroy()消息响应函数,响应WM_NCDESTROY消息,当一个窗口被销毁以后被发送
5.PostNcDestroy()重载函数,作为处理OnNcDestroy()函数的最后动作被CWnd调用打开无模式对话框的顺序
1.PreSubclassWindow()重载函数,允许用户首先子分类一个窗口
2.OnCreate()消息响应函数,响应WM_CREATE消息,发送此消息以告诉一个窗口已经被创建
3.OnSize()消息响应函数,响应WM_SIZE消息,发送此消息以告诉窗口大小发生变化
4.OnMove()消息响应函数,响应WM_MOVE消息,发送此消息以告诉窗口正在移动
5.OnSetFont()消息响应函数,响应WM_SETFONT消息,发送此消息以允许改变对话框中控件的字体
以上这些的执行都是按给定的顺序执行!
只有清楚的了解应用程序的执行顺序,才能在编写代码的时候知道,在什么时候应该执行什么,以及在什么地方该处理什么!新濠天地娱乐城66bb.org
第二篇:MFC消息处理函数总结
1.AfxWndProc()该函数负责接收消息,找到消息所属的CWnd对象,然后调用AfxCallWnd
Proc
2.AfxCallWndProc()该函数负责保存消息(保存的内容主要是消息标识符和消息参数)供应
用程序以后使用,然后调用WindowProc()函数
3.WindowProc()该函数负责发送消息到OnWndMsg()函数,如果未被处理,则调用DefWin
dowProc()函数
4.OnWndMsg()该函数的功能首先按字节对消息进行排序,对于WM_COMMAND消息,调用OnCommand()消息响应函数,对于WM_NOTIFY消息调用OnNotify()消息响应函数。任何被遗漏的消息将是一个窗口消息。OnWndMsg()函数搜索类的消息映像,以找到一个能处理任何窗口消息的处理函数。如果OnWndMsg()函数不能找到这样的处理函数的话,则把消
息返回到WindowProc()函数,由它将消息发送给DefWindowProc()函数
5.OnCommand()该函数查看这是不是一个控件通知(lParam参数不为NULL,如果lParam参数为空的话,说明该消息不是控件通知),如果它是,OnCommand()函数会试图将消息映射到制造通知的控件;如果他不是一个控件通知(或者如果控件拒绝映射的消息)OnCommand()
就会调用OnCmdMsg()函数
6.OnCmdMsg()根据接收消息的类,OnCmdMsg()函数将在一个称为命令传递(Command Routing)的过程中潜在的传递命令消息和控件通知。例如:如果拥有该窗口的类是一个框架类,则命令和通知消息也被传递到视图和文档类,并为该类寻找一个消息处理函数
MFC应用程序创建窗口的过程
1.PreCreateWindow()该函数是一个重载函数,在窗口被创建前,可以在该重载函数中改变
创建参数(可以设置窗口风格等等)
2.PreSubclassWindow()这也是一个重载函数,允许首先子分类一个窗口
3.OnGetMinMaxInfo()该函数为消息响应函数,响应的是WM_GETMINMAXINFO消息,允许设置窗口的最大或者最小尺寸
4.OnNcCreate()该函数也是一个消息响应函数,响应WM_NCCREATE消息,发送消息以告
诉窗口的客户区即将被创建
5.OnNcCalcSize()该函数也是消息响应函数,响应WM_NCCALCSIZE消息,作用是允许改
变窗口客户区大小
6.OnCreate()该函数也是一个消息响应函数,响应WM_CREATE消息,发送消息告诉一个
窗口已经被创建
7.OnSize()该函数也是一个消息响应函数,响应WM_SIZE消息,发送该消息以告诉该窗口
大小已经发生变化
8.OnMove()消息响应函数,响应WM_MOVE消息,发送此消息说明窗口在移动
9.OnChildNotify()该函数为重载函数,作为部分消息映射被调用,告诉父窗口即将被告知一
个窗口刚刚被创建
MFC应用程序关闭窗口的顺序(非模态窗口)
1.OnClose()消息响应函数,响应窗口的WM_CLOSE消息,当关闭按钮被单击的时候发送
此消息
2.OnDestroy()消息响应函数,响应窗口的WM_DESTROY消息,当一个窗口将被销毁时,发送此消息
3.OnNcDestroy()消息响应函数,响应窗口的WM_NCDESTROY消息,当一个窗口被销毁
后发送此消息
4.PostNcDestroy()重载函数,作为处理OnNcDestroy()函数的最后动作,被CWnd调用
MFC应用程序中打开模式对话框的函数调用顺序
1.DoModal()重载函数,重载DoModal()成员函数
2.PreSubclassWindow()重载函数,允许首先子分类一个窗口
3.OnCreate()消息响应函数,响应WM_CREATE消息,发送此消息以告诉一个窗口已经被
创建
4.OnSize()消息响应函数,响应WM_SIZE消息,发送此消息以告诉窗口大小发生变化
5.OnMove()消息响应函数,响应WM_MOVE消息,发送此消息,以告诉窗口正在移动
6.OnSetFont()消息响应函数,响应WM_SETFONT消息,发送此消息,以允许改变对话框
中控件的字体
7.OnInitDialog()消息响应函数,响应WM_INITDIALOG消息,发送此消息以允许初始化对
话框中的控件,或者是创建新控件
8.OnShowWindow()消息响应函数,响应WM_SHOWWINDOW消息,该函数被ShowWind
ow()函数调用
9.OnCtlColor()消息响应函数,响应WM_CTLCOLOR消息,被父窗口发送已改变对话框或
对话框上面控件的颜色
10.OnChildNotify()重载函数,作为WM_CTLCOLOR消息的结果发送
MFC应用程序中关闭模式对话框的顺序
1.OnClose()消息响应函数,响应WM_CLOSE消息,当“关闭”按钮被单击的时候,该函数
被调用
2.OnKillFocus()消息响应函数,响应WM_KILLFOCUS消息,当一个窗口即将失去键盘输
入焦点以前被发送
3.OnDestroy()消息响应函数,响应WM_DESTROY消息,当一个窗口即将被销毁时,被发
送
4.OnNcDestroy()消息响应函数,响应WM_NCDESTROY消息,当一个窗口被销毁以后被
发送
5.PostNcDestroy()重载函数,作为处理OnNcDestroy()函数的最后动作被CWnd调用
打开无模式对话框的顺序
1.PreSubclassWindow()重载函数,允许用户首先子分类一个窗口
2.OnCreate()消息响应函数,响应WM_CREATE消息,发送此消息以告诉一个窗口已经被
创建
3.OnSize()消息响应函数,响应WM_SIZE消息,发送此消息以告诉窗口大小发生变化
4.OnMove()消息响应函数,响应WM_MOVE消息,发送此消息以告诉窗口正在移动
5.OnSetFont()消息响应函数,响应WM_SETFONT消息,发送此消息以允许改变对话框中
控件的字体
以上这些的执行都是按给定的顺序执行!
只有清楚的了解应用程序的执行顺序,才能在编写代码的时候知道,在什么时候应该执行什
么,以及在什么地方该处理什么!
这只是本人总结的一点小小的经验,希望能对MFC的初学者有所帮助!MFC应用程序中处
理消息的顺序
1.AfxWndProc()该函数负责接收消息,找到消息所属的CWnd对象,然后调用AfxCallWnd
Proc
2.AfxCallWndProc()该函数负责保存消息(保存的内容主要是消息标识符和消息参数)供应
用程序以后使用,然后调用WindowProc()函数
3.WindowProc()该函数负责发送消息到OnWndMsg()函数,如果未被处理,则调用DefWin
dowProc()函数
4.OnWndMsg()该函数的功能首先按字节对消息进行排序,对于WM_COMMAND消息,调用OnCommand()消息响应函数,对于WM_NOTIFY消息调用OnNotify()消息响应函数。任何被遗漏的消息将是一个窗口消息。OnWndMsg()函数搜索类的消息映像,以找到一个能处理任何窗口消息的处理函数。如果OnWndMsg()函数不能找到这样的处理函数的话,则把消
息返回到WindowProc()函数,由它将消息发送给DefWindowProc()函数
5.OnCommand()该函数查看这是不是一个控件通知(lParam参数不为NULL,如果lParam参数为空的话,说明该消息不是控件通知),如果它是,OnCommand()函数会试图将消息映射到制造通知的控件;如果他不是一个控件通知(或者如果控件拒绝映射的消息)OnCommand()
就会调用OnCmdMsg()函数
6.OnCmdMsg()根据接收消息的类,OnCmdMsg()函数将在一个称为命令传递(Command Routing)的过程中潜在的传递命令消息和控件通知。例如:如果拥有该窗口的类是一个框架类,则命令和通知消息也被传递到视图和文档类,并为该类寻找一个消息处理函数
MFC应用程序创建窗口的过程
1.PreCreateWindow()该函数是一个重载函数,在窗口被创建前,可以在该重载函数中改变
创建参数(可以设置窗口风格等等)
2.PreSubclassWindow()这也是一个重载函数,允许首先子分类一个窗口
3.OnGetMinMaxInfo()该函数为消息响应函数,响应的是WM_GETMINMAXINFO消息,允许设置窗口的最大或者最小尺寸
4.OnNcCreate()该函数也是一个消息响应函数,响应WM_NCCREATE消息,发送消息以告
诉窗口的客户区即将被创建
5.OnNcCalcSize()该函数也是消息响应函数,响应WM_NCCALCSIZE消息,作用是允许改
变窗口客户区大小
6.OnCreate()该函数也是一个消息响应函数,响应WM_CREATE消息,发送消息告诉一个
窗口已经被创建
7.OnSize()该函数也是一个消息响应函数,响应WM_SIZE消息,发送该消息以告诉该窗口
大小已经发生变化
8.OnMove()消息响应函数,响应WM_MOVE消息,发送此消息说明窗口在移动
9.OnChildNotify()该函数为重载函数,作为部分消息映射被调用,告诉父窗口即将被告知一
个窗口刚刚被创建
MFC应用程序关闭窗口的顺序(非模态窗口)
1.OnClose()消息响应函数,响应窗口的WM_CLOSE消息,当关闭按钮被单击的时候发送
此消息
2.OnDestroy()消息响应函数,响应窗口的WM_DESTROY消息,当一个窗口将被销毁时,发送此消息
3.OnNcDestroy()消息响应函数,响应窗口的WM_NCDESTROY消息,当一个窗口被销毁
后发送此消息
4.PostNcDestroy()重载函数,作为处理OnNcDestroy()函数的最后动作,被CWnd调用
MFC应用程序中打开模式对话框的函数调用顺序
1.DoModal()重载函数,重载DoModal()成员函数
2.PreSubclassWindow()重载函数,允许首先子分类一个窗口
3.OnCreate()消息响应函数,响应WM_CREATE消息,发送此消息以告诉一个窗口已经被
创建
4.OnSize()消息响应函数,响应WM_SIZE消息,发送此消息以告诉窗口大小发生变化
5.OnMove()消息响应函数,响应WM_MOVE消息,发送此消息,以告诉窗口正在移动
6.OnSetFont()消息响应函数,响应WM_SETFONT消息,发送此消息,以允许改变对话框
中控件的字体
7.OnInitDialog()消息响应函数,响应WM_INITDIALOG消息,发送此消息以允许初始化对
话框中的控件,或者是创建新控件
8.OnShowWindow()消息响应函数,响应WM_SHOWWINDOW消息,该函数被ShowWind
ow()函数调用
9.OnCtlColor()消息响应函数,响应WM_CTLCOLOR消息,被父窗口发送已改变对话框或
对话框上面控件的颜色
10.OnChildNotify()重载函数,作为WM_CTLCOLOR消息的结果发送
MFC应用程序中关闭模式对话框的顺序
1.OnClose()消息响应函数,响应WM_CLOSE消息,当“关闭”按钮被单击的时候,该函数
被调用
2.OnKillFocus()消息响应函数,响应WM_KILLFOCUS消息,当一个窗口即将失去键盘输
入焦点以前被发送
3.OnDestroy()消息响应函数,响应WM_DESTROY消息,当一个窗口即将被销毁时,被发
送
4.OnNcDestroy()消息响应函数,响应WM_NCDESTROY消息,当一个窗口被销毁以后被
发送
5.PostNcDestroy()重载函数,作为处理OnNcDestroy()函数的最后动作被CWnd调用
打开无模式对话框的顺序
1.PreSubclassWindow()重载函数,允许用户首先子分类一个窗口
2.OnCreate()消息响应函数,响应WM_CREATE消息,发送此消息以告诉一个窗口已经被
创建
3.OnSize()消息响应函数,响应WM_SIZE消息,发送此消息以告诉窗口大小发生变化
4.OnMove()消息响应函数,响应WM_MOVE消息,发送此消息以告诉窗口正在移动
5.OnSetFont()消息响应函数,响应WM_SETFONT消息,发送此消息以允许改变对话框中
控件的字体
评论(1)|阅读(570)|添加评论
第三篇:MFC消息映射机制分析论文
摘 要:MFC以层次结构组织起来,比较庞杂,尤其是它的消息映射机制,更是涉及到很多底层的东西。本文通过对整个消息映射机制进行系统的 分析,可以帮助程序开发人员更好地了解MFC,进行可视化编程。
关键词:消息驱动;消息映射;MFC 程序设计引言
微软公司提供的MFC基本类库(Microsoft Foundation Classes),是进行可视化编程时使用最为流行的一个类库。MFC封装了大部分Windows ApI函数和Windows控件,使得程序的开发变得简单,极大的缩短了程序的开发周期。MFC独创的Document/View框架结构,能够将管理数据的代码和显示数据的程序代码分开,并且设计了一套方便的消息映射和命令传递机制,方便程序员的开发使用。其中消息映射机制本身比较庞大和复杂,对它的分析和了解无疑有助于我们写出更为合理的高效的程序。这里我们分析一下MFC的消息映射机制,以了解MFC是如何对Windows的消息加以封装,方便用户的开发。SDK下的消息机制实现
首先,简单回顾一下SDK下我们是如何进行Windows的程序开发的。Windows程序的运行是依靠外部发生的事件来驱动的,事件由操作系统捕捉,以消息的形式进入消息队列,然后通过消息循环从队列中不断取出消息,送到对应的窗口过程里处理。相对于DOS程序,Windows是以WinMain作为程序的入口点,以下就是一个简化的Win32程序的主体,通过while语句实现消息循环:
WinMain(…)
{
MSG msg;
RegisterClass(…);// 注册窗口类
CreateWindow(…);// 创建窗口
ShowWindow(…);// 显示窗口
UpdateWindow(…);
While(GetMessage(&msg,…)){ // 消息循环
TranslateMessage(…);
DispatchMessage(…);
}
return msg.wparam;
}
其中,msg代表消息,程序是通过GetMessage函数从和某个线程相对应的消息队列里面把消息取出来并放到消息变量msg里面。然后TranslateMessage函数用来把键盘消息转化并放到响应的消息队列里面,最后DispatchMessage函数把消息分发到相关的窗口过程去处理。窗口过程根据消息的类型对不同的消息进行相关的处理。在SDK编程过程中,用户需要在窗口过程中分析消息的类型及其参数的含义,然后做不同的处理,相对比较麻烦;而MFC把消息调用的过程给封装起来,使用户能够通过ClassWizard方便的使用和处理Windows的各种消息。MFC中的消息映射机制
在MFC的框架结构下,“消息映射”是通过巧妙的宏定义,形成一张消息映射表格来进行的。这样一旦消息发生,Framework就可以根据消息映射表格来进行消息映射和命令传递。
首先在需要进行消息处理的类的头文件(.H)里,都会含有DECLARE_MESSAGE_MAp()宏,声明该类拥有消息映射表格:
class CscribbleDoc:public Cdocument
{
…
DECLARE_MESSAGE_MAp()
};
然后在类 应用 程序文件(.Cpp)实现这一表格
BEGIN_MESSAGE_MAp(CInheritClass, CBaseClass)
//{{AFX_MSG_MAp(CInheritClass)
ON_COMMAND(ID_EDIT_COpY,OnEditCopy)
………
//}}AFX_MSG_MAp
END_MESSAGE_MAp()
----这里主要进行消息映射的实现,把它和消息处理函数联系在一起。其中出现三个宏,第一个宏是BEGIN_MESSAGE_MAp有两个参数,分别是拥有消息表格的类,及其父类。第二个宏是ON_COMMAND,指定命令消息的处理函数名称。第三个宏是END_MESSAGE_MAp()作为结尾符号。中间的奇怪符号//}}和//{{,是ClassWizard产生的,对程序无 影响。
观察DECLARE_MESSAGE_MAp的定义:
#define DECLARE_MESSAGE_MAp()
private:
static const AFX_MESSAGE_ENTRY _messageEntries[];
protected:
static AFX_DATA const AFX_MSGMAp messageMap;
virtual const AFX_MSGMAp* GetMessageMap()const;
里面又包含了MFC新定义的两个数据结构,如下:
AFX_MSGMAp_ENTRY
struct AFX_MSGMAp_ENTRY
{
UINT nMessage;// windows message
UINT nCode;// control code or WM_NOTIFY code
UINT nID;// control ID(or 0 for windows messages)
UINT nLastID;// used for entries specifying a range of control id's
UINT nSig;// signature type(action)or pointer to message #
AFX_pMSG pfn;// routine to call(or special value)
};
和AFX_MSGMAp
struct AFX_MSGMAp
{
const AFX_MSGMAp* pBaseMap;
const AFX_MSGMAp_ENTRY* lpEntries;
};
其中AFX_MSGMAp_ENTRY结构包含了一个消息的所有相关信息,而AFX_MSGMAp主要作用有两个,一是用来得到基类的消息映射入口地址。二是得到本身的消息映射入口地址。
实际上,MFC把所有的消息一条条填入到AFX_MSGMAp_ENTRY结构中去,形成一个数组,该数组存放了所有的消息和与它们相关的参数。同时通过AFX_MSGMAp能得到该数组的首地址,同时得到基类的消息映射入口地址。当本身对该消息不响应的时候,就可以上溯到基类的消息映射表寻找对应的消息响应。
现在我们来分析MFC是如何让窗口过程来处理消息的,实际上所有MFC的窗口类都通过钩子函数_AfxCbtFilterHook截获消息,并且在钩子函数_AfxCbtFilterHook中把窗口过程设定为AfxWndproc。原来的窗口过程保存在成员变量m_pfnSuper中。
在MFC框架下,一般一个消息的处理过程是这样的。
(1)函数AfxWndproc接收Windows操作系统发送的消息。
(2)函数AfxWndproc调用函数AfxCallWndproc进行消息处理,这里一个进步是把对句柄的操作转换成对CWnd对象的操作。
(3)函数AfxCallWndproc调用CWnd类的 方法 Windowproc进行消息处理。
(4)Windowproc调用OnWndMsg进行正式的消息处理,即把消息派送到相关的方法中去处理。在CWnd类中都保存了一个AFX_MSGMAp的结构,而在AFX_MSGMAp结构中保存有所有我们用ClassWizard生成的消息的数组的入口,我们把传给OnWndMsg的message和数组中的所有的message进行比较,找到匹配的那一个消息。实际上系统是通过函数AfxFindMessageEntry来实现的。找到了那个message,实际上我们就得到一个AFX_MSGMAp_ENTRY结构,而我们在上面已经提到AFX_MSGMAp_ENTRY保存了和该消息相关的所有信息,其中主要是消息的动作标识和相关的执行函数。然后我们就可以根据消息的动作标识调用相关的执行函数,而这个执行函数实际上就是通过ClassWizard在类实现中定义的一个方法。这样就把消息的处理转化到类中的一个方法的实现上。
(5)如果OnWndMsg方法没有对消息进行处理的话,就调用DefWindowproc对消息进行处理。这是实际上是调用原来的窗口过程进行缺省的消息处理。所以如果正常的消息处理的话,MFC窗口类是完全脱离了原来的窗口过程,用自己的一套体系结构实现消息的映射和处理。即先调用MFC窗口类挂上去的窗口过程,再调用原先的窗口过程。用户面对的消息参数将不再是固定的wparam和lparam,而是和消息类型具体相关的参数。比如和消息WM_LButtonDown相对应的方法OnLButtonDown的两个参数是nFlags和point。nFlags表示在按下鼠标左键的时候是否有其他虚拟键按下,point更简单,就是表示鼠标的位置。同时MFC窗口类消息传递中还提供了两个函数,分别为WalkpreTranslateTree和preTranslateMessage。我们知道利用MFC框架生成的程序,都是从CWinApp开始执行的,而CWinapp实际继承了CWinThread类。在CWinThread的运行过程中会调用窗口类中的WalkpreTranslateTree方法。而WalkpreTranslateTree方法实际上就是从当前窗口开始查找愿意进行消息翻译的类,直到找到窗口没有父类为止。在WalkpreTranslateTree方法中调用了preTranslateMessage方法。实际上preTranslateMessage最大的好处是我们在消息处理前可以在这个方法里面先做一些事情。举一个简单的例子,比如我们希望在一个CEdit对象里,把所有的输入的字母都以大写的形式出现。我们只需要在preTranslateMessage方法中判断message是否为WM_CHAR,如果是的话,把wparam(表示键值)由小写字母的值该为大写字母的值就实现了这个功能。小结
MFC通过巧妙的宏定义把消息调用的过程给封装起来,使用户能够通过ClassWizard方便的使用和处理Windows的各种消息。通过对MFC消息映射机制的分析,不仅能够使我们更好的使用MFC类库,同时,对于我们自己设计程序框架和类,无疑也有相当大的帮助。
参考 文献 :
[1] 侯俊杰 著,深入浅出MFC(第2版)[M].湖北:华中 科技 大学出版社,2001.5
[2] David J.Kruglinski著,Visual C 技术内幕(第五版)[M].北京:北京希望 电子 出版社,2001.1
第四篇:MFC处理绘图
(一)简单的图形输出、点: pDC->SetPixel(Cpoint(200,200),RGB(255,0,0,));// 在 [200,200] 的位置画一个红点2、线: pDC->MoveTo(0,0);// 直线起点的坐标为(0,0)
pDC->LineTo(100,100)// 从起点(0,0)到终点(100,100)画一条直线、矩形: Crect rect(0,0,100,100);
pDC->Rectangle(&rect);// 画一个长 100,宽 100 的矩形、圆和椭圆:
Crect rect(0,0,100,100);
pDC->Ellipse(&rect);
Crect rect(0,0,50,100);
pDC->Ellipse(&rect);、多边形:
CPoint poly[4];
poly[0]=CPoint(0,0);
poly[1]=CPoint(50,50);
poly[2]=Cpoint(50,100);
poly[3]=Cpoint(0,50);
pDC->Polygon(poly,4);
(二)库存对象
库存对象是由操作系统维护的用于绘制屏幕的常用对象,包括库存画笔、画刷、字体等。使用 SelectStockObject()函数可以直接选择库存对象,修改系统默认值。
例如,在视图中选用画笔和画刷库存对象来画图。
Void Cexam3_3View::OnDraw(CDC*pDC)
{
Cexam3_2Doc*pDoc=GetDocument();
CRect rect;
Rect.SetRect(Cpoint(0,0),Cpoint(200,200));
pDC->SelectStockObject(WHITE_PEN);// 选用白色画笔
pDC->SelectStockObject(GRAY_BRUSH);// 选用灰色画刷
pDC->Rectangle(rect);
pDC->MoveTo(0,0);
pDC->LineTo(200,200);
pDC->MoveTo(0,200);
pDC->LineTo(200,0);
}
(三)创建和使用自定义画刷和画笔、创建 CPen 的的方法:
•定义时直接创建
Cpen MyPen(PS_SOLID,2,RGB(255,0,0));
(2)定义 Cpen 对象,再调用 CreatePen()函数
Cpen pen;
Pen.CreatePen(PS_SOLID,2,RGB(255,0,0));、创建画刷的方法:
(1)创建实心画刷的 CreateSolidBrush()函数
Cbrush bs;
Bs.CreateSolidBrush(RGB(255,0,0));
(2)创建带阴影的画刷的 CreateHatchBrush()函数
Bs.CreateHatchBrush(HS_CROSS,RGB(255,0,0));// 创建一个带十字阴影的红色画刷
(3)创建位图画刷的 CreatePatternBrush()函数
本函数的应用如下:
CbitMap bmp;
Bmp.LoadBitMap(IDB_MYBITMAP);
Cbrush bs;
Bs.CreatePatternBrush(&bmp);
例4_
3、在视图中绘制三个图形,一个用阴影风格的画刷画的椭圆形,一个用深兰色实心画刷画的圆角矩形,一个用浅灰色画刷画的饼形。
void CExam4_3View::OnDraw(CDC* pDC)
{
CExam4_3Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
//设置影象模式
pDC->SetMapMode(MM_ANISOTROPIC);
CPen NewPen,OldPen;
//将画笔选入设备上下文
NewPen.CreatePen(PS_SOLID,5,RGB(0,0,255));
//创建深蓝色实心画刷
pDC->SelectObject(&NewPen);
CBrush NewBrush1,NewBrush2;
//将画刷选入设备上下文
NewBrush1.CreateSolidBrush(RGB(0,0,128));
//绘制圆角矩形
pDC->RoundRect(200,100,330,200,15,15);
//将库存对象浅灰画刷选入设备上下文
pDC->SelectStockObject(LTGRAY_BRUSH);
//绘制饼图
pDC->Pie(350,50,420,150,360,50,400,50);
//创建阴影画刷
NewBrush2.CreateHatchBrush(HS_DIAGCROSS,RGB(125,125,125));
pDC->SelectObject(NewBrush2);
//绘制椭圆
pDC->Ellipse(50,50,150,150);
}
第五篇:交通事故处理顺序
赢了网s.yingle.com
遇到交通法问题?赢了网律师为你免费解惑!访问>>
http://s.yingle.com
交通事故处理顺序
一、交通事故简易处理程序
1、固定现场证据:固定现场证据的方式可以通过画现场草图、拍摄现场照片、录像,也可以通过现场口头询问方式固定证据。
2、责令当事人撤离现场,恢复交通;拒不撤离现场的,予以强制撤离。对当事人不能自行移动车辆的,交通警察应当将车辆移至不妨碍交通的地点。
3、将具有下列情形之一的,公安交通管理部门将其驾驶的机动车移至不妨碍交通的地点或者有关部门指定的地点停放,依法给予处罚:
(1)驾驶人无有效机动车驾驶证的;
(2)驾驶人有饮酒、服用国家管制的精神药品或者麻醉药品嫌疑的。
法律咨询s.yingle.com
赢了网s.yingle.com
4、制作道路交通事故认定书:
(1)撤离现场后,交通警察应当根据现场固定的证据和当事人、证人叙述等,认定并记录道路交通事故发生的时间、地点、天气、当事人姓名、机动车驾驶证号、联系方式、机动车种类和号牌、保险凭证号、交通事故形态、碰撞部位等,并根据当事人的行为对发生道路交通事故所起的作用以及过错的严重程度,确定当事人的责任,制作道路交通事故认定书,由当事人签名。
(2)简易程序处理的道路交通事故认定书可以当场出具,也可以事后出具;但是最迟应当自现场调查之日起10日内制作道路交通事故认定书。
5、当场调解:当事人共同请求调解的(可以口头申请),交通警察应当当场进行调解,并在道路交通事故认定书上记录调解结果,由当事人签名,交付当事人。
但是,具有下列情形之一的,不适用调解;交通警察可以在道路交通事故认定书上载明有关情况后,将道路交通事故认定书交付当事人:
法律咨询s.yingle.com
赢了网s.yingle.com
(1)当事人对道路交通事故认定有异议的;
(2)当事人拒绝在道路交通事故认定书上签名的;
(3)当事人不同意调解的。
二、交通小事故的快速处理流程
首先,我们在此推荐各位车主在当地的交管局网站下载机动车交通事故快速处理协议书,并打印几份放在车上,以备快速处理事故之需。
这是北京地区的《机动车交通事故快速处理协议书》,大家可参阅。
快速处理小事故的具体流程。
1.发生小事故后,我们应该第一时间打开车辆的危险警告灯并在车后设置危险警告标识,防止后车追撞,保障车内乘客以及车辆的安全。
2.设立好警示标识之后就要初步确定事故双方的责任。【注:如
法律咨询s.yingle.com
赢了网s.yingle.com
果不能协商一致,那就需要报警等待交警来定责了。】如果双方能够协商一致,确定各自的责任,那么就可以进行下一步的快速处理流程了。
3.接下来就是拍照取证了。照片要求一张可以说明事故发生地点的全景照片以及若干张车辆发生接触部分的特写照片,有一张能说明事故现场情况的照片(包括马路上的刹车印、道路标识等),最好把当事司机与车辆的合影也拍摄下来。这不仅是为了向保险公司提供事故证据,也可以避免对方车主在挪车之后“耍赖”。【注:此时也可以打电话给保险公司,等待保险人员到现场拍照取证,通常需要一定时间。而对于一些小事故,保险公司有时也不到场,只到事故处理中心。】
4.拍完照后,我们就要检查对方驾照及车辆手续,车辆手续包括:车牌、年检、行驶本及交强险等。在核对完上述信息后才可以移动车辆,把车挪到不阻碍交通的地方,并继续打开双闪、设置安全警告标识。
5.在完成以上的步骤之后,双方就可以各自给投保的保险公司打电话,告知事故发生的时间、地点以及损失情况。而保险公司在受理之后,会回复车主一个报案号,之后就可以填写《交通事故快速处理协议书》了。
法律咨询s.yingle.com
赢了网s.yingle.com
6.最后,事故双方就可以到指定的交通事故快速处理中心定损,在那里会有交警来确定事故责任归属。定损之后,按双方各自应承担的责任,预交维修费用。
现在很多城市都设定了交通事故快速处理中心,大家可以到中心去协商具体的理赔事宜。
7.车辆送去维修,等维修好后,车主持相关的单据到保险公司理赔即可。这里要注意的是,单方责任事故需到全责方保险公司定损及索赔;双方同等责任事故则可到任意方保险公司定损及索赔。
三、重大交通事故的处理流程
第一步,查看车辆受损情况,初步判定事故责任,并相互记下车牌号、相互查验证件、记下联系方式,确定及协商是否需要交警现场处理。需要交警处理的应尽快拨打122交通报警电话。同时责任方向保险公司电话报案。
第二步,如权责清晰、双方对事故认定一致,符合并认同快速处理,双方对事故现场进行拍照,如有需要,也可以摄像。拍照的要诀是:站得正、拍得全。站得正,就是要站在车辆前后方的正中间,不要斜着拍,角度偏离可能影响交警判断。拍得全,就是要把事故车辆
法律咨询s.yingle.com
赢了网s.yingle.com 的全景拍摄进去,尤其要把车道、标线等拍进照片。如果没有事故现场的照片,或者照片拍得不好,有可能导致事故无法认定。
第三步,如对责任认定有分歧,可先对事故现场进行拍照,并对现场进行标记,等待交警前来处理。
第四步,填写快速处理协议书,需完整填写事故时间、地点、双方车辆车牌号、驾驶者姓名、驾驶证号、保险公司、电话、保险公司报案号、事故情形、车辆损失情况、责任认定、双方签字。
第五步,车险理赔凭借快速处理协议书。按规定,一方当事人负全部责任的,双方当事人到全责方保险公司办理理赔。全责方保险公司负责双方车辆的查勘定损,并按有关规定进行赔付。无责方损失在2000元以下部分由全责方交强险进行赔付;超过2000元的部分,通过全责方的商业三者险进行赔付。全责方未投保商业三者险的,由全责方当事人自行承担。双方当事人负同等责任的,可就近到任何一方保险公司办理定损。受理方保险公司必须无条件为双方车辆查勘定损,并向当事人出具双方车辆查勘报告、估损单以及保险公司所需的理赔资料。
调解处理交通事故损害赔偿纠纷具有哪些优点 http://s.yingle.com/y/jt/1071228.html
法律咨询s.yingle.com
赢了网s.yingle.com
上海市查处车辆非法客运规定
http://s.yingle.com/y/jt/1071227.html
关于修改《中华人民共和国外国籍船舶航行长江 http://s.yingle.com/y/jt/1071226.html
厦门市水路运输管理规定
http://s.yingle.com/y/jt/1071225.html
交通部海事局关于第二批国际航行船舶及其公司 http://s.yingle.com/y/jt/1071224.html
交通部关于委托交通部长江航务管理局实施相关 http://s.yingle.com/y/jt/1071223.html
甘肃省人民政府办公厅关于认真做好2018年春运工 http://s.yingle.com/y/jt/1071222.html
郑州市人民政府关于2002郑州市出租汽车更新 http://s.yingle.com/y/jt/1071221.html
叶X等与赵X等机动车交通事故责任纠纷案 http://s.yingle.com/y/jt/1071220.html
交通部关于国际海事组织《1974年国际海上人命安 http://s.yingle.com/y/jt/1071219.html
曾X与王X http://s.yingle.com/y/jt/1071218.html 关于修改《水路运输违章处罚规定》第 http://s.yingle.com/y/jt/1071217.html
法律咨询s.yingle.com
赢了网s.yingle.com
关于换发水路运输许可证等四证的通知 http://s.yingle.com/y/jt/1071216.html
关于发布鱼粉船舶运输安全技术要求等六项交通 http://s.yingle.com/y/jt/1071215.html
交通部关于《1965年便利国际海上运输公约》的三 http://s.yingle.com/y/jt/1071214.html
鹤壁市人民政府关于进一步加强农村公路建设的 http://s.yingle.com/y/jt/1071213.html
关于印发《江苏省交通建设工程安全责任制度》 http://s.yingle.com/y/jt/1071212.html
李X与中国平安财产保险股份有限公司XX分公司 http://s.yingle.com/y/jt/1071211.html
陕西省人民政府办公厅关于进一步培育拓展省内 http://s.yingle.com/y/jt/1071210.html
2018年最新“交强险”条例全文
http://s.yingle.com/y/jt/1071209.html
关于市区珠江沿岸交通秩序规定的通告 http://s.yingle.com/y/jt/1071208.html
交通事故造成十级伤残的,交强险公司应当如何承担赔偿责任 http://s.yingle.com/y/jt/1071207.html
交通部关于《中华人民共和国海上交通监督管理 http://s.yingle.com/y/jt/1071206.html
法律咨询s.yingle.com
赢了网s.yingle.com
杨X http://s.yingle.com/y/jt/1071205.html
南昌市人民政府办公厅批转市交通局等12委办局关 http://s.yingle.com/y/jt/1071204.html
关于发布《船舶无法交付货物处理试行办法》的 http://s.yingle.com/y/jt/1071203.html
最新交通肇事罪处罚规定
http://s.yingle.com/y/jt/1071202.html
福建省建设厅关于做好2018年城市公交春运工作的 http://s.yingle.com/y/jt/1071201.html
交通部关于执行2000年新版《国际海运危险货物规 http://s.yingle.com/y/jt/1071200.html
交通事故赔偿诉讼中,交通事故受害人应当如何举证 http://s.yingle.com/y/jt/1071199.html
西安市人民政府关于修改《西安市搬运装卸管理 http://s.yingle.com/y/jt/1071198.html
道路交通事故认定书应当包括哪些内容 http://s.yingle.com/y/jt/1071197.html
批发市场无证驾车致人死亡应定何罪 http://s.yingle.com/y/jt/1071196.html
转发市公安局《关于限制外地摩托车进入中山辖 http://s.yingle.com/y/jt/1071195.html
法律咨询s.yingle.com
赢了网s.yingle.com
四川省违反水上交通安全法规处理办法 http://s.yingle.com/y/jt/1071194.html
保险公司承担无责损害赔偿责任的案例解读 http://s.yingle.com/y/jt/1071193.html
济南轻微交通事故"速决",2000以下可私了 http://s.yingle.com/y/jt/1071192.html
道路旅客运输及客运站管理规定
http://s.yingle.com/y/jt/1071191.html
俞X与被告刘X机动车交通事故责任纠纷案 http://s.yingle.com/y/jt/1071190.html
广东省实施《国防交通条例》办法 http://s.yingle.com/y/jt/1071189.html
什么情况下交警应该回避
http://s.yingle.com/y/jt/1071188.html
杭州市营业性人力三轮车运输管理办法 http://s.yingle.com/y/jt/1071187.html
原告王XX诉被告王X http://s.yingle.com/y/jt/1071186.html
常州市人民政府关于颁发《常州市主要公路两侧 http://s.yingle.com/y/jt/1071185.html
如何查看交通事故现场图
http://s.yingle.com/y/jt/1071184.html
法律咨询s.yingle.com
赢了网s.yingle.com
郑X与天安财产保险股份有限公司北京中心支公司机动车交通事故责任纠纷案件 http://s.yingle.com/y/jt/1071183.html
太原市发展和改革委员会关于对机场大道工程可 http://s.yingle.com/y/jt/1071182.html
关于我商船航行台湾海峡问题的批复 http://s.yingle.com/y/jt/1071181.html
交通事故处理所涉及的诉讼时效
http://s.yingle.com/y/jt/1071180.html
国营工交企业经济核算工作试行办法 http://s.yingle.com/y/jt/1071179.html
襄樊市人民政府印发《襄樊市货运出租汽车管理 http://s.yingle.com/y/jt/1071178.html
原告李X与被告张X非机动车交通事故责任纠纷案 http://s.yingle.com/y/jt/1071177.html
吉林省道路交通事故处理暂行规定 http://s.yingle.com/y/jt/1071176.html
交通部关于发布《液化天然气码头设计规程》(http://s.yingle.com/y/jt/1071175.html
同时投保“车上责任险”与“雇主责任险”的,构成“重复保险”吗 http://s.yingle.com/y/jt/1071174.html
交安法常识解读:交通事故暂扣车辆最长40天 http://s.yingle.com/y/jt/1071173.html
法律咨询s.yingle.com
赢了网s.yingle.com
成都市人民政府关于全面开展车辆超限超载治理 http://s.yingle.com/y/jt/1071172.html
已到报废期限的单位牌照的三轮摩托车如何处理 http://s.yingle.com/y/jt/1071171.html
交通事故什么情况下可以认定为犯罪 http://s.yingle.com/y/jt/1071170.html
交通行政复议规定 http://s.yingle.com/y/jt/1071169.html 海南省人民政府关于确保铁路运输安全畅通的通 http://s.yingle.com/y/jt/1071168.html
北京市人民政府办公厅关于认真做好2018年春运工 http://s.yingle.com/y/jt/1071167.html
关于国际海事组织经修正的《经1978年议定书修订 http://s.yingle.com/y/jt/1071166.html
特别重大交通事故调查程序
http://s.yingle.com/y/jt/1071165.html
车X义与王X浩 http://s.yingle.com/y/jt/1071164.html 交通部关于加强海上客滚船检验工作的通知 http://s.yingle.com/y/jt/1071163.html
交通部关于国际海事组织《1965年国际海上运输便 http://s.yingle.com/y/jt/1071162.html
预防特大道路交通事故百日行动工作方案 http://s.yingle.com/y/jt/1071161.html
法律咨询s.yingle.com
赢了网s.yingle.com
关于坚决制止海上非客船载客的通知 http://s.yingle.com/y/jt/1071160.html
发生交通事故后如何进行自行协商 http://s.yingle.com/y/jt/1071159.html
交通部关于取消安徽海运有限责任公司等9家公司 http://s.yingle.com/y/jt/1071158.html
关于交纳国家能源交通重点建设基金的通知[失 http://s.yingle.com/y/jt/1071157.html
特大事故发生后,应向哪些单位报告 http://s.yingle.com/y/jt/1071156.html
海区航标动态通报管理办法
http://s.yingle.com/y/jt/1071155.html
市人民政府批转市交通局关于全市“十五”时期 http://s.yingle.com/y/jt/1071154.html
造成人身伤亡的交通肇事如何处理 http://s.yingle.com/y/jt/1071153.html
民用航空企业机场联合重组改制管理规定 http://s.yingle.com/y/jt/1071152.html
辽宁省工商行政管理局关于加强全省运输市场管 http://s.yingle.com/y/jt/1071151.html
交通事故赔偿举证指引
http://s.yingle.com/y/jt/1071150.html
法律咨询s.yingle.com
赢了网s.yingle.com
交通部关于庆祝“航海日”船舶挂旗并统一鸣笛 http://s.yingle.com/y/jt/1071149.html
四原告与被告宫X http://s.yingle.com/y/jt/1071148.html 上下班途中发生交通事故,可以将谁列为被告 http://s.yingle.com/y/jt/1071147.html
青海省人民政府办公厅转发省交通厅等部门关于 http://s.yingle.com/y/jt/1071146.html
交通事故赔偿标准以及如何计算交通事故赔偿 http://s.yingle.com/y/jt/1071145.html
法院终审满分司机驾车出险该赔
http://s.yingle.com/y/jt/1071144.html
国家经委 对外经济贸易部 交通部 国家商检 http://s.yingle.com/y/jt/1071143.html
原告罗X与被告王X强
http://s.yingle.com/y/jt/1071142.html
公交车未停稳下客大嫂摔伤奉贤客运赔80%计11.7万余元 http://s.yingle.com/y/jt/1071141.html
兰州市禁止客 http://s.yingle.com/y/jt/1071140.html 十堰市人民政府关于进一步加快交通发展的通知 http://s.yingle.com/y/jt/1071139.html
处理交通事故步骤是什么
http://s.yingle.com/y/jt/1071138.html
法律咨询s.yingle.com
赢了网s.yingle.com
个案具解“交通肇事罪(逃逸)”应当如何定罪量刑 http://s.yingle.com/y/jt/1071137.html
中华人民共和国船舶和海上设施检验条例 http://s.yingle.com/y/jt/1071136.html
中华人民共和国水路运输管理条例 http://s.yingle.com/y/jt/1071135.html
最佳的交通事故处理方法是什么
http://s.yingle.com/y/jt/1071134.html
机动车交通事故保险公司与侵权人的赔偿顺序和份额认定
(一)律师意见 http://s.yingle.com/y/jt/1071133.html
关于颁发《水路货物运输实行保险与负责运输相 http://s.yingle.com/y/jt/1071132.html
交通部公安部印发关于维护水上客运治安秩序,http://s.yingle.com/y/jt/1071131.html
交通事故救助基金或年内出台
http://s.yingle.com/y/jt/1071130.html
内蒙古自治区人民政府关于加快新农村新牧区公 http://s.yingle.com/y/jt/1071129.html
法律咨询s.yingle.com