cwnd、cdc、hwnd和hdc
来源:互联网 发布:js为元素添加事件 编辑:程序博客网 时间:2024/04/27 19:08
对于学习VC的朋友来说,这些东西很熟悉了吧?可是我自己还是有点犯糊涂,所以从百度到处搜搜,记载如下。
1.对象和句柄
CWnd是类, HWnd是句柄, CWnd封装了HWnd
AfxGetMainWnd()->m_hwnd;
同样的, CDC和HDC也是这样的关系:
CDC *pDC=new CDC;
HDC hdc;
pDC->GetSafeHdc();//通过对象获得句柄:
pDC->Attach(hdc); //通过句柄获得对象:
HWND是SDK定义的类型,是一个无确切意义的32-bit值,在调用API时用于指代窗体。
CWnd*是一个有确切意义的指针,指向一个MFC窗体类CWnd的实例。因为MFC对SDK做了封装,大部分调用都可以用CWnd*作为参数,所以很容易混淆。从一个CWnd*获取句柄的方法是pWnd->GetSafeHwnd(),他比pWnd->m_hWnd安全,因为前者在pWnd == NULL的时候返回NULL而后者出现access violation.
2. CWnd和CDC, hwnd和hdc
所有跟窗口相关的操作都被封装在CWnd类中; 所有跟绘图相关的操作都被封装在CDC类中.
hwnd句柄是描述一个窗口的形状、位置、大小、是否显示、它的父窗口、兄弟窗口、等等的一组数据结构;hdc句柄是一个实实在在的用于具体表现这个窗口时,需要对这个窗口有个场合来实现的地方。
3. 使用不同的CDC绘图
CClientDC客户区dc。CWindowDC整窗口dc。CDC 任何dc。
01
/*
02
CDC *pDC=CWnd::GetDC();
03
//此处直接使用CWnd类的GetDC,其返回值为CDC*
04
//SDK中的同名函数使用返回的是HDC
05
06
*/
07
pDC->MoveTo(m_ptOrigin);
08
pDC->LineTo(point);
09
CWnd::ReleaseDC(pDC);
10
11
/*//使用CClientDC绘图
12
CClientDC派生自CDC,在构造的时候调用GetDC,
13
在析构的时候调用ReleaseDC。使得我们不必
14
显示调用GetDC与ReleaseDC。
15
*/
16
CClientDC dc(
this
);
17
dc.MoveTo(m_ptOrigin);
18
dc.LineTo(point);
19
20
/*//使用CWindowDC绘图
21
同样派生自CDC,构造调用GetWindowDC,
22
23
析构时调用ReleaseDC()。
24
可以访问整个屏幕区域,包括客户区和非客户区。
25
*/
26
CWindowDC dc(
this
);
27
dc.MoveTo(m_ptOrigin);
28
dc.LineTo(point);
超越C++原创文章,转载请注明来源并保留原文链接
本文链接:http://www.beyondc.cn/cwnd-cdc-hwnd-and-hdc.html
- cwnd、cdc、hwnd和hdc
- cwnd、cdc、hwnd和hdc
- CWnd,HWND; CDC,HDC
- CWnd和CDC, hwnd和hdc
- CWnd和CDC, hwnd和hdc
- CWnd和CDC, hwnd和hdc的区别
- pDC CDC GetDC hdc HDC hWnd HWND CWnd pWnd ---整理!!
- hWnd,hDC,CDC
- cWnd,CDC ,hwnd
- HANDLE HINSTANCE HWND CWnd CDC
- 十:[zz]MFC - hWnd & hDC,句柄,CWnd
- hWnd,hDC,CDC有什么区别
- hWnd,hDC,CDC有什么区别
- CWnd指针和HWnd
- CWnd指针和HWnd
- CWnd指针和HWnd
- CWnd指针和HWnd
- CWnd和HWnd
- PHP之屏幕生成截图
- 一个QT信号与槽需要注意的问题
- PHP的头疼问题
- Java正则表达式入门
- PHP实现文件下载统计
- cwnd、cdc、hwnd和hdc
- strcmp,stricmp,strncmp,strncmpi,strcat,strncat
- substring引发的编程细节
- 从VC6迁移至VS2005
- js动态创建表格
- 二叉树之遍历问题——根据先序中序遍历序列求后序序列
- IE8看优酷会出现错误,解决方法
- Linux下Socket编程之TCP Server端
- C++注册表操作