糖果派对官方网站_可以赌钱的糖果游戏_手机版
bb电子糖果派对初识MFC----视图窗口类CView

bb电子糖果派对初识MFC----视图窗口类CView

作者:网络编程    来源:未知    发布时间:2019-12-24 21:07    浏览量:

MFC多文书档案窗口CList里存的的是开拓过的窗口的窗口指针,窗口关闭的时候并没从Clist删除该窗口指针在等级次序的别的一个地方需求遍历该Clist做一些别的操作代码如下for(inti=0;posi(UINT卡塔尔国theApp.m_List.GetCount();i++){pView=theApp.m_List.GetNext(pos);if(pView::IsWindow(pView-m_hWnd卡塔尔(قطر‎卡塔尔国{pView-fun(卡塔尔国;.......//此处不常会促成野指针操作}在临时情况下,窗口关闭后,遍历以上代码IsWindow并从未重返FALSE引致上述代码花青部分会导致野指针操作。哪位大神扶持解释下原因。

 

1、相关难点

MFC种种指针的获取

  视图窗口-提供了多个用于展示数据的窗口能够和客商张开交互作用操作

1、获取应用程序指针

  相关类 CView及其子类-父类CWnd

CMyApp* pApp=(CMyApp*)AfxGetApp();

2、视图窗口的利用

2、获取主框架指针

  2.1从CView类派生了一个和好的视图类CMyView,并在CMyView类重写父类(CView)的多个纯虚函数OnDraw

CWinApp 中的公有成员变量m_bb电子糖果派对初识MFC----视图窗口类CView。pMainWnd 就是主框架的指针

  2.2在框架窗口的WM_CREATE音讯管理中,定义CMyView类对象,并应用那么些指标调用Create函数成立视图窗口。

CMainFrame* pMainFrame = (CMainFrame*)(AfxGetApp()->m_pMainWnd);

  附:OnDraw函数是父类(CView)在管理WM_PAINT新闻时被调用

或者

3、对象布局图

CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd();

  m_pMainWnd=pFrame;

3、获取菜单指针

  m_pViewActive=pView;

CMenu* pMenu = AfxGetMainWnd()->GetMenu();

  theApp

4、获取工具栏、状态栏指针

     |---->m_pMainWnd(pFrame)

主框架中得以平素使用m_wndToolBar、m_wndStatusBar

      |---->m_pViewActive(pView)

其他:

4、命令音信(WM_COMMAND)的拍卖顺序

CToolBar* pToolBar = (CToolBar*)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_TOOLBAR);

  View-->Frame-->App

CStatusBar* pStatusBar = (CStatusBar*)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR);

  (CFrameWnd::OnCmdMsg试行前后相继顺序决定的)

5、获取控件指针

 

先用GetDlgItem() 再转换,如:

CButton* pButton = (CButton*)GetDlgItem(IDC_MYBUTTON);

6、获取文书档案、视图指针

SDI:

CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd();

CYourDoc* pDoc = (CYourDoc*)pMainFrame->GetActiveDocument();

CYourView* pView = (CYourView*)pMainFrame->GetActiveView();

MDI:

CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd();

CChildFrame* pChildFrame = (CChildFrame*)pMainFrame->GetActiveFrame();

CYourDoc* pDoc = (CYourDoc*)pChildFrame->GetActiveDocument();

CYourView* pView = (CYourView*)pChildFrame->GetActiveView();

7、文档、视图

从视图获取文书档案指针:

CYourDoc* pDoc = GetDocument();

从文书档案获取视图指针:

应用成员函数GetFirstViewPosition(卡塔尔(英语:State of Qatar) 和GetNextView(卡塔尔 遍历

virtual POSITION GetFirstViewPosition() const;

virtual CView* GetNextView(POSITION& rPosition) const;

SDI:

CYourView* pView;

POSITION pos = GetFirstViewPosition();

pView = GetNextView(pos);

MDI:

概念函数

CView* CYourDoc::GetView(CRuntimeClass* pClass)

{

    CView* pView;

    POSITION pos=GetFirstViewPosition();

    while(pos!=NULL)

    {

        pView=GetNextView(pos);

         if(!pView->IsKindOf(pClass))

             break;

    }

    if(!pView->IsKindOf(pClass))

    {

        AfxMessageBox("Connt Locate the View.");

       return NULL;

    }

    return pView;

}

行使如下:

CYourView* pView=(CYourView*)GetView(RUNTIME_CLASS(CYourView));

bb电子糖果派对,8、文档模版、文书档案

从文档获取文书档案模版指针:

CDocTemplate* GetDocTemplate() const;

从文书档案模版获取文书档案指针:

viaual POSITION GetFirstDocPosition( ) const = 0;

visual CDocument* GetNextDoc(POSITION & rPos) const = 0;

9、获取分割视图中各种视图的指针

主框架中定义:CSplitterWnd m_wndSplitter;

概念四个View类:CView1、CView2

框架类中重载:

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT, CCreateContext* pContext)

{

    VERIFY(m_splitter.CreateStatic(this,2,1卡塔尔(قطر‎卡塔尔国; //分割成两行一列

    VERIFY(m_splitter.CreateView(0,0,RUNTIME_CLASS(CView1),CSize(100,100),pContext));

    VERIFY(m_splitter.CreateView(1,0,RUNTIME_CLASS(CView2),CSize(100,100),pContext));

    return TRUE;

}

拿到分割视图指针

CView1* pView1 = (CView1*)m_wndSplitter.GetPane(0,0);

CView2* pView2 = (CView2*)m_wndSplitter.GetPane(1,0);

10、通过鼠标获得子窗口指针

CWnd* ChildWindowFromPoint(POINT point) const;

CWnd* ChildWindowFromPoint(POINT point,UINT nFlags) const;

用于分明蕴涵指确定地点的子窗口

只要内定点在客户区之外,函数重回NULL;

设若钦定点在客商区内,然则不归于其余一个子窗口,函数重返该CWnd的指针;

假定有三个子窗口包蕴钦赐点,则赶回第一身长窗口的指针。

还要注意的是,该函数再次来到的是多个伪窗口指针,无法将它保存起来供之后使用。

对于第二个参数nFlags有多少个意思:

CWP_ALL             file://不忽视任何子窗口

CWP_SKIPNIVSIBLE    file://忽视不可以知道子窗口

CWP_SKIPDISABLED    file://忽视禁止的子窗口

CWP_SKIPRANSPARENT file://忽视透明子窗口

获得工具条的指针

在缺省气象下,有一个私下认可的工具条AFX_IDW_TOOLBAOdyssey,大家得以依赖对应的ID去获取工具条指针,方法如下:

      CToolBar* pToolBar=(CToolBar*)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_TOOLBAR);

是还是不是很简短?

 

获得状态条的指针

在缺省景况下,有四个暗许的景况条AFX_IDW_STATUS_BARubicon,大家当然也能够依赖对应的ID去获取状态条指针,方法如下:

      CStatusBar* pToolBar=(CStatusBar*)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR);

 

此地有二种艺术。

少年老成、调用CWnd: : GetDlgItem,获取二个CWnd*指南针调用成员函数。比如,大家想赢得CButton指针,方法如下:

下一篇:没有了
友情链接: 网站地图
Copyright © 2015-2019 http://www.tk-web.com. bb电子糖果派对有限公司 版权所有