【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 1764|回复: 0

定制窗口外观的若干技巧

[复制链接]
发表于 2005-9-28 11:49:18 | 显示全部楼层 |阅读模式
<>1. 不规则窗口和背景。用SetWindowRgn将窗口变成任意形状。源码网上很多地方都有。这里就不列出了。最好是配合背景图像,例如,在OnEraseBkgnd中作如下处理:</P>
<>CRect rt;<br>GetClientRect(&amp;rt);<br>pDC-&gt;DrawState(rt.TopLeft(),rt.Size(),hBkImg,DST_BITMAP);//hBkImg是背景位图句柄<br>return TRUE;这样位图就拉伸到窗口客户区大小。如果要平铺,可用其它函数。&nbsp;2.自定义非客户区的大小。只要响应WM_NCCALCSIZE消息,给出大小即可,如void CXXDlg::OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp) <br>{<br>lpncsp-&gt;rgrc[0].top+=16; // add title bar by 16 pixels<br>CDialog::OnNcCalcSize(bCalcValidRects, lpncsp);<br>}<br>本功能配合下面的自定义窗口框架功能效果更好。3.自定义窗口框架。在窗口非客户区重画的时候,自己绘制。如在WindowProc里做如下处理 if(message==WM_CAPTURECHANGED||message==WM_NCACTIVATE||message==WM_NCPAINT||<br>&nbsp;&nbsp;message==WM_INITMENUPOPUP){<br>&nbsp;&nbsp;CDialog::WindowProc(message,wParam,lParam);<br>&nbsp;&nbsp;DrawFrame();//画框架<br>&nbsp;&nbsp;bPressed=FALSE;<br>&nbsp;&nbsp;return 0;<br>}<br>当然,还有其它处理,如系统菜单和按钮的事件处理,只需要响应对应消息即可。另外,在有些系统中,当刚开始用鼠标拖动标题栏的时候,系统会自己重新绘制标题栏,这样破坏了自己绘制的样子。这时候只要处理wParam为0xF012的WM_SYSCOMMAND的消息,重新绘制即可。&nbsp;4.让控件不遮住主窗口的背景。响应WM_CTLCOLOR,设置背景透明即可HBRUSH CXXWinDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) <br>{<br>pDC-&gt;SetBkMode(TRANSPARENT);<br>return&nbsp;&nbsp;( HBRUSH )::GetStockObject( NULL_BRUSH );<br>}<br>当然,部分控件的背景不能简单的这样处理,需要自定义控件,如ListBox。&nbsp;5.自定义不同控件或区域上的光标形状。响应WM_SETCURSOR,判断控件id并设置光标,如BOOL CXXWinDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) <br>{<br>if(pWnd-&gt;GetDlgCtrlID()==IDC_SENT){<br>&nbsp;&nbsp;HCURSOR ret=::SetCursor(m_hCursor);//m_Cursor为自定义的光标<br>&nbsp;&nbsp;return TRUE;<br>}<br>else if(nHitTest==HTSYSMENU||nHitTest==HTCLOSE){<br>&nbsp;&nbsp;HCURSOR ret=::SetCursor(m_hCursor);<br>&nbsp;&nbsp;return TRUE;<br>}<br>return CDialog::OnSetCursor(pWnd, nHitTest, message);<br>}附图是例子:&nbsp; </P>
<><br></P>
<>posted on 2004-11-13 02:05 逍遥万里 阅读(1010) 评论(8) &nbsp;编辑&nbsp;收藏 </P><br>--&gt;
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2024-5-24 17:55

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表