gpt4 book ai didi

c++ - 为什么 BitBlt 没有复制正确的部分

转载 作者:太空狗 更新时间:2023-10-29 23:16:54 26 4
gpt4 key购买 nike

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

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 ;
......

然而我总是得到这样的:

enter image description here

好像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 返回客户区上下文的句柄,这不是您想要的。你想在窗口区域的任何地方写入(包括滚动条/菜单等),所以你可能希望目的地是 hdcWindow。

关于c++ - 为什么 BitBlt 没有复制正确的部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21540504/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com