网站大量收购独家精品文档,联系QQ:2885784924

循序渐进实现仿QQ界面:园角矩形和双缓冲贴图窗口.docVIP

循序渐进实现仿QQ界面:园角矩形和双缓冲贴图窗口.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
循序渐进实现仿QQ界面:园角矩形和双缓冲贴图窗口

循序渐进实现仿QQ界面(一):园角矩形与双缓冲贴图窗口/u10/ebe0aae8-0148-417b-ba80-ef1119f0c6a4.html?24099 印象里仿QQ界面的程序应该有很多,搜了一下,虽然出来一大堆,排除了重复的,却只有两三个,没我想象的好。经常看到CSDN上有人问,QQ这个功能怎么实现,那个界面怎么实现,归纳了一下,决定写这么一个仿QQ界面程序,实用功能一律不实现,仅仿界面: 异型窗口 贴图界面 界面可调色,换底纹 仿QQ界面上的各种自绘控件 QQ2009界面仔细研究起来,其实还是很复杂的,完全模拟做到一模一样还是很花工夫的,用API实现是个噩梦,因此这里是用RingSDK实现。关于RingSDK,请到这个链接/ringphone/archive/2008/09/11/2911244.aspx,最新版本请用SVN到svn:///RingSDK下载。RingSDK的图象库与界面库结合,可以实现一些比较酷的界面。这里就是演示图象库与界面库结合实现QQ2009的界面。OK,Lets go!不过先声明一下,这里只是模仿界面,实际QQ的界面不是这么做的。 QQ2009是园角矩形窗口,不是复杂形状,因此实现起来很简单,CreateRoundRectRgn然后SetWindowRgn就行了。不过窗口可以拖动调整大小,因此不是简单的在开始设定就可以,需要在WM_SIZE消息里随时改变这个RGN: RECT rc;?????? GetWindowRect(m_hWnd,rc);?? OffsetRect(rc,-rc.left,-rc.top);?? ?????? if(m_hrgn)?? ??? DeleteObject(m_hrgn);?? m_hrgn = CreateRoundRectRgn(rc.left,rc.top,rc.right,rc.bottom,NCB_CORNERSIZE,NCB_CORNERSIZE);?? SetWindowRgn(m_hWnd,m_hrgn,TRUE);?? InvalidateRect(m_hWnd,NULL,TRUE); RECT rc;??? GetWindowRect(m_hWnd,rc); OffsetRect(rc,-rc.left,-rc.top); ??? if(m_hrgn) ??? DeleteObject(m_hrgn); m_hrgn = CreateRoundRectRgn(rc.left,rc.top,rc.right,rc.bottom,NCB_CORNERSIZE,NCB_CORNERSIZE); SetWindowRgn(m_hWnd,m_hrgn,TRUE); InvalidateRect(m_hWnd,NULL,TRUE); 然后需要在WM_NCPAINT的时候描边,创建QQ边框颜色的画笔,用RoundRect就可以画个圆角边框。 QQ的标题栏和系统按钮是自绘的,本来应该在WM_NCPAINT消息里绘制,但是发现点击“编辑个性签名”会出现一个编辑框供输入,而标题栏是不能放置控件的,因此主窗口创建时干脆不要标题栏,全部客户区,在客户区上方模拟一个标题栏区域出来。由于要支持调整窗口尺寸,因此创建窗口时窗口类型是WS_POPUPWINDOW|WS_THICKFRAME|WS_MINIMIZEBOX|WS_MAXIMIZEBOX,如此默认的窗口边框并不符合我们的要求,需要在WM_NCCALCSIZE消息里设置一下边框尺寸: RINGMAINMSG(WM_NCCALCSIZE)?? {?? LPRECT lprc = (LPRECT)param.lParam;?? ??? lprc-top += WND_BORDER;?? lprc-left += WND_BORDER;?? lprc-right -= (WND_BORDER + 1);?? //右边框需要留出画边框线的位置,1?? lprc-bottom -= (WND_BORDER + 1); //同理?? ??? return 0;?? } 设置边框尺寸为2。这里有一个有趣的现象:即使不响应WM_NCCALCSIZE消息,创建的窗口也是没有标题栏的,没有最小/大化,关闭按钮,但是在任务栏上的程序按钮上按鼠标右键,最小化,移动,大小,关闭的选项一个不少,并且窗口也响应这些命令。如果窗口加上WS_EX_TOOLWINDOW的扩展类型,则程序不会出现在任务栏上,就跟QQ的表现一样了,不过目前我们的程序暂时仅实现标题栏的贴图,不支持实际功能,因此暂时不加这个扩展类型,靠在任务栏上的程序按钮上按鼠标右键实现窗口的最

文档评论(0)

junjun37473 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档