C++ MFC学习 (三)

摘要:
OnCreate和CreateCreate的区别在于Create负责注册和生成窗口。与动态创建控件中的Create类似,它在创建窗口后向操作系统发送WM。Create消息OnCreate不生成窗口,而是在显示窗口之前设置窗口的属性,例如样式和位置。OnCreate是消息WM_Create的消息响应函数扩展:MFC中后缀为Ex的函数是扩展函数。在MFC中,前缀为Afx的函数是全局函数,可以在程序中的任何地方调用。

视窗口覆盖在框架窗口之上

如果有了 OnDraw 不要再用OnPaint  OnPaint会覆盖掉OnDraw所画内容

  1 // MFC_Demo1View.cpp : CMFC_Demo1View 类的实现
  2 //
  3 
  4 #include "stdafx.h"
  5 // SHARED_HANDLERS 可以在实现预览、缩略图和搜索筛选器句柄的
  6 // ATL 项目中进行定义,并允许与该项目共享文档代码。
  7 #ifndef SHARED_HANDLERS
  8 #include "MFC_Demo1.h"
  9 #endif
 10 
 11 #include "MFC_Demo1Doc.h"
 12 #include "MFC_Demo1View.h"
 13 
 14 #ifdef _DEBUG
 15 #define new DEBUG_NEW
 16 #endif
 17 
 18 
 19 // CMFC_Demo1View
 20 
 21 IMPLEMENT_DYNCREATE(CMFC_Demo1View, CView)
 22 
 23 BEGIN_MESSAGE_MAP(CMFC_Demo1View, CView)
 24     // 标准打印命令
 25     ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint)
 26     ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint)
 27     ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CView::OnFilePrintPreview)
 28     ON_WM_LBUTTONDOWN()
 29     ON_WM_PAINT()
 30 END_MESSAGE_MAP()
 31 
 32 // CMFC_Demo1View 构造/析构
 33 
 34 CMFC_Demo1View::CMFC_Demo1View()
 35 {
 36     // TODO: 在此处添加构造代码
 37 
 38 }
 39 
 40 CMFC_Demo1View::~CMFC_Demo1View()
 41 {
 42 }
 43 
 44 BOOL CMFC_Demo1View::PreCreateWindow(CREATESTRUCT& cs)
 45 {
 46     // TODO: 在此处通过修改
 47     //  CREATESTRUCT cs 来修改窗口类或样式
 48 
 49     return CView::PreCreateWindow(cs);
 50 }
 51 
 52 // CMFC_Demo1View 绘制
 53 
 54 void CMFC_Demo1View::OnDraw(CDC* pDC)
 55 {
 56     CMFC_Demo1Doc* pDoc = GetDocument();
 57     ASSERT_VALID(pDoc);
 58     if (!pDoc)
 59         return;
 60 
 61     // TODO: 在此处为本机数据添加绘制代码
 62     pDC->TextOutW(100, 100, TEXT("HELLO"));
 63 }
 64 
 65 
 66 // CMFC_Demo1View 打印
 67 
 68 BOOL CMFC_Demo1View::OnPreparePrinting(CPrintInfo* pInfo)
 69 {
 70     // 默认准备
 71     return DoPreparePrinting(pInfo);
 72 }
 73 
 74 void CMFC_Demo1View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
 75 {
 76     // TODO: 添加额外的打印前进行的初始化过程
 77 }
 78 
 79 void CMFC_Demo1View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
 80 {
 81     // TODO: 添加打印后进行的清理过程
 82 }
 83 
 84 
 85 // CMFC_Demo1View 诊断
 86 
 87 #ifdef _DEBUG
 88 void CMFC_Demo1View::AssertValid() const
 89 {
 90     CView::AssertValid();
 91 }
 92 
 93 void CMFC_Demo1View::Dump(CDumpContext& dc) const
 94 {
 95     CView::Dump(dc);
 96 }
 97 
 98 CMFC_Demo1Doc* CMFC_Demo1View::GetDocument() const // 非调试版本是内联的
 99 {
100     ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMFC_Demo1Doc)));
101     return (CMFC_Demo1Doc*)m_pDocument;
102 }
103 #endif //_DEBUG
104 
105 
106 // CMFC_Demo1View 消息处理程序
107 
108 
109 void CMFC_Demo1View::OnLButtonDown(UINT nFlags, CPoint point)
110 {
111     // TODO: 在此添加消息处理程序代码和/或调用默认值
112 
113     CView::OnLButtonDown(nFlags, point);
114     CString str;
115     str.Format(TEXT("x = %d,y = %d"), point.x, point.y);
116     MessageBox(str);
117 }
118 
119 //如果有了 OnDraw 不要再用OnPaint  OnPaint会覆盖掉OnDraw所画内容
120 void CMFC_Demo1View::OnPaint()
121 {
122     CPaintDC dc(this); // device context for painting
123                        // TODO: 在此处添加消息处理程序代码
124                        // 不为绘图消息调用 CView::OnPaint()
125     dc.TextOutW(100, 100, TEXT("WORLD"));
126 
127 }

可通过 类视图模式,在类属性中添加相应的消息响应

C++ MFC学习 (三)第1张

 当框架调用CreateEx函数创建窗口时,会首先调用PreCreateWindow函数。

 可通过修改传递给PreCreateWindow的结构体类型参数CREATESTRUCT,应用程序可以更改用于创建窗口的属性,在产生窗口之前有机会修改窗口的外观。

最后再调用CreateWindoweEx函数完成窗口的创建。

C++ MFC学习 (三)第2张

OnCreate是一个消息响应函数,是响应WM_CREATE 消息的一个函数,而WM_CREATE消息是由Create函数调用的,一个窗口创建(Create)之后,会向操作系统发送WM_CREATE消息,OnCreate函数主要是用响应此消息的。

OnCreate 与 Create 的区别

  •  Create 负责注册并产生窗口,像动态创建控件中的Create 一样,窗口创建之后会向操作系统发送WM_CREATE消息
  • OnCreate 不产生窗口,只是在窗口显示前设置窗口的属性 如风格、位置等
  • OnCreate 是消息WM_CREATE 的消息响应函数

拓展:

    MFC中后缀为 Ex 的函数都市扩展函数

  在MFC中,以 Afx 为前缀的函数都是全局函数,可以在程序的任何地方调用他们。

免责声明:文章转载自《C++ MFC学习 (三)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇web的几种轮播MySQL数据目录更改及相关问题解决方案下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

如何在MFC中使你的程序具有xp/win7风格(一)

首先在你的工程的 "res目录" 下建一个文件, 命名 windows.manifest 后缀为:.manifest 然后用记事本打开放入    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>   <assembly xmlns="urn:schemas-microsoft-...

ActiveX控件实现

本文源码与文档下载 本章目标: 完成本章学习后,您将能够: Ø了解什么是ActiveX控件 Ø掌握如何编写基于MFC的ActiveX控件 Ø掌握如何测试ActiveX控件 Ø掌握如何测试ActiveX控件 Ø了解ActiveX控件如何注册 重点:ActiveX控件的实现、测试及注册。 本章将介绍ActiveX控件的应用与工作原理。我...

MFC中使用Tab Control从CTabCtrl控件类继承自己的类(CTabSheet)来处理。

使用Tab Control,并且从CTabCtrl控件类继承自己的类(CTabSheet)来处理。首先我先介绍一下如何使用CTabSheet。先要制作子对话框类,这次的子对话框类不要从CPropertyPage继承,而是直接从CDialog继承。并且各个子对话框资源的属性应设置为:Style为Child, Border为None。在主对话框资源中,加入一个...

MFC中的CString类

VC6.0中测试如下 #include "afx.h" //包含CString 类。需要设置 工程-》设置-》使用MFC 注:VS2013 可以直接包含 #include <atlstr.h> 就可以使用 CString 类 #include<iostream.h> int main() { CString csStr; c...

MFC学习之Radio---MFC Radio按钮组的使用例子

首先我们要完成一个功能,在一个添加新用户的场景里,通过Radio按钮来判断用户选择的是管理员还是普通用户。 要使用Radio组的功能首先我们必须作如下设置: 1、2个Radio按钮的ID号不同,但是他们的tab顺序必须是按顺序排列的,这些都可以在Resource.h文件里面查看到。 如:Radio1 ID:IDC_RADIO_ADMIN Radio2 ID...

MFC中CWnd类及其派生类对话框、消息处理、窗口操作

http://hi.baidu.com/xiaorida21/blog/item/8d8eb77a22eedee52e73b39e.html CWnd类 我们在屏幕上看到的所有对象都和窗口有关,它们或者派生于CWnd,属继承关系,如对话框、工具栏、状态栏、子控件;或者被CWnd合成,属服务员与服务对象关系,如图标、菜单、显示设备。 CWnd类封装的窗口操...