Windows使用2种方法获取设备描述表句柄
1.处理WM_PAINT消息时, 先调用BeginPaint(HWND, PAINTSTRUCT*),其返回值即是设备描述表句柄HDC(32位无符号整数).在处理完该消息后必须调用EndPaint(HWND, PAINTSTRUCT*).如果不处理该消息需要将消息传递给DefWindowProc(). 默认剪取区域为无效区域
PS. 自定义擦除背景需要在窗口过程中处理WM_ERASEBKGND消息
如果要在处理WM_PAINT消息时在更新的矩形外绘图,需要在调用BeginPaint前调用InvalidateRect(hwnd, null, true),这将使整个客户区无效并擦除背景,如果不擦除背景则将第三个参数设为false
2.在其他消息期间获取设备描述表句柄可以调用 GetDC(Hwnd) 并在结束后调用ReleaseDC(hwnd, hdc) 默认剪取区域为整个客户区域
类似的函数GetWindowDC()返回写入整个窗口的设备描述表句柄,包含了非客户区(例如,标题栏).而程序就应处理WM_NCPAINT消息(非客户区绘制)
文本:
GetTextMetrics(HDC, TEXTMETRIC*)返回设备描述表句柄当前选定的字体信息
客户区的大小:
WM_SIZE消息,LPARAM参数的低位字包含客户区的宽度,高位字包含客户区的高度,注册窗口类时指定了CS_VREDRAW,CS_HREDRAW,则在
WM_SIZE消息后紧跟一个WM_PAINT
width = LOWORD(lParam)
hight = HIWORD(lParam)
滚动条:
创建窗口时指定WS风格 WS_HSCROLL WS_VSCROLL
范围:SetScrollRange(hwnd,iBar,iMin,iMax,bRedraw) //iBar:SB_VERT, SB_HORZ
位置:SetScrollPos(hwnd,iBar,iPos,bRedraw)
GetScrollRange,GetScrollPos
WM_VSCROLL WM_HSCROLL wParam低位字指出鼠标对滚动条进行的操作(通知码SB_)
UpdateWindow将导致windows用WM_PAINT消息直接调用窗口过程,而不进入消息队列,在调用完成后,返回到UpdateWindow调用点,继续其后的语句.
Win32API SetScrollInfo(hwnd, iBar, &si, bRedraw) GetScrollInfo(hwnd, iBar, &si) //SCROLLINFO si;