7286|10

68

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请问在wince中如何实现半透明对话框?? [复制链接]

麻烦说得稍微具体点,或者给个链接之类的。。
此帖出自WindowsCE论坛

最新回复

最近在搞WINCE,用GDI写了个半透明,其实原理就上边的大大所说,图层叠加就行了 取底图,去关键色,半透明 //绘缓冲区DC,把shdc半透明贴到dhdc上 void DrawCache2(HDC dhdc,RECT rect1,HDC shdc,RECT rect2) {         //底图片         HDC backhdc = CreateCompatibleDC (dhdc) ;         HBITMAP hbitback = CreateCompatibleBitmap(dhdc,rect1.right - rect1.left,rect1.bottom - rect1.top);         HGDIOBJ hbojtemp = SelectObject (backhdc,hbitback);         //取底片         BitBlt(                 backhdc,                 0,                 0,                 rect1.right - rect1.left,                 rect1.bottom - rect1.top,                 dhdc,                 rect1.left,                 rect1.top,                 SRCCOPY);         //去关键色         TransparentBlt(backhdc,                 0,                 0,                 rect1.right - rect1.left,                 rect1.bottom - rect1.top,                 shdc,                 rect2.left,                 rect2.top,                 rect2.right - rect2.left,                 rect2.bottom - rect2.top,                 0);         //*         //半透明         BLENDFUNCTION bf;         bf.BlendOp   =   AC_SRC_OVER;        //目前只有这个         bf.BlendFlags   =   0;               //保留位,目前只有这个         bf.AlphaFormat   =   AC_SRC_OVER;    //这个参数是指定加载自带Alpha通道         bf.SourceConstantAlpha   =   127;    //如果上面用了自带通道,那这个值就没意义         AlphaBlend(dhdc,                 rect1.left,                 rect1.top,                 rect1.right - rect1.left,                 rect1.bottom - rect1.top,                 backhdc,                 0,                 0,                 rect1.right - rect1.left,                 rect1.bottom - rect1.top,                 bf);         //*/         SelectObject(backhdc,hbojtemp);            DeleteDC(backhdc);         DeleteObject(hbitback); } 复制代码  详情 回复 发表于 2010-5-15 11:59
点赞 关注
 

回复
举报

77

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
截图自己做 alpha处理,再画出来。。
此帖出自WindowsCE论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
winCE默认不支持透明,所以画图的时候得自己画
此帖出自WindowsCE论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

4
 
CE是不支持的,没有简单的方法

可以考虑使用overlay
此帖出自WindowsCE论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

5
 
帮你顶
此帖出自WindowsCE论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

6
 
帮顶,同问。。
此帖出自WindowsCE论坛
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

7
 
只能使用图层混合迭加,自己处理
此帖出自WindowsCE论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

8
 
6.0的支持
此帖出自WindowsCE论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

9
 
可以通过在Pramery Surface层中设置alpa和KeyColor的值,来实现overlay Surface层的透明度,这个Wince6.0是支持的,就知道这么多了……
此帖出自WindowsCE论坛
 
 
 

回复

95

帖子

0

TA的资源

一粒金砂(初级)

10
 
自己用 图层叠加 处理吧。
MARK.
此帖出自WindowsCE论坛
 
 
 

回复

93

帖子

0

TA的资源

一粒金砂(初级)

11
 
最近在搞WINCE,用GDI写了个半透明,其实原理就上边的大大所说,图层叠加就行了
取底图,去关键色,半透明

  1. //绘缓冲区DC,把shdc半透明贴到dhdc上
  2. void DrawCache2(HDC dhdc,RECT rect1,HDC shdc,RECT rect2)
  3. {

  4.         //底图片
  5.         HDC backhdc = CreateCompatibleDC (dhdc) ;
  6.         HBITMAP hbitback = CreateCompatibleBitmap(dhdc,rect1.right - rect1.left,rect1.bottom - rect1.top);
  7.         HGDIOBJ hbojtemp = SelectObject (backhdc,hbitback);

  8.         //取底片
  9.         BitBlt(
  10.                 backhdc,
  11.                 0,
  12.                 0,
  13.                 rect1.right - rect1.left,
  14.                 rect1.bottom - rect1.top,
  15.                 dhdc,
  16.                 rect1.left,
  17.                 rect1.top,
  18.                 SRCCOPY);

  19.         //去关键色
  20.         TransparentBlt(backhdc,
  21.                 0,
  22.                 0,
  23.                 rect1.right - rect1.left,
  24.                 rect1.bottom - rect1.top,
  25.                 shdc,
  26.                 rect2.left,
  27.                 rect2.top,
  28.                 rect2.right - rect2.left,
  29.                 rect2.bottom - rect2.top,
  30.                 0);


  31.         //*
  32.         //半透明
  33.         BLENDFUNCTION bf;
  34.         bf.BlendOp   =   AC_SRC_OVER;        //目前只有这个
  35.         bf.BlendFlags   =   0;               //保留位,目前只有这个
  36.         bf.AlphaFormat   =   AC_SRC_OVER;    //这个参数是指定加载自带Alpha通道
  37.         bf.SourceConstantAlpha   =   127;    //如果上面用了自带通道,那这个值就没意义
  38.         AlphaBlend(dhdc,
  39.                 rect1.left,
  40.                 rect1.top,
  41.                 rect1.right - rect1.left,
  42.                 rect1.bottom - rect1.top,
  43.                 backhdc,
  44.                 0,
  45.                 0,
  46.                 rect1.right - rect1.left,
  47.                 rect1.bottom - rect1.top,
  48.                 bf);
  49.         //*/
  50.         SelectObject(backhdc,hbojtemp);   
  51.         DeleteDC(backhdc);
  52.         DeleteObject(hbitback);
  53. }
复制代码
此帖出自WindowsCE论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表