孙鑫MFC学习心得:Lesson10:图形的绘制
来源:互联网 发布:linux 启动ftp服务 编辑:程序博客网 时间:2024/06/01 09:37
心得1:在框架窗口中无法响应鼠标单击事件。 在CMainFrame类上右键Add Windows Message Hander… -> WM_LBUTTONDOWN -> Add And Edit.在CMainFrame::OnLButtonDown(UINT nFlags, CPoint point)函数中添加: MessageBox("MainFrame Clicked"); 运行,点击鼠标没反应,是因为客户窗口总是在框架窗口之上,因此在这里框架窗口没法响应鼠标单击事件。因此响应事件一般都写在客户窗口中。
注意:框架窗口不能响应的是标准消息。对于点击菜单栏的命令消息,可以被框架窗口响应。
实际上,对于来自菜单栏的命令消息,所有从CCmdTarget派生类来的类都可以响应,只是有一个消息捕获的先后顺序问题。。而对于标准消息,只能被某个窗口响应,即只能被CWnd派生来的窗口类所响应。
心得2:给类添加成员变量时,不能忘了在该类的成员变量中给该变量初始化。
心得3:MFC的消息映射机制:看一下代码:
BEGIN_MESSAGE_MAP(CGraphicView, CView)//{{AFX_MSG_MAP(CGraphicView)ON_COMMAND(IDM_DOT, OnDot)ON_COMMAND(IDM_LINE, OnLine)ON_COMMAND(IDM_RECTANGLE, OnRectangle)ON_COMMAND(IDM_ELLIPSE, OnEllipse)ON_WM_LBUTTONDOWN()ON_WM_LBUTTONUP()//}}AFX_MSG_MAP// Standard printing commandsON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)END_MESSAGE_MAP()
这是在类的源文件(.CPP)中,一般放在源文件的开头位置。在BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间(一对注释宏之间)的代码实现了消息映射。消息映射就是消息与响应它的函数之间的映射。
以ON_COMMAND开头的几个消息映射是点击菜单项后发出的WM_COMMAND消息与消息响应函数之间的映射:在ON_COMMAND后的两个参数中,第一个参数是菜单项的ID,第二个参数是相应的响应函数。
另外两个消息映射
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_后面是Windows标准消息名(在Add Windows Message Handler中添加),由于系统默认Windows消息对应的函数为:如WM_LBUTTONDOWN的响应函数为OnLButtonDown,因此后面没有参数。
建立了消息与其响应函数之间的映射以后,我们就要去实现该响应函数。
实现分为两步:
第一步:在类的头文件中(一般在头文件末尾)对函数进行声明
protected://{{AFX_MSG(CGraphicView)afx_msg void OnDot();afx_msg void OnLine();afx_msg void OnRectangle();afx_msg void OnEllipse();afx_msg void OnLButtonDown(UINT nFlags, CPoint point);afx_msg void OnLButtonUp(UINT nFlags, CPoint point);afx_msg void OnTest();//}}AFX_MSGDECLARE_MESSAGE_MAP()
声明的具体位置在DECLARE_MESSAGE_MAP之前,一对注释宏之间。声明时要在前面加上afx_msg.另外,一般来说,返回值都是void。
第二步:在类的源文件(.cpp)中实现对函数的定义。在这里不能在函数头部加上asx_msg了。
void CGraphicView::OnDot() {// TODO: Add your command handler code herem_nDrawType=1;}void CGraphicView::OnLine() {// TODO: Add your command handler code herem_nDrawType=2;}void CGraphicView::OnRectangle() {// TODO: Add your command handler code herem_nDrawType=3;}void CGraphicView::OnEllipse() {// TODO: Add your command handler code herem_nDrawType=4;}
心得4:
- 孙鑫MFC学习心得:Lesson10:图形的绘制
- Windows程序设计__孙鑫C++Lesson10《图形绘制及各类对话框》
- MFC/GDI绘制图形
- MFC绘制图形
- MFC在VIEW的Client区绘制图形
- MFC基本图形的绘制(二)坐标映射
- mfc中使用不同的画笔来绘制图形
- 直接在MFC的对话框上利用OpenGL绘制图形
- 孙鑫 lesson10 Graphic
- 图形的绘制
- 图形的绘制
- 真实感图形的绘制
- 基本图形的绘制
- 手动图形的绘制
- 绘制自定义的图形
- 图形的绘制
- 基本的图形绘制
- 图形控件的绘制
- UVAOJ--10718 Bit Mask
- jacob java.lang.NoSuchMethodError: com.jacob.com.Dispatch.call(Lcom/jacob/com/Dispatch;Ljava/lang/St
- Java中获取键盘输入值的三种方法
- Nmap高级用法与典型场景
- VMWare Workstation 6.0调试Linux Kernel
- 孙鑫MFC学习心得:Lesson10:图形的绘制
- iOS sql用法
- Uva-101-The Blocks Problem
- 紧邻算法分类器之模拟图(二)
- Qt4连接mysql成功
- Asp.Net MVC 在后台获取PartialView、View文件生成的字符串
- 使用Javascript和PHP对服务端XML文档进行操作
- linux /dev 常见特殊设备介绍与应用[loop,null,zero,full,random]
- DHH推荐的五本书(未完待续)