当我尝试使用以下代码将应用程序图标复制到客户区域的左上角时,我使用了如下代码:

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()调用出了什么问题。
  • 我在Windows 7框中做到了。
  • 最佳答案

    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。

    10-07 23:40