《自绘边框窗口》word版

《自绘边框窗口》word版

ID:22977092

大小:70.68 KB

页数:8页

时间:2018-11-02

《自绘边框窗口》word版_第1页
《自绘边框窗口》word版_第2页
《自绘边框窗口》word版_第3页
《自绘边框窗口》word版_第4页
《自绘边框窗口》word版_第5页
资源描述:

《《自绘边框窗口》word版》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、自绘边框窗口自绘窗口需要响应如下的几个消息:1、WM_NCCALCSIZE这个是用来返回NC区域的。windows系统根据这个消息的返回,决定矩形区域中,NC区域在哪里。如下的代码是我的一个实现:voidCSIPanel::OnNcCalcSize(BOOLbCalcValidRects,NCCALCSIZE_PARAMSFAR*lpncsp){RECTr;//TODO:Addyourmessagehandlercodehereand/orcalldefaultif(m_psi){if(m_psi->m_bCustomWin

2、dow){memcpy(&r,&lpncsp->rgrc[0],sizeof(RECT));r.top=r.top+m_psi->m_NcRect.top;r.bottom=r.bottom-m_psi->m_NcRect.bottom;r.left=r.left+m_psi->m_NcRect.left;r.right=r.right-m_psi->m_NcRect.right;memcpy(&lpncsp->rgrc[0],&r,sizeof(RECT));return;}}CWnd::OnNcCalcSize(bCal

3、cValidRects,lpncsp);}在这个代码中,m_psi->m_bCustomWindow是用来标志是否是自绘窗口的。如果不是自绘窗口,才需要调整大小。至于bCalcValidRects这个参数,说老实话我也不知道它的用处。我查过很多的代码,都没有使用这个参数(比如BCGPRO的代码等),而实际情况下也是不使用也没有问题的。完全只需要更改lpncsp->rgrc[0]就可以了。2、需要响应NCPAINT消息。(如果在窗口非active的情况下,并不绘制ncpaint或者调用原来的ncpaint,那么系统就会画出以前

4、的难看的窗口边框和标题)很简单,这个是我的代码:voidCSIPanel::OnNcPaint(){CWindowDCdc(this);if(m_psi==NULL)return;if(m_psi->m_bCustomWindow==FALSE)return;p_PaintCorners(&dc);p_PaintIcons(&dc);p_PaintPushedIcons(&dc);p_PaintTitleLine(&dc);}3、还需要响应CREATE消息为何响应Create消息?因为我的窗口是不规则的(不是直角矩形而是园角

5、矩形的)intCSIPanel::OnCreate(LPCREATESTRUCTlpCreateStruct){if(CWnd::OnCreate(lpCreateStruct)==-1)return-1;//TODO:AddyourspecializedcreationcodehereResetWindowRgn();SetWindowPos(NULL,0,0,0,0,SWP_FRAMECHANGED

6、SWP_NOOWNERZORDER

7、SWP_NOMOVE

8、SWP_NOSIZE);return0;}SetWindowPo

9、s是强制让Window重新计算大小(NCCALCSIZE)和绘制。///////////////////////////////////////////////////////////////////////////////CSIPanelmessagehandlersvoidCSIPanel::ResetWindowRgn(){intiRet;BOOLbRet;CRgnm_rgn1,m_rgn2,m_rgn3;RECTr;GetWindowRect(&r);OffsetRect(&r,-r.left,-r.top);bRe

10、t=m_rgn1.CreateRoundRectRgn(r.left,r.top,r.right+1,r.top+45,12,12);m_rgn2.CreateRoundRectRgn(r.left,r.top+18,r.right+1,r.bottom+2,12,12);iRet=m_rgn2.CombineRgn(&m_rgn1,&m_rgn2,RGN_OR);iRet=SetWindowRgn(m_rgn2,TRUE);}4、还需要响应WM_SIZEvoidCSIPanel::OnSize(UINTnType,intc

11、x,intcy){CWnd::OnSize(nType,cx,cy);//TODO:AddyourmessagehandlercodehereResetWindowRgn();Invalidate();}5、响应ACTIVE用于绘制不同情况下的标题。voidCSIPanel::OnActi

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。