Windows GDI、DC
来源:互联网 发布:手机淘宝对话框打不开 编辑:程序博客网 时间:2024/05/16 23:36
我看了关于GDI得一些方面内容,可以说是把我以前得知识给串起来了。下面是我得一些总结:
在如MS-DOS的单任务系统里面,正在运行的应用程序可以自由的做它想做的事情,无论是在屏幕上画线还是重新编写调色板。但是在windows下的多任务环境下,程序却没有如此的自由,A程序的输出是不可以影响B程序的输出的,所以每个程序都被严格的限制于它本身的窗口。GDI用简单的机制确保每个程序的绘制在上面的规则下执行,这个机制就是Device Context(DC)
当一个windows程序向屏幕,打印机等输出设备绘制时,它不是直接在设备绘制的,而是绘制在一个由DC(Device Context)表示的“Display Surface”上面的。
一个DC是在windows底层下的结构体,包含了GDI需要知道“display surface”的所有东西,包括和它相关的物理设备。当要在屏幕绘制时,应用程序需要从GDI获得一个DC句柄,然后当要调用GDI的输出函数时,就把这个句柄传递给它。通过DC,GDI可以保证程序的所有绘制都限制在屏幕的指定区域。
在mfc下应用程序可以通过CWnd::GetDC来获得一个DC,然后应该用CWnd::ReleaseDC来释放DC,具体的使用如下:
CDC* pDC = GetDC();
// Do some drawing
ReleaseDC(pDC)
当处理WM_PAINT消息时,要用到CWnd::BeginPain 和CWnd::EndPaint 来代替上面的函数。使用如下:
PAINTSTRUCT ps;
CDC* pDC = BeginPain(&ps);
//Do some drawing
EndPaint(&ps);
Special-Purpose Device Context Classes
CpaintDC For drawing in a window’s client area(OnPaint handles only)
CclientDC For drawing in a window’s client area(anywhere but OnPain)
CwindowDC For drawing anywhere in a window, including the nonclient area
CmetaFileDc For drawing to a GDI metafile
这些类的构造函数和释构函数在获取和释放DC的时候会调用合适的函数,所以就可以直接这样用了,不用象上面很复杂的用法了。
CpaintDC dc(this); //传递的指针可以确定DC所属的窗口
//Do some drawing
ClientDC & CwindowDC
è当你需要处理一个鼠标的单击,然后马上画出一个圆,你不能等到下一个WM_PAINT的消息到来才画图,而是马上,这是就需要CclientDC了。它可以在OnPaint的外面创建一个客户区域的device context
void CMainWindow::OnLButtonDown (UINT nFlags, CPoint point)
{
CRect rect;
GetClientRect (&rect);
CClientDC dc (this);
dc.MoveTo (rect.left, rect.top);
dc.LineTo (rect.right, rect.bottom);
dc.MoveTo (rect.right, rect.top);
dc.LineTo (rect.left, rect.bottom);
}
当你不仅仅是想绘制客户区域时,还包括标题栏,窗口边框等,就需要CwindowDC类了。你可以捕获WM_NCPAINT消息,重载OnNcPaint函数来重绘NcClient区域。
当你想在整个屏幕绘制时,可以创建一个CclientDC或CwindowDC对象,然后给他的构造函数传递一个NULL指针。如下:
CclientDC dc(NULL);
dc.Ellipse(0,0,100,100);
- Windows GDI与DC
- Windows GDI、DC
- Windows GDI、DC
- Windows GDI与DC
- windows GDI 的体会1---DC
- GDI DC通俗解释
- GDI和DC
- GDI与DC
- windows DC
- MFC GDI+透明内存DC
- Windows GDI与GDI+
- Windows GDI
- Windows DC介绍
- Windows 内存DC
- Windows GDI和GDI+区别
- windows编程之绘图DC
- 图形设备接口(GDI)与设备描述表(DC)
- 关于设备上下文DC和GDI的理解
- 20130912计划
- C# asp 重定向方法之一
- java中的内存分区
- Qt 提供的遍历器
- 链栈:初始化、判断栈空、入栈、出栈、获取栈顶元素等
- Windows GDI、DC
- Win7远程桌面防火墙设置
- myeclipse9.0 老是挂掉,处于假死状态,
- 游戏开发-SurfaceView类使用详解
- 练成Linux系统高手教程
- Aspose.Cells v7.5.3 支持读写HTML文件格式的页面设置选项
- java多线程返回函数结果
- [cocos2d-x]用CCSpriteBatchNode进行文理贴图的优化
- CreateProcess函数第二个命令行参数--(windows核心编程笔记)