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 ...
随机推荐
- 1+x初级Web的关键词填写
H5+CSS: 声明HTML网页标准:<!DOCTYPE> 图片标签 img css颜色样式color 定位 position 绝对absolute 相对 relative 外边距:mar ...
- 一篇文章带你了解设计模式原理——UML图和软件设计原则
一篇文章带你了解设计模式原理--UML图和软件设计原则 我们在学习过程中可能并不会关心设计模式,但一旦牵扯到项目和面试,设计模式就成了我们的短板 这篇文章并不会讲到二十三种设计模式,但是会讲解设计模式 ...
- c#5.0(.net 4.5之后)的 Async+await+Task的异步机制的调试笔记
1.)无返回值的情况(异步也是基于线程). using System; using System.Collections.Generic; using System.Linq; using Syste ...
- 初学《python编程从入门到实践》web应用程序,出现错误
一开始是遇到了TemplateDoesNotExist的错误,上百度都是说改settings.py里面的TEMPLATE的DIRS, 但我改了还是出现问题, 我用的<python编程从入门到实践 ...
- [cocos2d-x]我发现的内存管理机制的一些问题
之前看过的一些文章中关于内存的管理机制讲的非常好,但是我发现它们在谈到每一帧都会创建一个新的内存池的时候,我发现源码并不是这样: PoolManager* PoolManager::getInstan ...
- PyTorch如何加速数据并行训练?分布式秘籍大揭秘
PyTorch 在学术圈里已经成为最为流行的深度学习框架,如何在使用 PyTorch 时实现高效的并行化? 在芯片性能提升有限的今天,分布式训练成为了应对超大规模数据集和模型的主要方法.本文将向你介绍 ...
- P8855 [POI2002]商务旅行
简要题意 给出一个 \(N\) 个节点的树和一个长度为 \(M\) 的序列 \(S\).你需要从 \(1\) 出发,依次经过 \(S\) 中的所有点,求至少需要经过的边数. \(1 \le N \le ...
- [BUUCTF]洞拐洞拐洞洞拐
[BUUCTF] 洞拐洞拐洞洞拐 问题链接:https://buuoj.cn/challenges#洞拐洞拐洞洞拐 问题附件是一张图片. 一. 图片分析 查看图片,发现是由有规律的黑白像素构成的PNG ...
- 微机原理与系统设计笔记2 | 8086CPU结构与功能
打算整理汇编语言与接口微机这方面的学习记录.本部分讲解8086CPU的结构和基本功能以及特性. 参考资料 西电<微机原理与系统设计>周佳社 西交<微机原理与接口技术> 课本&l ...
- 快速入门API Explorer
摘要:华为云API Explorer为开发者提供一站式API解决方案统一平台,集成华为云服务所有开放 API,支持全量快速检索.可视化调试.帮助文档.代码示例等能力,帮助开发者快速查找.学习API和使 ...