日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MFC通过对话框窗口句柄获得对话框对象指针

發布時間:2023/12/18 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MFC通过对话框窗口句柄获得对话框对象指针 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

mfc如何獲得控件句柄

  • CWnd *pWnd = GetDlgItem(ID_***); // 取得控件的指針

  • HWND hwnd = pWnd->GetSafeHwnd(); // 取得控件的句柄

  • ?

    MFC在很多的對話框操作中,我們經常要用到在一個對話框中調用另一個對話框的函數或變量.可以用如下方法來解決.
    HWND hWnd=::FindWindow(NULL,_T("窗口名"));????? //得到對話框的句柄
    C***Dialog* pWnd= (C***Dialog*)FromHandle(hWnd); //由句柄得到對話框的對象指針

    pWnd->xxx( );???????????????????????????????????????????? //調用C***Dialog中的函數xxx();

    ?

    VC MFC架構主要由?CMyApp,???CMainFrame, ??CMyDoc, ??CMyView, ??CMyDlg等5個主要的類,如何在每個類中相互獲取數據,需要在各自相關類中獲取其它類的指針。

    1.獲得應用程序指針
    ???這個很簡單,一句話搞定:
    ?? CMyApp* pApp=(CMyApp*)AfxGetApp();

    2.獲得主框架指針

    在類CWinThread里面有一個公有的成員變量:CWnd* m_pMainWnd;?它存在的主要目的就是提供我們獲得CWnd指針,我們可以利用它來達到我們的目的:

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

    ASSERT_KINDOF(CMainFrame, pAppFrame);

    3.?在框架類中調用文檔類、視圖類
    ???這里我們可以利用GetActiveXXXXX()去掉用當前激活的文檔和視圖:
    ?? CMyDoc*? pDoc=(CMyDoc*)GetActiveDocument();
    ?? CMyView* pView=(CMyView*)GetActiveView();

    4.在文檔類中調用視圖類指針
    ????我們可以利用文檔類的成員函數GetFirstView()和GetNextView()遍歷視圖。

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

    ASSERT_KINDOF(CMainFrame, pAppFrame);

    CMyView *pView=(CMyView *) pAppFrame->GetActiveView();

    ?

    //To get the first view in the list of views:

    POSITION pos = GetFirstViewPosition();

    CView* pFirstView = GetNextView( pos );

    // This example uses CDocument::GetFirstViewPosition

    // and GetNextView to repaint each view.

    void CMyDoc::OnRepaintAllViews()

    {

    ?? POSITION pos = GetFirstViewPosition();

    ?? while (pos != NULL)

    ?? {

    ????? CView* pView = GetNextView(pos);

    ????? pView->UpdateWindow();

    ?? }??

    }

    // An easier way to accomplish the same result is to call

    // UpdateAllViews(NULL);

    5.在視圖類中調用文檔類
    ????其實,在視圖類中有一個現成的成員函數供我們使用,那就是:GetDocument();利用它我們可以很容易的得到文檔類指針,我們先看一下GetDocument()函數的實現:
    ??? CColorButtonDoc* CColorButtonView::GetDocument()?
    ?? {
    ???????ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CColorButtonDoc)));
    ???????return (CColorButtonDoc*)m_pDocument;
    ?? }

    這里實際上是將m_pDocument強制轉換成CColorButtonDoc*,也就是我們想要的。

    CDSplitDoc* pDoc = GetDocument();

    ASSERT_VALID(pDoc);??

    6.?從對話框向文檔類寫入數據

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

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

    ASSERT_KINDOF(CMainFrame, pAppFrame);

    CMyDoc*?pDoc=(CMyDoc*) pAppFrame->GetActiveDocument();

    //CView *pView=(CView *) pAppFrame->GetActiveView();

    //CMyDoc* pDoc =(CMyDoc*) pView ->GetDocument();

    ASSERT_VALID(pDoc);? ? ? ? ?

    7.獲取工具條的指針
    ?????在缺省狀態下,有一個默認的工具條AFX_IDW_TOOLBAR,我們可以根據相應的ID去獲取工具條指針,方法如下:
    ???? CToolBar* pToolBar=(CToolBar*)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_TOOLBAR);
    ?????是不是很簡單??
    8.獲取狀態條的指針
    ?????在缺省狀態下,有一個默認的狀態條AFX_IDW_STATUS_BAR,我們自然也可以根據相應的ID去獲取狀態條指針,方法如下:
    ???? CStatusBar* pToolBar=(CStatusBar*)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR);
    ?????是不是同樣很簡單?

    9.獲取控件的指針?
    ????這里有兩種方法。
    ????一、調用CWnd: : GetDlgItem,獲取一個CWnd*指針調用成員函數。例如,我們想獲取CButton指針,方法如下:
    ??? CButton* pButton=(CButton*) GetDlgItem (IDC_MYBUTTON);
    ????二、可以使用ClassWizard將控件和成員變量聯系起來。在ClassWizard中簡單地選擇Member Variables標簽,然后選擇Add Variable ...按鈕。如果在對話資源編輯器中,按下Ctrl鍵并雙擊控件即可轉到Add Member Variable對話。

    10.通過鼠標獲得子窗口指針
    ???這里我們要用到一個不太常用的函數:ChildWindowFromPoint。他的原型如下:
    ?? 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://忽略透明子窗口

    總結

    以上是生活随笔為你收集整理的MFC通过对话框窗口句柄获得对话框对象指针的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。