当需要在显示器上(当然包括打印机等设备上)绘图时,或者写文字的时候,需要取得设备的上下文句柄,即HDC,本文以下都称为HDC。那么,有哪些办法取得HDC呢?
1 BeginPain()和EndPaint()
在处理WM_PAINT消息时,使用
hdc = BeginPaint(hwnd, &ps); //... EndPaint(hwnd, &ps);
ps是类型为PAINTSTRUCT类型的变量,其中的rcPaint成员指明了显示的无效区域。该hdc只能在这个无效区域内进行绘图。同时BeginPaint会使无效区域变为有效。
2 GetDC()和ReleaseDC()
在WM_PAINT以外可以使用
hdc = GetDC(hwnd); //... ReleaseDC(hwnd, hdc);GetDC返回的HDC可以在整个显示区域进行绘图,但是不会将无效区域变为有效区域。
3 GetWindowDC()和ReleaseDC()
hdc = GetWindowDC(hwnd); //... ReleaseDC(hwnd, hdc);用来取得整个窗口的HDC,包括标题栏,菜单栏,状态栏,滚动条和边框(frame)。
以上三种方式取得的HDC都是与窗口相关的。当然有时还是需要使用与窗口无关的HDC。
4 CreateDC()和DeleteDC()
hdc = CreateDC(pszDriver, pszDevice, pszOutput, pData); //... DeleteDC(hdc);如:
hdc = CreateDC(_T("DISPLAY"), NULL, NULL, NULL);
取得整个屏幕的HDC。
5 CreateIC()
参数与CreateDC相同,用来创建获取信息的HDC,不能用此HDC进行绘图。6 CreateCompatibleDC()
hdcMem = CreateCompatibleDC(hdc); //... DeleteDC();创建内存DC。
7 CreateMetaFile()和CloseMetaFile()
hdcMeta = CreateMetaFile(pszFilename); //... hmf = CloseMetaFile(hdcMeta);