MFC中客户区和非客户区的区别&OnPaint和OnDrawn的区别
来源:互联网 发布:手机号归属地 数据库 编辑:程序博客网 时间:2024/05/22 06:33
1.客户区和非客户区的区别:
窗口框架客户区即蓝色方框内区域,窗口框架非客户区指蓝色方框之外的窗口区域,包括程序图标、标题栏、菜单栏、最大\最小\关闭按钮,左右边框和底下的状态条。
在一个MDI(多文档)应用程序中每个概念如下图所示:
窗口框架客户区即蓝色方框内区域,窗口框架非客户区指蓝色方框之外的窗口区域,包括程序图标、标题栏、菜单栏、最大\最小\关闭按钮,左右边框和底下的状态条。
视图的客户区指图中绿色部分,即红色方框内区域,非客户区指视图部分红色方框之外的区域,包括文件图标、标题栏、三个按钮和两个滚动条。
工具栏不属于框架的非客户区,它同视图一样属于框架客户区内的内容,它也是一个窗口。
以后编程中,对于CClientDC,CWindowDC,GetClientDC(),GetWindowDC()应该可以很容易就区分开了.
C++中的DC:全称为Device Context设备描述表,在C++ MFC中的类为CDC。DC是一个包含设备(物理输出设备,如显示器及设备驱动程序)信息的结构体,在windows平台下,所以的图形操作都利用DC来完成。要在窗口中输出文字或显示图形,就需要用到设备描述表即DC。
设备描述表是一个windows的数据结构,它包含了一个设备(比如显示器和打印机)绘图属性的相关信息。所有的绘图操作的调用都通过一个设备描述表类型的对象来实现,这个类对象封装了API函数中关于画线、作图和输入输出文本的相关操作。设备描述表允许在窗口上进行与设备无关的绘图操作,设备描述表可用在往屏幕、打印机或图元文件的绘图操作。
2. OnPaint和OnDrawn的区别:
OnDraw()和OnPaint()好象兄弟俩,因为它们的工作类似。一般Windows会发送两个消息WM_PAINT(通知客户区有变化)和WM_NCPAINT(通知非客户区有变化)。非客户区的重画系统自己搞定了,而客户区的重画需要我们自己来完成。这就需要OnDraw()或 OnPaint()来重画窗口。它们用来重绘客户区,onpaint负责响应重绘消息,然后onpaint调用ondraw进行重绘。
OnDraw()和OnPaint()的区别:
首先:CView类派生自CWnd类,OnPaint()是CWnd的类成员, 同时负责响应WM_PAINT消息。OnDraw()是CVIEW的成员函数,并且没有响应消息的功能 。这就是为什么你用VC成的程序代码时,在视图类只有 OnDraw没有OnPaint的原因---onpaint函数都是继承自Cwnd基类 。
其次,要想在屏幕上绘图或显示图形,首先需要建立设备环境DC。其实DC是一个数据结构,它包含输出设备(不单指你17寸的纯屏显示器,还包括打印机之类的输出设备)的绘图属性的描述。MFC提供了CPaintDC类和CWindwoDC类来实时的响应,而CPaintDC支持重画。当视图变得无效时(包括大小的改变,移动,被遮盖等等),Windows 将 WM_PAINT 消息发送给它。该视图的OnPaint 处理函数 通过创建 CPaintDC 类的 DC对象来响应该消息并调用视图的 OnDraw 成员函数。通常我们 不必编写重写的 OnPaint 处理成员函数。
///CView默认的标准的重画函数
void CView::OnPaint()
{
CPaintDC dc(this);
OnPreparDC(&dc);
OnDraw(&dc); //调用了OnDraw
}
void CView::On
{
}
既然On
///视图中的绘图代码首先检索指向文档的指针,然后通过DC进行绘图调用。
void CMyView::On
{
}
因此我们一般用On
阅读全文
0 0
- MFC中客户区和非客户区的区别&OnPaint和OnDrawn的区别
- 客户区和非客户区指的什么?窗口客户区和视图客户区的区别
- 客户区和非客户区指的什么?窗口客户区和视图客户区的区别(转)
- 客户区和非客户区指的什么?窗口客户区和视图客户区的区别
- 客户区和非客户区指的什么?窗口客户区和视图客户区的区别
- 客户区和非客户区指的什么?窗口客户区和视图客户区的区别!
- 客户区和非客户区指的什么?窗口客户区和视图客户区的区别
- 客户区和非客户区指的什么?窗口客户区和视图客户区的区别!
- 客户区和非客户区指的什么?窗口客户区和视图客户区的区别
- 客户区和非客户区指的什么?窗口客户区和视图客户区的区别!
- MFC中客户区和非客户区概念的图示
- MFC中客户区和非客户区概念的图示
- 窗口客户区和视图客户区的区别
- 客户区和非客户区指的什么?窗口客户区和视图客户区的区别(小问题大思想)
- MFC中OnPaint和OnDraw的区别
- MFC OnPaint()函数中最先调用CDialog::OnPaint()和最后调用CDialog::OnPaint()的巨大区别
- MFC-客户区与非客户区
- 客户区和非客户区?窗口客户区和视图客户区?
- RN安卓极光推送
- Linux下C实现线程池
- LeetCode 153&154 Find Minimum in Rotated Sorted Array
- 虚拟机 之“三种”网络模式
- No resource found that matches the given name (at 'layout_constraintRight_toLeftOf' w
- MFC中客户区和非客户区的区别&OnPaint和OnDrawn的区别
- ToLua中list的 bug
- win10 64bit安装 redis 及 redis desktop manager 的方法
- java日常
- error C2065: 'cout' : undeclared identifier
- java编写死锁代码
- 贪心算法——狄克斯特拉算法(Greedy Algorithm
- ajax 级联操作
- 小组面试题2017