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 ...
随机推荐
- 万字长文解析Scaled YOLOv4模型(YOLO变体模型)
一,Scaled YOLOv4 摘要 1,介绍 2,相关工作 2.1,模型缩放 3,模型缩放原则 3.1,模型缩放的常规原则 3.2,为低端设备缩放的tiny模型 3.3,为高端设备缩放的Large模 ...
- 【好软推荐】Scoop - Windows快速软件安装指南
在平常生活中如果要安装像git.java.node这些环境的时都需要先去官网下载安装程序,点击安装,之后还需要配置,不仅过程麻烦,而且工具多了之后整理起来也相当不容易,配置也很杂,整个电脑就像被污染了 ...
- 使用Prometheus监控docker compose方式部署的ES
需求 收集 ES 的指标, 并进行展示和告警; 现状 ES 通过 docker compose 安装 所在环境的 K8S 集群有 Prometheus 和 AlertManager 及 Grafana ...
- Go语言的赞和喷
(原发于 GitHub Pages,2019-01-01 23:22:43) 2019 年,我回来了. 不知不觉中,我入 PHP 的坑已经 3 年有余,入 Go 的坑也大半年了.作为不评论不舒服斯基星 ...
- ClickHouse ORM 3.x 发布啦
经过1年断断续续的迭代,ClickHouse ORM 3.x 发布啦-说说它的故事吧. 回顾下2022 说来惭愧上次写博客都是22年4月份了,今年行情不好团队急剧收缩,工作几乎全扑在接手存量业务和主业 ...
- [cocos2d-x]关于屏幕适配
第一步:理解屏幕分辨率和设计分辨率 通过这个图可以很容易理解,设计分辨率就是你能够进行纹理绘制的大小,而屏幕分辨率就是你的画框大小.而两者之间的适配,通过cocos2dx自带的几种适配方案来进行适配, ...
- vulnhub靶场之VULNCMS: 1
准备: 攻击机:虚拟机kali.本机win10. 靶机:VulnCMS: 1,下载地址:https://download.vulnhub.com/vulncms/VulnCMS.ova,下载后直接vb ...
- (23)go-micro微服务客户端开发(使用负载均衡)
目录 一 main.go开发 二 客户端代码开发: 三 客户端测试功能 1.发送注册邮件 2.实现注册功能 3.查询用户功能 四 运行项目 五 最后 一 main.go开发 至此,咱们的项目服务端代码 ...
- IO多路复用完全解析
上一篇文章以近乎啰嗦的方式详细描述了BIO与非阻塞IO的各种细节.如果各位还没有读过这篇文章,强烈建议先阅读一下,然后再来看本篇,因为逻辑关系是层层递进的. 1. 多路复用的诞生 非阻塞IO使用一个线 ...
- Springboot跨域配置的坑
部分时间需要加上crossOrigin