当我尝试使用以下代码将应用程序图标复制到客户区域的左上角时,我使用了如下代码:
case WM_PAINT:
hdcClient = BeginPaint (hwnd, &ps) ;
hdcWindow = GetWindowDC (hwnd) ;
cxSource = GetSystemMetrics (SM_CXSIZEFRAME) + GetSystemMetrics (SM_CXSIZE) ;
cySource = GetSystemMetrics (SM_CYSIZEFRAME) + GetSystemMetrics (SM_CYCAPTION) ;
BitBlt (hdcClient, 0, 0, cxSource, cySource, hdcWindow, 0, 0, SRCCOPY) ;
ReleaseDC (hwnd, hdcWindow) ;
EndPaint (hwnd, &ps) ;
return 0 ;
......
但是我总是得到这样的:
看来hdcWindow得到的就是它下面的窗口的hdc。我无法弄清楚我的BitBlt()调用出了什么问题。
最佳答案
hdcClient = BeginPaint (hwnd, &ps) ;
hdcWindow = GetWindowDC (hwnd) ;
cxSource = GetSystemMetrics (SM_CXSIZEFRAME) + GetSystemMetrics (SM_CXSIZE) ;
cySource = GetSystemMetrics (SM_CYSIZEFRAME) + GetSystemMetrics (SM_CYCAPTION) ;
BitBlt (hdcClient, 0, 0, cxSource, cySource, hdcWindow, 0, 0, SRCCOPY) ;
在此,副本的目标是
hdcClient
,这是BeginPaint
给出的句柄。但是BeginPaint
返回到客户区上下文的句柄,这不是您想要的。您想在Window区域的任何地方写东西(包括滚动条/菜单等),因此您可能希望目标是hdcWindow。