MFC如何获得子窗口中控件的指针

MFC如何获得子窗口中控件的指针,第1张

你要在主窗口点击一个按钮,d出另外一个窗口是不是要实例化这个窗口

这个dlg就是d出窗口的实例 你只要在d出窗口中定义列表框的指针 比如是m_pList;

那就直接dlgm_pList->AddString 就可以访问了

dlg pDlg=new dlg;

pDlg->Create(IDD_DIALOG1,this);

pDlg->ShowWindow(SW_SHOW);

pDlg->m_ListAddString("hello");

pDlg->m_ListAddString("wangtk");

对于SDI程序来说, 如果;CMainFrame中只有一个view的话, 那很好办, 直接用函数获得view指针即可,

先获得CFrameWnd指针, 方法是CMainFrame pFrame = AfxGetMainWnd();

然后CView pView = pFrame-GetAcitveView();就ok了

但有时候有多个view存在, 这时候获得view指针就会出问题了, 可以用如下方法:

应该是没有问题的

CView GetView(){CWinApp winApp = AfxGetApp();

if(winApp == NULL) return NULL;

CDocManager pDocManager = winApp-m_pDocManager;

if(pDocManager == NULL) return NULL;

POSITION pos1 = pDocManager-GetFirstDocTemplatePosition();

while (pos1){CDocTemplate pDocTemplate = pDocManager-GetNextDocTemplate(pos1);

if(pDocTemplate == NULL) continue;

POSITION pos2 = pDocTemplate-GetFirstDocPosition();

while (pos2){CDocument pDoc = pDocTemplate-GetNextDoc(pos2);

if(pDoc == NULL) continue;

POSITION pos3 = pDoc-GetFirstViewPosition();

CMDIFrameWnd pFrame = (CMDIFrameWnd)AfxGetApp()-> m_pMainWnd;

// 获取活动的子框架

CMDIChildWnd pChild = (CMDIChildWnd ) pFrame-> GetActiveFrame();

// 或者 CMDIChildWnd pChild = pFrame-> MDIGetActive();

// 获取当前活动的视图指针

CMyView pView = (CMyView ) pChild-> GetActiveView();

CmyDocument pDoc =(CmyDocument) pView-> GetDocumnet()

CWnd GetDlgItem ( int nID ) const; 

void CWnd::GetDlgItem( int nID, HWND phWnd ) const;

getparent得到的是cwnd,是父窗口的指针;

getparent()->getsafehwnd(),可以得到父窗口的句柄

如果只是调用窗口的类似函数,cwnd

ch

=

getparent()就可以了,如果是要调用chomeview里面的接口,chomeview

ch

=

(chomeview

)

getparent();

给你一个通用的步骤吧,看不懂我再详细说(你需要的步骤是1-2-32):

1CMDIFrameWnd pFrame = (CMDIFrameWnd)AfxGetApp()->m_pMainWnd;

2CMDIChildWnd pChild = (CMDIChildWnd ) pFrame->GetActiveFrame();

3

31获得视类:CMyView pView = (CMyView ) pChild->GetActiveView();

32获得文档类:CDocument pDocument=pChild -> GetActiveDocument();

众所周知,View窗口覆盖在主窗口MainFrame之上。在CView类的WN_MOUSEMOVE消息响应函数中 *** 作状态栏,可以显示鼠标的位置坐标。这需要在CView类中获得CMainFrame类的指针,然后才能借用CMainFrame类定义的CStatusBar m_wndStatusBar(改为public)去 *** 作状态栏。

*** 作方法如下:

(1)使用AfxGetApp()函数

CMainFrame pFrame=(CMainFrame)AfxGetApp()-m_pMainWnd;//要求包含MainFrmh头文件

CStatusBar pStatus=&pFrame-m_wndStatusBar;//需要将m_wndStatusBar属性修改为公有

解释:AfxGetApp()是全局函数返回指向CWinApp类的指针

CWinApp AfxGetApp( );

m_pMainWnd是CWinThread类的指针类成员,CWinApp是CWinApp的父类。

CWinThread和CWnd是兄弟类。CWnd的子类是CFrameWnd,CMainFrame继承于CFrameWnd。这时出现困惑,我们从CView类中获得其父类CMainFrame的指针,为什么要通过CWinApp类呢?MSDN这样解释m_pMainWnd:Use this data member to store a pointer to your thread’s main window object。既然m_pMainWnd是主窗口对象,当然可以通过强制类型转换为指向主窗口的指针,于是有(CMainFrame)AfxGetApp()-m_pMainWnd。

事实是这样的,pFrame-m_wndStatusBar可以理解为一体,-的优先级为2,pFrame-m_wndStatusBar可以看作是m_wndStatusBar,对象取地址变为指针。

(2)使用GetParent()函数

以上的获取指向状态栏的指针的方法是最常用的方法,但存在难以理解,只会生搬硬套的问题。

在CView类内,人们最直接的想法是使用GetParent()函数直接获得父窗口CMainFrame类的指针。

CMainFrame pFrame=(CMainFrame)GetParent();

CStatusBar pStatus=&pFrame-m_wndStatusBar;

其中,GetParent()返回的是CWnd类的指针。

CWnd GetParent( ) const;

需要将其强制转换为指向CMainFrame类的指针。

(3)结论第二种方法容易理解,建议使用。

以上就是关于MFC如何获得子窗口中控件的指针全部的内容,包括:MFC如何获得子窗口中控件的指针、MFC中如何获得View指针、MFC多文档中如何即时获取当前文档的指针等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9775528.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存