当我尝试使用以下代码将应用程序图标复制到客户区左上角时,我使用了如下代码:
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()调用有什么问题。
答案 0 :(得分:0)
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
返回客户区的上下文句柄,这不是你想要的。您想在窗口区域(包括滚动条/菜单等)的任何位置写入,因此您可能希望目标为hdcWindow。