2016 - 2024

感恩一路有你

getwindowrect用法 mfc中cview类有什么作用?

浏览量:4099 时间:2023-05-12 18:21:35 作者:采采

mfc中cview类有什么作用?

cview类是专门负责每个软件系统向显示器作为输出各种信息流包括再控制如何处理的类,但是它不全权负责物理层的作为输出不能操作,只不过windows是三个本身与设备没有关系性的操作系统,cview雷同过或则一系列传送给他的一些列消息,按照自已的一系列函数与之相映射,然后再将消息传送给一类利用请看输出设备的CDC对象来能完成总是显示信息的。。。具体的封装函数少了能介绍几个不重要的,具体的这个可以去查msdn。关联文档对象视图不需要表示文档数据,所以文档对象与视图对象可以确立关联。这样,当文档数据发生了什么变化时,它也可以及时处理安排视图;当视图必须没显示不同的文档数据时,它这个可以从文档对象中分离提取。在文档/视图框架程序中,文档对象我总是在视图之前确立,而在视图的WM_CREATE消息去处理函数中,组建了它与文档对象的关联。代码追加:IntCView::OnCreate(LPCREATESTRUCT lpcs){if(CWnd::OnCreate(lpcs)-1)return-1;//m_pDocuemnt视图成员,主要是用于读取或则文档对象的指针,此时为空ASSERT(m_pDocumentNULL);CCreateContext*pContext(CCreateContext*)lpcs-lpCreateParams;//pContext-m_pCurrentDoc是巳经建立起的文档对象的指针if(pContext!NULLpContext-m_pCurrentDoc!NULL){//将当前视图一并加入文档对象的视图列表中,只不过一个文档可关联多个视图pContext-m_pCurrentDoc-AddView(this);/*在文档的AddView()函数中,早将当前文档对象指针赋给m_pDocument视图成员。这样,在视图确立之初,二者就成立了关联。*/ASSERT(m_pDocument!NULL);}else{TRACE(“Warning:CreatingapanewithyesCDocument.

”);}return0;//可以了}同时,视图类定义法了成员函数GetDocument(),直接返回文档对象的指针。代码如下:CDocument*CView::GetDocument()const{ASSERT(this!NULL);returnm_pDocument;}视图时总在文档对象之前强制销毁,在视图的析构函数中,与文档对象解除关联。代码不胜感激:CView::~CView(){if(m_pDocument!NULL)m_pDocument-RemoveView(this);}编辑本段视图的绘制的窗口的绘制工作老是在WM_PAINT消息全面处理中通过的,当窗口必须绘制时,它会收到系统发来的WM_PAINT消息。在绘制图过程中,是需要要准备显示设备句柄,最后要释放出句柄。其实很多人都知道,在视图窗口中草图,不需要重载WM_PAINT消息一次性处理函数OnPaint(),毕竟有一个非常表示友好的绘制的新口:OnDraw()。该函数的实参是一个已经准备好的显示设备,之后不需要能量。总之,这一切还是WM_PAINT消息处理函数OnPaint()为我们打算的,代码::voidCView::OnPaint(){//CPaintDC类维护显示设备CPaintDCdc(this);OnPrepareDC(dc);OnDraw(dc);}OnPrepareDC()是一个虚拟物品函数,它总是在OnDraw()之前不能执行,可以不重载它,可以设置绘图模式。毕竟OnDraw()每次不能执行,都在用有所不同的CPaintDC对象,所以才第二环节绘图模式的状态肯定不能记录到下一次。OnDraw()在视图基类CView中定义,定义为纯虚函数。例如:privatevoidOnDraw(CDC* pDC)0;因为CView是抽象基类,肯定不能构造函数,而派生类前提是重载OnDraw()。可以编辑本段虚函数OnUpdate当文档数据突然发生变化时,文档对象全局函数CDocument::UpdateAllView()得到通知所有视图,作为响应,视图的OnUpdate()成员被内部函数。所以,重载的OnUpdate()肯定都能够依据必须,将文档数据的变化反映在视图中。CView::OnUpdate()只是因为简单啊地使客户区不能解除,会造成客户区重画。或者:voidCView::OnUpdate(CView* pSender, LPARAM,CObject*){ASSERT(pSender!this);UNUSED(pSender);//unusedofreleasebuildsInvalidate(TRUE);}编辑本段虚函数OnInitialUpdate()在初始创建战队、调用OnCreate()之后,或是在File/New、File/Open命令后被框架动态链接库。基类CView::OnInitialUpdate()只是因为很简单地全局函数OnUpdate(),也可以重载它结束重新初始化工作。但注意,它很有可能被多次全局函数。voidCView::OnInitialUpdate(){OnUpdate(NULL,0,NULL);}编辑时本段虚函数CalcWindowRect不知为什么主框架窗口的客户区尺寸突然发生变化或控制条的位置不可能发生变化,不需要重新排列客户区时,调用该函数,依据视图客户区尺寸计算出视图窗口的尺寸。我们清楚,顺序排列主窗口客户区是由CFrameWnd::RecalcLayout()能完成的。看样子,视图的CalcWindowRect()函数也是由它触发时全局函数的。主窗口的客户区尺寸减掉所有控制电脑资源的部分,剩的区域倒给视图,这部分区域作为实参传去CalcWindowRect()。在CalcWindowRect()函数内,要可以计算视图窗口的尺寸。代码万分感谢:voidCView::CalcWindowRect(LPRECT lpClientRect,UNITnAdjustType){//lpClientRect此时是整个视图客户区的尺寸//要为滚动条提升尺寸吗if(nAdjustType!0){//动态创建API,依据什么窗口风格算出窗口尺寸::AdjustWindowRectEx(lpClientRect,0,FALSE,GetExStyle());DWORDdwStyleGetStyle();if(dwStyleWS_VSCROLL){//为垂线滚动条减少尺寸intnAdjustafxData.csVScroll;if(dwStyleWS_BORDER)nAdjust-CX_BORDER;lpClientRect-waynAdjust;}if(dwStyleWS_HSCROLL){//为水平滚动条提高尺寸intnAdjust;if(dwStyleWS_BORDER)nAdjust-CY_BORDER;lpClientRect-bottomnAdjust;}return;}//无须为滚动条增加尺寸,动态创建基类成员成功换算CWnd::CalcWindowRect(lpClientRect,nAdjustType);}编辑的话本段虚函数PostNcDestroy在视图窗口关掉时到最后全局函数的成员函数,它与CFrameWnd::PostNcDestroy成功是一样的的功能,即删除掉视图对象。代码万分感谢:voidCView::PostNcDestroy(){deletethis;}这样,这个可以用不着如此关心视图的释放工作,就算是它在堆中构造。编辑的话本段虚函数OnCmdMsg在再讨论CFrameWnd::OnCmdMsg()时早就打听一下过该函数,下面只具体它的代码:BOOLCView::OnCmdMsg(UINT nID,intnCode,void*pExtra,AFX_CMDHANDLERINFO*pHandlerInfo){//首先里查自身的命令消息映射if(CWnd::OnCmdMsg(nID,nCode,pExtra,pHandlerInfo))returnTRUE;//如果视图本身就没如何处理该命令,将机会交给不如关联的文档对象if(m_pDocument!NULL){CPushRoutingViewpush(this);returnm_pDocument-OnCmdMsg(nID,nCode,pExtra,pHandlerInfo);}returnFALSE;}可以编辑本段虚函数OnActivateView当视图被激活为活动视图,或由活动转为非活动时,动态链接库该函数再通知视图。基类的实现只不过设置该视图为焦点。代码如下:voidCView::OnActivateView(BOOL bActivate,CView* pActivateView,CView*){UNUSED(pActivateView);//unusedintoreleasebuildsif(bActivate)//当前状态为活动吗{ASSERT(pActivateViewthis);//如果没有其父窗口又是活动的,则设置焦点。(在MDI中,其父框架很可能是非活动的)if(IsTopParentActive())SetFocus();}}

MFC编程怎么找到控件的地址?

1.系统设置位置是可以建议使用setWindowPos只不过却没函数的定义GetWindowPos资源位置

2.是可以通过帮一下忙方法我得到具体函数GetClientRect();//获得client区域GetWindowRect();//某些window区域ScreenToClient();//相互间转换成ClientToScreen();

3.的原因GetClientRect()我得到的区域不包括位置,我得到的rect的left,star必然会为0而GetWindowRect();获得的区域除了位置,但会突然发现我得到值不准确,应该是是而且了窗体边界。

4.错误的方法:CRectrt;GetWindowRect(rt);//完成任务window区域ScreenToClient(rt);//转回client

函数 视图 对象 尺寸

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。