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

如果有了 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学习 (三)的更多相关文章

  1. MFC 学习笔记

    MFC 学习笔记 一.MFC编程基础: 概述: 常用头文件: MFC控制台程序: MFC库程序: 规则库可以被各种程序所调用,扩展库只能被MFC程序调用. MFC窗口程序: 示例: MFC库中类的简介 ...

  2. HTTP学习三:HTTPS

    HTTP学习三:HTTPS 1 HTTP安全问题 HTTP1.0/1.1在网络中是明文传输的,因此会被黑客进行攻击. 1.1 窃取数据 因为HTTP1.0/1.1是明文的,黑客很容易获得用户的重要数据 ...

  3. MFC 学习之 鼠标移动到Toolbar按钮上显示提示信息(tooltip),状态栏也随之改变

    1.在ResourceView里加入Toolbar资源,命名IDR_TOOLBAR1 2.在主程序的.h文件中加入变量:           CToolBar m_toolbar;CImageList ...

  4. TweenMax动画库学习(三)

    目录               TweenMax动画库学习(一)            TweenMax动画库学习(二)            TweenMax动画库学习(三)           ...

  5. Struts2框架学习(三) 数据处理

    Struts2框架学习(三) 数据处理 Struts2框架框架使用OGNL语言和值栈技术实现数据的流转处理. 值栈就相当于一个容器,用来存放数据,而OGNL是一种快速查询数据的语言. 值栈:Value ...

  6. 4.机器学习——统计学习三要素与最大似然估计、最大后验概率估计及L1、L2正则化

    1.前言 之前我一直对于“最大似然估计”犯迷糊,今天在看了陶轻松.忆臻.nebulaf91等人的博客以及李航老师的<统计学习方法>后,豁然开朗,于是在此记下一些心得体会. “最大似然估计” ...

  7. DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件

    DjangoRestFramework学习三之认证组件.权限组件.频率组件.url注册器.响应器.分页组件   本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分 ...

  8. [ZZ] 深度学习三巨头之一来清华演讲了,你只需要知道这7点

    深度学习三巨头之一来清华演讲了,你只需要知道这7点 http://wemedia.ifeng.com/10939074/wemedia.shtml Yann LeCun还提到了一项FAIR开发的,用于 ...

  9. SVG 学习<三>渐变

    目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...

  10. Android JNI学习(三)——Java与Native相互调用

    本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...

随机推荐

  1. 这可能是Feign调用可重试的最佳方案了

    前言 在我们公司里,不同的服务之间通过Feign进行远程调用,但是,我们在尝试使调用可重试时遇到了一个小问题,Feign框架本身可以配置的自己的重试机制,但是它是一刀切的方式,所有的调用都是同样的机制 ...

  2. MAC中Flutter下载和安装

    Flutter官网 https://flutter.dev/docs/development/tools/sdk/releases?tab=macos   一.终端下配置系统环境变量和镜像 我的mac ...

  3. java进阶P-2.7

    类函数 函数 用于按指定字符(串)或正则去分割某个字符串,结果以字符串数组形式返回:对某些特殊字符,如果字符(串)正好是正则的一部分,则需要转义才能使用 字符有 | , + , * , ^ , $ , ...

  4. Quartz.Net 官方教程 Tutorial 1/3(Jobs 和 Trigger)

    根据官网说明 类型 概述 IScheduler 调度类核心接口 IJob 独立实现业务逻辑需要继承的任务接口 IJobDetail 给任务接口定义实例的任务说明类接口 ITrigger 触发器,设置何 ...

  5. KEIL5、STM32CubeMX、STM32CubeIDE 下载、安装

    一.资源下载 Keil5下载链接: https://www.keil.com/download/product/ STM32 标准库芯片包下载链接: https://www.keil.com/dd2/ ...

  6. sync.Once 使用及解析

    目录 前言 1. sync.Once 简介 2. sync.Once 源码解析 2.1 为什么 done 作为第一个字段 2.2 Do 方法的实现细节 2.3 其他重要细节 3. sync.Once ...

  7. 阿里百秀后台管理项目笔记 ---- Day02

    来吧展示: step1: 动态获取用户头像信息 引入 jquery.js 文件 <script src="/static/assets/vendors/jquery/jquery.js ...

  8. jwt的一些封装

    package study; import java.io.File; import java.io.IOException; import java.nio.file.Files; import j ...

  9. .NET周报 【2月第2期 2023-02-11】

    国内文章 SQLSERVER的truncate和delete有区别吗? https://mp.weixin.qq.com/s/wTIeW8rjj3cRzoaQcg2sOw 在面试中我相信有很多朋友会被 ...

  10. Redis避坑指南:为什么要有分布式锁?

    作者:京东保险 张江涛 1.为什么要有分布式锁? JUC提供的锁机制,可以保证在同一个JVM进程中同一时刻只有一个线程执行操作逻辑: 多服务多节点的情况下,就意味着有多个JVM进程,要做到这样,就需要 ...