CR的代码文本

all for learning about the world
  订阅 订阅  :: 管理

GDI 摘要 自《windows 编程》

Posted on 2012-06-05 11:53  mumuliang  阅读(427)  评论(0编辑  收藏  举报
---------------------------------------------------------------------------
1.
windows给程序发送消息,即,操作系统调用应用程序的“窗口消息处理程序”
2.
窗口是在窗口类别的基础上建立的。窗口类别标识处理窗口消息的“窗口消息处理程序”
3.
对象=数据+方法
窗口=窗口数据&窗口类别数据&消息数据&消息处理数据 +“窗口消息处理程序”
4.
程序执行后,windows就为其建立一个“消息队列”用来保存消息。
5.
程序中会有一段代码专门用来从“消息队列”中取出消息,并转发给相应的“窗口消息处理程序”
6.
有些消息会直接发送给“窗口消息处理程序”而不经过消息队列!!
7.
MSG结构的message字段为WM_QUIT时,GetMessgae()返回0
8.
当窗口显示区的部分或全部变为“无效”,由WM_PAINT通知程序更新画面
9.
Windows内部为每个窗口保存一个「绘图信息结构」,这个结构包含了包围无效区域的最小矩形的
坐标以及其它信息,这个矩形就叫做「无效矩形」,有时也称为「无效区域」。
10.
窗口消息处理程序可以通过调用InvalidateRect使显示区域内的矩形无效。
..InvalidateRect,消息队列中若有WM_PAINT会修改其有效区域,若无,会新增WM_PAINT
..ValidateRect..有效。会让目前消息队列中的所有WM_PAINT都被删除。
通过调用GetUpdateRect,可以在任何时候取得无效区域的坐标。
11.
除了CreateDC产生的hdc外,程序不能在两个消息之间保存其他hdc
12.
Windows有许多坐标映射方式,默认是MM_TEXT。即左上开始右下结束的像素值。
13.
GetSystemMetrics SM_CXSCREEN SM_CYSCREEN
GetTextMetrics
14.
hdc=BeginPaint(hwnd,&ps),获取更新区域的DC
GetDC(hwnd),获取显示区域的DC
GetWindowDC(hwnd),获取含标题栏等的DC,在标题栏等上绘制需要拦截WM_NCPAINT
15.
hdc = CreateDC(pszDriver, pszDevice, pszOutput, pData)
// 获取整个屏幕的设备内容句柄的2种方法
hdc = CreateDC (TEXT ("DISPLAY"), NULL, NULL, NULL) 
hdc = GetDC(NULL);
// 获取设备内容的信息但不能进行绘图
hdc = CreateIC (TEXT ("DISPLAY"), NULL, NULL, NULL) ;
// 获取内存设备内容
hdcMem = CreateCompatibleDC (hdc) ; //建立与hdc兼容的dc
DeleteDC (hdcMem) ;
16.
metafile,GDI命令的二进制形式
17.
GetSystemMetric(SM_CYSCREEN)
GetSystemMetric(SM_CXSCREEN)
18.
iValue = GetDeviceCaps (hdc, iIndex) ;
---------------------------------------------------------------------------
1.
GDI的主要目的之一是支持与设备无关的图形。图形输出设备分为两大类:位映像设备和向量设备。
2.
Windows内定使用图素坐标系统。
大多数传统图形语言使用“虚拟”坐标系,水平和垂直轴的范围在0~32767;
GDI允许使用两种系统任一,甚至依据实际度量衡的坐标系;
3.
GDI是静态的显示系统,如果需要为游戏编写复杂的动画,就应该研究DirectX。(??)
4.
GDI函数按功能分为5大类:
1)获取和释放设备上下文的;
2)获取设备上下文的信息(比如目前的文字尺寸)的(确定GDI函数如何在设备上工作);
3)绘制函数(显示文字,画线,填充等);
4)获取和设置设备上下文的绘制参数(这些参数规定了绘制函数的绘制细节,例如文字色彩);
5)使用GDI对象的函数。(类似加强版的绘制参数,外部定义的一个数据结构,设备上下文通
  过该数据结构的句柄来使用它。)
5.
GDI基本图形有4类:
1)直线和曲线(直线,矩形,椭圆,弧,贝塞尔曲线,折线);
2)填入区域(画刷可以是实心,图案);
3)位图(设备相关DDB和设备无关DIB);
4)文字;
6.
GDI的其他部分:
1)映像模式和变换;
2)Metafile;
3)绘制区域(任意形状的复杂区域);
4)路径(GDI内部存储的直线和曲线的集合);
5)剪裁(限制在显示区域内的某一部分,剪裁区域通过区域或路径来定义);
6)调色盘;
7)打印;
7.
在大多数GDI函数中,使用COLORREF值(只是一个32位的无正负号长整数)来表示一种色彩。
这个无正负号长整数常常称为一个「RGB色彩」。
WINGDI.H提供了几种使用RGB色彩值的宏。
#define RGB(r,g,b) ((COLORREF)(((BYTE)(r) | \
((WORD)((BYTE)(g)) << 8)) | \
(((DWORD)(BYTE)(b)) << 16)))
GetRValue、GetGValue和GetBValue宏从COLORREF值中抽取出原色值。
8.
SetPixel和GetPixel
SetPixel (hdc, x, y, crColor) ;
crColor = GetPixel (hdc, x, y) ;