我正在尝试将所有者绘制按钮透明地放在背景上。当背景是纯色时,我没有遇到这种情况,但如果背景是图像,我似乎无法获得正确的HDC(处理设备上下文)到Bitblt()按钮所覆盖的区域。
作为DRAWITEMSTRUCT的一部分传递的HDC为我提供了一个按钮默认灰色区域。如果我试图得到HWND的父级,然后是设备上下文,即
pdc = GetDC(GetParent(hWnd));
然后获取BitBlt'd的背景是最后一个绘制窗口的背景。
我希望这个问题有道理。
这是我的代码:
pdis = (LPDRAWITEMSTRUCT)(lParam);
hdc = pdis->hDC;
button = pdis->CtlID - IDC_BUTOFFSET;
//pdc = GetDC((hWnd));
pdc = GetDC(GetParent(hWnd));
hbm = CreateCompatibleBitmap(pdc, Buttons_[button]->bc.Size.cx, Buttons_[button]->bc.Size.cy);
SelectObject(hdc, hbm);
BitBlt(hdc, 0, 0, Buttons_[button]->bc.Size.cx, Buttons_[button]->bc.Size.cy,
pdc, Buttons_[button]->bc.Position.x, Buttons_[button]->bc.Position.y, SRCCOPY);
TIA 最好的祝福 完
答案 0 :(得分:0)
似乎我所做的事情或多或少是正确的。但是Bitblt正在使用已经放置的按钮复制窗口部分,所以我实际上正在做的是复制默认按钮背景,然后将其覆盖在所有者绘制按钮的顶部。有点愚蠢但完全合乎逻辑。
我讨厌当计算机执行你告诉他们做的事情,而不是你想要他们做什么。 :P
现在我必须弄清楚如何复制背景,因为ownerdraw函数不知道按钮下的窗口在任何给定时间显示的内容......
感谢那些看过这个问题的人。
BTW:
pdc = GetDC(GetParent(hWnd)); //不正确 pdc = GetDC(hWnd); //更好