c++ win32怎么在WM_PAINT之外绘图,非mfc

2024-11-26 21:40:51
推荐回答(4个)
回答1:

API 程序里 在:
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
HDC hdc ;
。。。
switch (message)
{
case WM_CREATE : 。。。return 0 ;
case WM_SIZE : 。。。return 0 ;
case WM_TIMER : 。。。return 0 ;
case WM_PAINT : 。。。return 0 ;
case WM_DESTROY : 。。。return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
你可以在任何一个 case 里画图:
(1)hdc = GetDC (hwnd) ; // 获得 hdc
(2)用 hdc 画图
(3)ReleaseDC (hwnd, hdc) ; // 释放 hdc

回答2:

楼上说得不错,我补充一点
作为一个良好结构的程序,你应该在wm_paint之外,把图画在内存的bitmap中,然后调用invalidaterect函数
强制产生一个wm_paint消息,再用这个bitmap用bitblt画在窗口上

回答3:

HDC hDC = GetWindowDC(hWnd);
然后使用 hDC, 绘图

回答4:

1、每个窗口会有一个称为窗口过程的回调函数(WndProc),它带有四个参数,分别为:
窗口句柄(Window Handle) HWND,
消息ID(Message ID) UINT,
和两个消息参数(wParam, lParam)WPARAM、LPARAM,
WndProc的第一个参数hWnd就是当前接收消息的窗口句柄,第二个参数就是被传送过来的消息,第三、第四个参数都是附加在消息上的数据,这和MSG结构体是一样的。

2、LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
HDC hdc ;
。。。
switch (message)
{
case WM_CREATE : 。。。return 0 ;
case WM_SIZE : 。。。return 0 ;
case WM_TIMER : 。。。return 0 ;
case WM_PAINT : 。。。return 0 ;
case WM_DESTROY : 。。。return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
可以在任何一个 case 里画图:
(1)hdc = GetDC (hwnd) ; // 获得 hdc
(2)用 hdc 画图
(3)ReleaseDC (hwnd, hdc) ; // 释放 hdc