社区
嵌入开发(WinCE)
帖子详情
CE上如何实现对话框背景半透明?
w12
2004-07-02 05:49:18
试了很多PC上的方法,都没有效果,难道不行吗?
...全文
279
13
打赏
收藏
CE上如何实现对话框背景半透明?
试了很多PC上的方法,都没有效果,难道不行吗?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
w12
2004-07-09
打赏
举报
回复
谢谢,也可能没有其它更快的办法了。
载舟之水
2004-07-08
打赏
举报
回复
补充一下,半透明其实不需要每个象素都算一次,可以跳跃,只要眼睛认为是半透明就行了。
ricky460
2004-07-07
打赏
举报
回复
mark 。 。 。
buptpki
2004-07-07
打赏
举报
回复
摘录一段别人实现的代码,可能对你有帮助,
做两个BMP,一个是背景图,一个是有蒙板的图。
下面这个函数用来显示透明位图,关键是最后一个参数,它提供了蒙板的颜色。在调用下面这个函数前先可以定义mask颜色
COLORREF crMask = RGB(0x00,0x00,0xff); //mask颜色
这里的MASK颜色是纯蓝色,其实是一个需要显示透明位图的文件里没有使用过的颜色,你需要在那个BMP文件中把透明部分都填成这种蓝色。然后调用下面这个TransparentBlt2函数即可,比如:
TransparentBlt2(hdc,IMAGEX_KONGXI*3+IMAGEX*2, IMAGEY_SHANG*2+IMAGEY+IMAGEY_XIA,24, 24,hMemDC,0,0,24,24,crMask);
void TransparentBlt2( HDC hdcDest, // 目标DC
int nXOriginDest, // 目标X偏移
int nYOriginDest, // 目标Y偏移
int nWidthDest, // 目标宽度
int nHeightDest, // 目标高度
HDC hdcSrc, // 源DC
int nXOriginSrc, // 源X起点
int nYOriginSrc, // 源Y起点
int nWidthSrc, // 源宽度
int nHeightSrc, // 源高度
UINT crTransparent // 透明色,COLORREF类型
)
{
HBITMAP hOldImageBMP, hImageBMP = CreateCompatibleBitmap(hdcDest, nWidthDest, nHeightDest); // 创建兼容位图
HBITMAP hOldMaskBMP, hMaskBMP = CreateBitmap(nWidthDest, nHeightDest, 1, 1, NULL); // 创建单色掩码位图
HDC hImageDC = CreateCompatibleDC(hdcDest);
HDC hMaskDC = CreateCompatibleDC(hdcDest);
hOldImageBMP = (HBITMAP)SelectObject(hImageDC, hImageBMP);
hOldMaskBMP = (HBITMAP)SelectObject(hMaskDC, hMaskBMP);
// 将源DC中的位图拷贝到临时DC中
if (nWidthDest == nWidthSrc && nHeightDest == nHeightSrc)
BitBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, hdcSrc, nXOriginSrc, nYOriginSrc, SRCCOPY);
else
StretchBlt(hImageDC, 0, 0, nWidthDest, nHeightDest,
hdcSrc, nXOriginSrc, nYOriginSrc, nWidthSrc, nHeightSrc, SRCCOPY);
// 设置透明色
SetBkColor(hImageDC, crTransparent);
// 生成透明区域为白色,其它区域为黑色的掩码位图
BitBlt(hMaskDC, 0, 0, nWidthDest, nHeightDest, hImageDC, 0, 0, SRCCOPY);
// 生成透明区域为黑色,其它区域保持不变的位图
SetBkColor(hImageDC, RGB(0,0,0));
SetTextColor(hImageDC, RGB(255,255,255));
BitBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, hMaskDC, 0, 0, SRCAND);
// 透明部分保持屏幕不变,其它部分变成黑色
SetBkColor(hdcDest,RGB(0xff,0xff,0xff));
SetTextColor(hdcDest,RGB(0,0,0));
BitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest, hMaskDC, 0, 0, SRCAND);
// "或"运算,生成最终效果
BitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest, hImageDC, 0, 0, SRCPAINT);
SelectObject(hImageDC, hOldImageBMP);
DeleteDC(hImageDC);
SelectObject(hMaskDC, hOldMaskBMP);
DeleteDC(hMaskDC);
DeleteObject(hImageBMP);
DeleteObject(hMaskBMP);
}
buptpki
2004-07-07
打赏
举报
回复
实现归实现,可惜效率不高。如果区域大,就要等上好几秒钟。
不错,确实存在这个问题,但是这个算法还是可以优化,具体实现参考游戏的做法,采用游戏API,这是DirectX没有出现时,微软提供的一个临时解决办法,这些API在动态链接库gx.dll中,可以直接操作视频缓冲区,速度大大提高,在Smartphone, pocketpc的SDK中有相关的源代码。
载舟之水
2004-07-06
打赏
举报
回复
应该不会,你的算法需要优化
w12
2004-07-06
打赏
举报
回复
实现归实现,可惜效率不高。如果区域大,就要等上好几秒钟。
lqlq99612
2004-07-05
打赏
举报
回复
nbcool(载舟之水),说详细一点撒,贴写代码上来我也想看看
载舟之水
2004-07-05
打赏
举报
回复
我这里的alpha 是指图像半透明叠加象素处理
具体的做法。参考我的C友:buptpki 的回答
http://community.csdn.net/Expert/topic/2899/2899695.xml?temp=.6300012
w12
2004-07-05
打赏
举报
回复
不支持alpha吧。
载舟之水
2004-07-03
打赏
举报
回复
你在WM_PAINT中做alpha混合不就行了
jiayodo
2004-07-03
打赏
举报
回复
gz
101monster
2004-07-02
打赏
举报
回复
呵呵,UP!
win
ce
evc自绘列表组合框
在Windows
CE
(W
CE
)平台上,使用Embedded Visual C++ (EVC)开发时,经常会遇到需要自定义控件的需求,以
实现
更丰富的用户界面。"win
ce
evc自绘列表组合框"是一个针对这种情况的解决方案,它允许开发者创建一个自定义...
精易模块[源码] V5.15
6、修正“文本_取中间_批量”当参数限定长度不要时,不能继续向下执行的BUG,感谢易友【半个灵魂づ留着】代码。 7、删除“文本_取中间_批量1”命令。 8、修复“注册表操作Ex->写入键值Ex”创建项,重启丢失的BUG,...
(VC)
半透明
的
实现
uC/GUI系统中的窗体可以实全透明效果,但是无法
实现
半透明
效果。 经过一天的实验,经于
实现
了窗体的
半透明
效果,与大家分享 怎么
实现
半透明
效果呢?先考虑原理。
半透明
原理: 假设LCD是256...
VC
实现
透明
背景
和
半透明
图片
1.如何将
对话框
客户区的
背景
设成透明的? crybird (寒号鸟) http://expert.csdn.net/Expert/topic/2172/2172079.xml 描述:如题。客户区的
背景
能设成透明的么?如果有时间,非客户区的隐藏也讲讲啦! 回复人:...
VC图片的
半透明
处理
半透明
原理: 假设LCD是256色的。颜色格式为332(RGB) 显存中的每一个字节的数据对应一个象素点。 在数据写入显存之前,读取相应相素点值,然后与新的数据按一定的规则混合之后,再写入相应像素点的显存。 这样...
嵌入开发(WinCE)
19,518
社区成员
41,565
社区内容
发帖
与我相关
我的任务
嵌入开发(WinCE)
硬件/嵌入开发 嵌入开发(WinCE)
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章