Windows程序设计学习(3)

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;

 

原文地址:https://www.cnblogs.com/neking/p/2522847.html