Windows是一个消息驱动系统。它通过把消息投入应用程序消息队列中或者把消息发送给合适的窗口消息处理程序,将发生的各种事件通知给应用程序。
要在窗口的显示区域绘图,可以使用Windows的图形设备接口(GDI)函数。(如:TextOut (hdc, x, y, psText, iLength) ;)
重绘(包括新的绘制)的原理:
1。有效区域和无效区域
需要重绘的区域称为“无效区域”,不需要的称为“有效区域”,无效区域的信息保存在一个“绘图信息结构”(PAINTSTRUCT)中
2。设备内容
是GDI内部保存的数据结构,与特定的显示设备(如视讯显示器或打印机)相关。对于视讯显示器,设备内容总是与显示器上的特定窗口相关。
设备内容中的有些值是图形“属性”,这些属性定义了GDI绘图函数工作的细节。(例如,对于TextOut,设备内容的属性确定了文字的颜色、文字的背景色、x坐标和y坐标映像到窗口的显示区域的方式,以及显示文字时Windows使用的字体。)
3。重绘的过程:
①windows发送WM_PAIT消息
在一个消息队列中只有一个WM_PAINT,如果在在完成绘制之前又有需要绘制的区域,不会再次发送,只是改变PAINTSTRUCT的内容
②取得设备内容句柄(hdc)
取得了该句柄后,Windows用内定的属性值填入内部设备内容结构。
可以通过呼叫不同的GDI函数改变这些默认值。
利用其它的GDI函数可以取得这些属性的目前值。
还有其它的GDI函数能够在窗口的显示区域真正地绘图。
③绘图
再得到的HDC上绘图
如:DrawText (hdc, TEXT ("Hello, Windows 98!"), -1, &rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;
注意:可以用函数手动得到要绘制的区域,可以用函数将想要绘制的区域变为无效区域
④释放设备内容句柄
必须成对出现:
hdc = BeginPaint (hwnd, &ps) ;//取得
使用GDI函数 //处理
EndPaint (hwnd, &ps) ; //释放
hdc = GetDC (hwnd) ; //取得
使用GDI函数 //处理
ReleaseDC (hwnd, hdc) ; //释放