WinCE下的透明窗口,请教各位!

chengdi01 2012-05-19 05:16:33
直接开说吧.

首先,有一个大窗口做背景.我在上面放了个按钮.点击按钮后,小窗口会弹出来.
如下图:

绘图函数OnPaint().中是这样的:
CPaintDC dc(this);
CDC memDC;
CBitmap bmBkgnd;
bmBkgnd.Attach( m_hBmpBg );

memDC.CreateCompatibleDC(&dc);
CBitmap *pOldBm = memDC.SelectObject( &bmBkgnd );

BITMAP bm;
bmBkgnd.GetObject(sizeof(bm), &bm);

dc.BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &memDC, 0, 0, SRCCOPY );

memDC.SelectObject( pOldBm );
bmBkgnd.Detach();

后来,我在网上搜了下资料.把小窗口背景图片的过滤色给去掉了.

TransparentBlt(dc.m_hDC, 0, 0, bm.bmWidth, bm.bmHeight,
memDC, 0, 0, bm.bmWidth, bm.bmHeight, RGB(255, 0, 255));
替换掉了上面的:
dc.BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &memDC, 0, 0, SRCCOPY );
一句.

但是变成下面这样子了.


但是我需要把小窗口四个角的那块灰色的也要去掉.应该怎么做.先行谢过大家!
...全文
251 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
月之海 2012-05-23
  • 打赏
  • 举报
回复
Overlay,那也要看你的硬件平台支不支持(显示多个图层),驱动是否支持?
chengdi01 2012-05-23
  • 打赏
  • 举报
回复
我用过AlphaBlend,小窗口不贴图时是全透明的(设透明度为0).可是贴图后.还是成了图二的效果.
也可能我用的不对.
我现在正在学习Overlay.成功后就结贴.
月之海 2012-05-23
  • 打赏
  • 举报
回复
使用AlphaBlend,可以实现透明。当然需要系统增加组件:SYSGEN_GDI_ALPHABLEND。
chengdi01 2012-05-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

Overlay,那也要看你的硬件平台支不支持(显示多个图层),驱动是否支持?
[/Quote]

硬件是支持的
DAISARU 2012-05-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
引用 4 楼 的回复:

必须使用Alpha Blend


必须吗?呵呵...
[/Quote]

还有什么更好的方法么?(除了硬件支持的overlay)请教,哈哈
91program 2012-05-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

必须使用Alpha Blend
[/Quote]

必须吗?呵呵...
DAISARU 2012-05-22
  • 打赏
  • 举报
回复
必须使用Alpha Blend
西山小月 2012-05-21
  • 打赏
  • 举报
回复
CE下没法按widows下的方法做透明窗口
91program 2012-05-19
  • 打赏
  • 举报
回复
如果使用 Dialog 来显示,是不可能使用非矩形的窗体的,包括想做四角透明的效果一样是不可能的。

只有使用 overlay 来显示,才能做到 LZ 想要的效果。
chengdi01 2012-05-19
  • 打赏
  • 举报
回复
怎么看不到图.重新编辑一下图.
第一张图


第二张图



代码也重新编辑一下:
	CPaintDC dc(this); 
CDC memDC;
CBitmap bmBkgnd;
bmBkgnd.Attach( m_hBmpBg );

memDC.CreateCompatibleDC(&dc);
CBitmap *pOldBm = memDC.SelectObject( &bmBkgnd );

BITMAP bm;
bmBkgnd.GetObject(sizeof(bm), &bm);

//第一张图用的这句
dc.BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &memDC, 0, 0, SRCCOPY );

//第二张图用的这句
//TransparentBlt(dc.m_hDC, 0, 0, bm.bmWidth, bm.bmHeight,
// memDC, 0, 0, bm.bmWidth, bm.bmHeight, RGB(255, 0, 255));
memDC.SelectObject( pOldBm );
bmBkgnd.Detach();

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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