在WINCE中使所有者绘制按钮对其任意背景透明

时间:2010-03-23 08:35:35

标签: winapi visual-c++ windows-ce

我正在尝试将所有者绘制按钮透明地放在背景上。当背景是纯色时,我没有遇到这种情况,但如果背景是图像,我似乎无法获得正确的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 最好的祝福 完

1 个答案:

答案 0 :(得分:0)

似乎我所做的事情或多或少是正确的。但是Bitblt正在使用已经放置的按钮复制窗口部分,所以我实际上正在做的是复制默认按钮背景,然后将其覆盖在所有者绘制按钮的顶部。有点愚蠢但完全合乎逻辑。

我讨厌当计算机执行你告诉他们做的事情,而不是你想要他们做什么。 :P

现在我必须弄清楚如何复制背景,因为ownerdraw函数不知道按钮下的窗口在任何给定时间显示的内容......

感谢那些看过这个问题的人。

BTW:

pdc = GetDC(GetParent(hWnd)); //不正确 pdc = GetDC(hWnd); //更好