C++ MFC学习 (三)
视窗口覆盖在框架窗口之上
如果有了 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 }
可通过 类视图模式,在类属性中添加相应的消息响应

当框架调用CreateEx函数创建窗口时,会首先调用PreCreateWindow函数。
可通过修改传递给PreCreateWindow的结构体类型参数CREATESTRUCT,应用程序可以更改用于创建窗口的属性,在产生窗口之前有机会修改窗口的外观。
最后再调用CreateWindoweEx函数完成窗口的创建。

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学习 (三)的更多相关文章
- MFC 学习笔记
MFC 学习笔记 一.MFC编程基础: 概述: 常用头文件: MFC控制台程序: MFC库程序: 规则库可以被各种程序所调用,扩展库只能被MFC程序调用. MFC窗口程序: 示例: MFC库中类的简介 ...
- HTTP学习三:HTTPS
HTTP学习三:HTTPS 1 HTTP安全问题 HTTP1.0/1.1在网络中是明文传输的,因此会被黑客进行攻击. 1.1 窃取数据 因为HTTP1.0/1.1是明文的,黑客很容易获得用户的重要数据 ...
- MFC 学习之 鼠标移动到Toolbar按钮上显示提示信息(tooltip),状态栏也随之改变
1.在ResourceView里加入Toolbar资源,命名IDR_TOOLBAR1 2.在主程序的.h文件中加入变量: CToolBar m_toolbar;CImageList ...
- TweenMax动画库学习(三)
目录 TweenMax动画库学习(一) TweenMax动画库学习(二) TweenMax动画库学习(三) ...
- Struts2框架学习(三) 数据处理
Struts2框架学习(三) 数据处理 Struts2框架框架使用OGNL语言和值栈技术实现数据的流转处理. 值栈就相当于一个容器,用来存放数据,而OGNL是一种快速查询数据的语言. 值栈:Value ...
- 4.机器学习——统计学习三要素与最大似然估计、最大后验概率估计及L1、L2正则化
1.前言 之前我一直对于“最大似然估计”犯迷糊,今天在看了陶轻松.忆臻.nebulaf91等人的博客以及李航老师的<统计学习方法>后,豁然开朗,于是在此记下一些心得体会. “最大似然估计” ...
- DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件
DjangoRestFramework学习三之认证组件.权限组件.频率组件.url注册器.响应器.分页组件 本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分 ...
- [ZZ] 深度学习三巨头之一来清华演讲了,你只需要知道这7点
深度学习三巨头之一来清华演讲了,你只需要知道这7点 http://wemedia.ifeng.com/10939074/wemedia.shtml Yann LeCun还提到了一项FAIR开发的,用于 ...
- SVG 学习<三>渐变
目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...
- Android JNI学习(三)——Java与Native相互调用
本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...
随机推荐
- 后疫情办公时代——你需要的多人同步协同编辑Demo(可粘贴可撤销)
新冠病毒的疫情使得在线办公成为了一个常态,这使得在线文档成为了时下的热点.其中在线协同表格是在线文档的重要一个组成部分,纯前端表格在在线协同表格上有着得天独厚的优势:本身已经实现了单人操作在线文档的基 ...
- IdentityServer4 - V4 概念理解及认证授权过程
概念理解 Scope 范围,它的定义比较宽泛,可大可小.大到可把多个包含相同Scope的站点或服务形成一个虚拟的组,也可以是站点或服务的子级:小到身份所需要包含的信息,以精确出哪种身份. Client ...
- vue3学习第一天
第一章 Options API与Composition API 重写双向绑定 vue2 基于Object.defineProperty()实现 vue3 基于Proxy proxy与Object.de ...
- Potree 001 Potree介绍
1.Potree是什么 Potree是一种基于WebGL的点云数据可视化解决方案,包含点云数据转化,以及进行可视化的源码.该解决方案的主要优势在于对点云数据进行了多尺度的管理,在数据传输和可视化上都做 ...
- [python] 基于diagrams库绘制系统架构图
Python的Diagrams库允许通过简单的Python代码绘制云系统架构,实现对新的系统架构进行原型设计.Diagrams的官方仓库地址见:diagrams.Diagrams的官方文档和使用示例见 ...
- python之路24之 面向对象动静态方法、继承、派生
昨日内容回顾 人狗大战 1.直接使用字典表示人和狗 p1 = {} p2 = {} p3 = {} p4 = {} 2.封装产生人和狗的函数 def crreate_person():pass def ...
- python进阶之路6之 for循环方法
while循环补充说明 1.死循环 真正的死循环是一旦执行 CPU功耗会极速上升 直到系统采取紧急措施 尽量不要让CPU长时间不间断运算 2.嵌套及全局标志位 强调:一个break只能结束它所在的那一 ...
- [cocos2d-x]关于动画
声明一下:看见这篇文章总结的已经非常好了,没必要再去自己到处东翻西找了,链接:http://shahdza.blog.51cto.com/2410787/1546998 [唠叨] 基本动画制作需要用到 ...
- 再讲Floyd变形:传递闭包类问题
题目 今天上课老师讲到一道传递闭包的问题,由于蒟蒻之前讲的不详细再来讲一遍. 传送门 思路 建图,注意是有向图. 能确定名次指的是:在图上由这个点可以到达的点数+在图上可以到达这个点的点数=n-1 对 ...
- C#爬虫开发小结
前言 2023年以来一直很忙,临近春节,各种琐事更多,但鸽了太久没写文章总是不舒坦,忙中偷闲来记录下最近用C#写爬虫的一些笔记. 爬虫一般都是用Python来写,生态丰富,动态语言开发速度快,调试也很 ...