使用半透明窗口时遇到的问题

zhhonghui 2008-12-18 10:08:52
我在win32程序中使用了一下方式将一个半透明的png显示在屏幕上:

WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
case WM_PAINT:
{
hdc = GetDC(hWnd);
graphics = new Graphics(hdc);

// 这个png是半透明的
m_pImageBack = Gdiplus::Image::FromFile(L"1.png");

srcWidth = m_pImageBack->GetWidth();
srcHeight = m_pImageBack->GetHeight();

RECT rectWin = {0, 0, WIN_WIDTH, WIN_HEIGHT};

POINT ptWinPos = {rectWin.left, rectWin.top};
SIZE sizeWindow={srcWidth,srcHeight};
POINT ptSrc={0,0};

graphics->DrawImage(m_pImageBack, 0, 0, srcWidth, srcHeight);
UpdateLayeredWindow(hWnd, hdc, &ptWinPos, &sizeWindow, hdc, &ptSrc, 0, &m_Blend, ULW_ALPHA);

delete m_pImageBack;
m_pImageBack = NULL;
delete graphics;
ReleaseDC(hWnd, hdc);
}
……
}

刚启动的时候很正常,透明的地方能显示桌面上的A字母,但是当我拖拽的时候,A字母竟然会跟着它一块走,半透明图片变成了不透明的了
求救ing
...全文
88 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiang_jiajia10 2008-12-19
  • 打赏
  • 举报
回复
帮顶
  • 打赏
  • 举报
回复
mark
qqlpp 2008-12-19
  • 打赏
  • 举报
回复
mark
zhhonghui 2008-12-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hhhh63 的回复:]
应该先重画桌面,再重画你的窗口。
[/Quote]
我使用
InvalidateRect(NULL, NULL, TRUE); 重绘也不行啊,能明显的感觉到后面所有的窗口在闪动
但是透明窗口还是那样,带着“A”到处跑
zhhonghui 2008-12-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hhhh63 的回复:]
应该先重画桌面,再重画你的窗口。
[/Quote]
那如果后面是应用程序呢,我该怎么重绘
hhhh63 2008-12-19
  • 打赏
  • 举报
回复
应该先重画桌面,再重画你的窗口。
withcsharp 2008-12-19
  • 打赏
  • 举报
回复
你用 SetLayeredWindowAttributes 不行吗
zhhonghui 2008-12-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 warrior 的回复:]
试试处理移动窗口的消息,进行重画.
[/Quote]
我在WM_MOUSEMOVE中调用了
UpdateWindow(g_hWnd);还是没有效
warrior 2008-12-19
  • 打赏
  • 举报
回复
试试处理移动窗口的消息,进行重画.
zhhonghui 2008-12-19
  • 打赏
  • 举报
回复
还有其它的建议吗?帮帮我啊

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧