WINDOWS窗口的客户区域拖动技术及其应用

http://tech.ddvip.com   2006年03月31日    社区交流

本文详细介绍WINDOWS窗口的客户区域拖动技术及其应用

  更新窗口矩形区域直接使用窗口类中定义的屏幕画刷,即使利用SelectObject()函数选择相应屏幕画刷也无效,而且更新矩形区域范围是通过InvalidateRect()函数累加的,由UpdateWindow()函数通知系统开始进行窗口更新操作,整个过程是由系统来调度的,因此使用这种方法无法实现窗口的拖动虚框绘制和实时操作。

  直接操作窗口客户区域的方法是利用GetDC( )函数直接取得显示设备句柄,利用各种图形操作命令直接对显示设备进行绘图,它使用屏幕当前设置的画笔和画刷来实现各种图形绘制操作,无须系统任何消息应用程序就可以实时地对屏幕窗口进行更新和绘图操作。其操作过程是首先取得显示设备描述符句柄:

  HDC hDC;

  hDC=GetDC(hWnd);//取得hWnd窗口设备描述符表句柄

  当hWnd参数为NULL时取得的是整个屏幕的设备描述符表句柄,然后利用SelectObject()函数设置当前屏幕的画笔和画刷,就可以利用各种画图函数完成屏幕的绘图操作,最后利用ReleaseDC( )函数释放获取的显示设备描述表。由于这种方法可以直接控制当前屏幕的画笔和画刷,并且无需系统调度就可以直接对屏幕设备进行操作,因此利用这种方法完全可以实现窗口的拖动虚框。窗口的拖动虚框是用来描述要移动窗口大小的虚线框和实线框,当矩形拖动框为虚线时,需要利用画点或画线函数经过一定算法来实现,这就需要设置当前的屏幕画笔;当窗口的拖动框为实线框时,如果利用画线函数只需设置屏幕画笔即可,如果利用画矩形函数Rectangle( )在设置当前屏幕画笔的同时必须使用SelectObject(hDC,GetStockObject(NULL_BRUSH))屏蔽掉任何屏幕画刷,否则WINDOWS程序会很快吞筮掉所有GDI资源,相当于在屏幕设备资源中增加了无数矩形区域。

  对于窗口拖动框的擦除操作,只需在拖动框绘制函数中将屏幕的图形画笔操作方式设置为R2_XORPEN异或方式,即SetROP2(hDC2,R2_XORPEN),在拖动框绘制结束时注意恢复,然后在窗口拖动框移动到下一个位置前,在原屏幕位置重新调用绘制函数一次将原来拖动框擦除。下面给出笔者利用画矩形、画线和画点函数实现的拖动框函数,用户在使用时可选择自己喜欢的实线或虚线拖动框函数。

责编:豆豆技术应用

正在加载评论...