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 ...
随机推荐
- 关于jQuery的操作
jQuery简介 简化了JS 类似于 后端 JDBC(操作数据库的基本API) dbutils(封装JDBC) xxx.jar 前端 JS ...
- c语言基础理解(原创)
家中小女初上大学开学计算机课程,学习C语言时遇到困难,为帮助她尽快入门,特写了这篇基本概念理解,希望帮她快速认识清楚C语言的本质.发到博客园上,也帮助同样的C语言初学者轻松掌握C语言的本质 ...
- [R语言] ggplot2入门笔记2—通用教程ggplot2简介
文章目录 通用教程简介(Introduction To ggplot2) 2 ggplot2入门笔记2-通用教程ggplot2简介 1. 了解ggplot语法(Understanding the gg ...
- node设置下载源
// 设置镜像源 npm config set registry https://registry.npm.taobao.org // 查看当前源 npm config get registry
- 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境
目录 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境 以下介绍PY32F0系列在 ...
- 通过Google Cloud Storage(GCS)管理Terraform的状态State
管理Terraform状态文件的最佳方式是通过云端的统一的存储,如谷歌云就用GCS. 首先要创建一个Bucket: $ gsutil mb -p pkslow -l us-west1 -b on gs ...
- FalseSharing-伪共享
1.CPU缓存 要了解什么是伪共享,首先得了解CPU缓存架构与缓存行的知识 (1)<CPU缓存架构> 主内存RAM是数据存在的地方,CPU和主内存之间有好几级缓存,因为即使直接访问主内存相 ...
- Quartz.Net 官方教程 Tutorial 1/3(Jobs 和 Trigger)
根据官网说明 类型 概述 IScheduler 调度类核心接口 IJob 独立实现业务逻辑需要继承的任务接口 IJobDetail 给任务接口定义实例的任务说明类接口 ITrigger 触发器,设置何 ...
- 【CTO变形记】有序定无序—为什么越努力,越无力
前言:我们用自己构建的认知结构来理解和映射这个世界,通过外界的反馈来调整现有的认知.但面对的现实越来越复杂,以及面对更多的未知且陌生的情况时,我们常常试图去"修整"接受到的信息 ...
- 函数式编程:Flutter&Dart中的组合
本文翻译自: Composition in Flutter & Dart 在 Flutter & Dart 中使用组合创建模块化应用程序. 什么是组合? 在dictionary.com ...