3622|4

78

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

EVC(wince)如何开发不规则窗体(请成功过的朋友指教)? [复制链接]

问:EVC(wince)如何开发不规则窗体?
请成功过的朋友指教,我现在的问题是使用SetWindowRgn这类区域方法后可以不规则窗体。
但窗体上的按钮等控件都不都使用。效果就好象是将窗体不规则后直接截了个图然后复制到桌面一样。
请指教!

注:请不要将windows下VC的实现直接说给我,因为它们在wince下不一定好用!下面的代码是就网上出现的很多的代码,
windows下可以正常使用,但wince下是就会出问题!求在CE下真正实现过的朋友指点。

代码如下:


void CTwidowsDlg::SetupRegion(CDC *pDC, CBitmap &cBitmap, COLORREF TransColor)
{
  CDC memDC;
  //创建与传入DC兼容的临时DC
  memDC.CreateCompatibleDC(pDC);
   
  CBitmap *pOldMemBmp=NULL;
  //将位图选入临时DC
  pOldMemBmp=memDC.SelectObject(&cBitmap);
   
  CRgn wndRgn;
  //创建总的窗体区域,初始region为0
  wndRgn.CreateRectRgn(0,0,0,0);

  BITMAP bit;   
  cBitmap.GetBitmap (&bit);//取得位图参数,这里要用到位图的长和宽   
   
  int y;
  for(y=0;y<=bit.bmHeight;y++)
  {
  CRgn rgnTemp; //保存临时region
   
  int iX = 0;
  do
  {
  //跳过透明色找到下一个非透明色的点.
  while (iX <= bit.bmWidth && memDC.GetPixel(iX, y) == TransColor)
  {
iX++;
}
   
  //记住这个起始点
  int iLeftX = iX;
   
  //寻找下个透明色的点
  while (iX <= bit.bmWidth && memDC.GetPixel(iX, y) != TransColor)
  {
++iX;
}
   
  //创建一个包含起点与重点间高为1像素的临时“region”
  rgnTemp.CreateRectRgn(iLeftX, y, iX, y+1);
   
  //合并到主"region".
  wndRgn.CombineRgn(&wndRgn, &rgnTemp, RGN_OR);
   
  //删除临时"region",否则下次创建时和出错
  rgnTemp.DeleteObject();

  }while(iX
  iX = 0;

  }
   
  if(pOldMemBmp)
{
  memDC.SelectObject(pOldMemBmp);
}
   
  CWnd * pWnd = AfxGetMainWnd();
  pWnd->SetWindowRgn((HRGN)wndRgn.GetSafeHandle(),FALSE);  
//SetWindowPos(wndRgn, TRUE),这就把窗口置成一个圆形了。
  //该函数将创建指定窗口的线程设置到前台
pWnd->SetForegroundWindow();   
}
此帖出自WindowsCE论坛

最新回复

SetWindowRgn 这确实是个问题   详情 回复 发表于 2010-6-13 08:39
点赞 关注
 

回复
举报

74

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
友情帮顶!

同时我也很感兴趣。
此帖出自WindowsCE论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
根据我的经验,想直接用API来实现CE下的不规则窗体,是不可能的.

使用DDraw还有点希望
此帖出自WindowsCE论坛
 
 
 

回复

89

帖子

0

TA的资源

禁止访问

4
 
提示: 作者被禁止或删除 内容自动屏蔽
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

5
 
SetWindowRgn
这确实是个问题

此帖出自WindowsCE论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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