本站首页    管理页面    写新日志    退出

首页(46) 其它(20) VC++学习(17) 程序员(5) 音乐欣赏(3) 


Ashes to ashes Dust to dust
 
 ♀最新日志                                                        ♀最新回复                                  
[转]乐到我抽筋儿的几个极品笑话
PAYPAL的奇怪问题
第一次尝试
递归
明天交毕业设计中期报告了
等到googlepage了
GTalk和Gmail
修好了鼠标!
是不是中毒了?
有Windows Live Messen
回复:google打不开了
回复:《精通MFC》——第二章(III)
回复:《精通MFC》——第二章(III)
回复:《精通MFC》——第二章(III)
回复:理查得·克莱德曼 的经典钢琴曲
回复:理查得·克莱德曼 的经典钢琴曲
回复:理查得·克莱德曼 的经典钢琴曲
回复:修好了鼠标!
回复:理查得·克莱德曼 的经典钢琴曲
回复:理查得·克莱德曼 的经典钢琴曲
«September 2025»
123456
78910111213
14151617181920
21222324252627
282930
 
 

[VC++学习]《精通MFC》——第三章(II)
读书笔记

如果将CWnd对象依附到一个已有的窗体,那么一定要在操作完窗体后,将    CWnd对象和窗体句柄分离,否则在CWnd对象销毁时会销毁窗体。                 如果希望销毁窗体时,清理掉附属的MFC对象,可重载CWnd的OnNcDestroy      成员:               Void CWzdWnd::OnNcDestroy()               {                      CWnd::OnNcDestroy();                      delete this;               }   定位窗体               CWnd提供了一组成员函数负责管理窗体的位置和大小。最主要的成员函数是MoveWindow和SetWindowPos               Void MoveWindow(                      Int x,                      Int y,                      Int nWidth,                      Int nHeight,                      BOOL bRepaint = TRUE               );               Void MoveWindow(                      LPCRECT lpRect,                      BOOL     bRepaint = TRUE               );       bRepaint为TRUE,使窗体移动后会向窗体发送一个WM_PAINT消息,从而重新绘制窗体内容。       下面的代码演示了如何将一个编辑框控件移动到静态文本框所在的位置:                     演示代码:               P80         BOOL SetWindowPos(                      Const CWnd* pWndInsertAfter,                      Int x,                      Int y,                      Int cx,                      Int cy,                      UINT nFlags       );       PwndInsertAfter表示窗口的Z序,它可以为下面几个值:       wndBotton:将窗口放入Z序的底部。       wndTop:将窗口放在Z序的顶部。       wndTopMost:将窗口放在所有非顶部窗口的顶部。即使该窗体处于非活动状态。       wndNoTopMost:将窗口放在所有非顶部的窗口的顶部,如果窗体是非顶部的窗体,则其Z序不变。       SWP_NOZORDER:此时将忽略pWndInsertAfter参数,维持窗体的Z序不变。       SWP_NOMOVE:此时将忽略x、y参数而维持窗口的坐标不变。       SWP_NOSIZE:此时将忽略cx、cy参数而维持窗口的大小不变。       SWP_NOREDRAW:不重绘窗口。       SWP_HIDEWINDOW:隐藏窗口。       SWP_SHOWWINDOW:显示窗口。       SWP_NOOWNERZORDER:不改变属于主窗口的Z序。         当MoveWindow()函数移动和/或重置窗口大小的时候发生时,CWnd的下列虚方法将被依次调用:       OnWindowPosChanging:用以通知窗口的X,Y甚至Z坐标将要改变。       OnGetMinMaxInfo:允许派生类设置窗口大小的限制。       OnNcCalcSize():给派生类机会以改变窗口客户区的大小。       OnWindowPosChanged:用于通知隐藏的窗口被显示并且将要发送WM_SIZE和WM_MOVE消息。       OnSize:通知窗口大小正在改变。       OnMove:通知窗口正在移动。   绘图       窗体是通过响应WM_PAINT消息进行绘图的。当窗口的可见区域发生了变化时,系统就发送该消息以通知窗体需要绘制。用户通过调用UpdateWindow或RedrawWindow也能直接向窗口发送WM_PAINT消息。       CWnd类预先定义了响应WM_PAINT消息的虚拟成员OnPaint,下面是其实现代码:       Void CView::OnPaint()       {              //标准实现              CPaintDC dc(this);              OnPrepareDC(&dc);              OnDraw(&dc);       }       在其构造函数中,CpaintDC会调用CWnd::BeginPaint,而在其析构函数种又会自动调用CWnd::EndPaint。CWnd的BeginPaint成员会初始化设备上下文对象,设备上下文对象表示绘图的环境,包含了要重绘的区域、绘图工具等信息。       窗口区域分成客户区和非客户区两部分。非客户区的绘制一般由系统负责,客户区则由CWnd::OnPaint负责。       非客户区包括菜单、标题栏、滚动条等区域。绘制非客户区跟绘制客户区的时机相同。在CWnd::BeginPaint返回前,要发送WM_NCPAINT和WM_ERASEBKGND消息。应用程序通过响应WM_NCPAINT消息绘制非客户区的内容。         下面的代码在框架窗口的标题栏绘制图形:       void CMainFrame::OnNcPaint()       {              CMDIFrameWnd::OnNcPaint();              //绘制标题              DrawTitle();       }             另一个消息WM_ERASEBKGND通知窗体擦除背景并重新绘制背景。在默认情况下DefWindowProc处理该消息。DefWindowProc将擦除原来的背景,并用窗口结构中指定的刷子重绘背景。如果要自定义背景,只要编写代码处理WM_ERASEBKGND消息即可。         消息处理              WindowProc              消息首先被传递给窗体到WindowProc成员,下面是WindowProc的实现:

 

00oo.. 发表于 2005/11/8 17:30:06

阅读全文(2199) | 回复(0) | 编辑 | 精华



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)
 
♀链接


AoGo汇编小站: http://www.aogosoft.com/

CSDN:        http://www.csdn.net/

编程爱好者:   http://www.programfan.com/

阿蒙编程之家: http://www.vchome.net/

看雪学院:     http://www.pediy.com

VC开发指南:http://www.copathway.com

 

♀留言板                                                             ♀Blog信息

签写新留言

人生需要加油!
MSN LIVE messager邀请
我加你了google talk
blog名称:00oo..
日志总数:46
评论数量:228
留言数量:2
访问次数:391824
建立时间:2004年11月6日
用户名称:
登陆密码:
密码保存:



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.051 second(s), page refreshed 144759712 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号