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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

获得主窗口句柄AfxGetApp()-m_pMainWnd

發布時間:2025/3/21 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 获得主窗口句柄AfxGetApp()-m_pMainWnd 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

AfxGetApp()->m_pMainWnd

1: AfxGetApp()->m_pMainWnd這個東西就是主窗口的指針。即CMainFrame類的對象指針。很多東西的創建和它有關。以及可以用它來獲取視圖和文檔指針。也可以使用AfxGetMainWnd();或 AfxGetApp()->GetMainWnd()

這個函數在程序的任何地方都可以調用的原因是它是一個全局函數,函數返回值是CWinApp * 。它將返回程序在進入WinMain()函數之前,系統就為程序創建好的一個CWinApp全局實例theApp,通過這個實例的成員變量 m_pMainWnd便可以很容易地在程序地任何地方得到程序的主窗口指針。進而可以引用主窗口類的成員變量和成員函數。

CWinApp* AfxGetApp( );

A pointer to the single CWinApp object for the application.

The pointer returned by this function can be used to access application information such as the main message-dispatch code or the topmost window.

返回值:指向應用程序的單一CWinApp對象的指針。

說明:
這個函數返回的指針可以被用來訪問應用程序的信息,如主消息調度代碼以及頂層窗口等。

MFC在開發的時候封裝了一些全局的API函數,在這些函數的前面都會加上Afx這樣的標志,因為是全局的函數,所以你在App類中不會找到,返回值是獲得一個CWINApp類指針,至于什么時候會用到,當你要訪問CWINApp類成員時候可以用啊,還有共享的時候也可以用的。 AfxGetApp();在文檔中十分重要,它是一個全局函數,可以取得類的指針。在視圖、框架、文檔中起到穿針引線的作用,用它可以在它們之間隨意的訪問調用

2: CWinThread Class Members

Data Members

Specifies whether to destroy the object at thread termination. Handle to the current thread. ID of the current thread. (主窗口變量) Holds a pointer to the application’s main window. Pointer to the main window of the container application when an OLE server is in-place active. 用該成員變量去存儲你的線程主窗口對象。當和m_pMainWnd 相關的窗口被關閉后,MFC會自動終止你的線程。如果該線程是應用程序主線程,程序也將會被終止。如果該數據成員為NULL,應用程序CWinApp對象的主窗口將用來決定什么時候去終止線程。m_pMainWnd是一個CWnd*類型的public變量。
很明顯,你需要在重載InitInstance是為m_pMainWnd賦值。在工作線程中,m_pMainWnd自動繼承其父線程的值。

補充:只有CWinThread對象才有m_pMainWnd
class CWinThread : public CCmdTarget
{
DECLARE_DYNAMIC(CWinThread)

public:
// Constructors
CWinThread();
BOOL CreateThread(DWORD dwCreateFlags = 0, UINT nStackSize = 0,
LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL);

// Attributes
CWnd* m_pMainWnd; // main window (usually same AfxGetApp()->m_pMainWnd)
CWnd* m_pActiveWnd; // active main window (may not be m_pMainWnd)
BOOL m_bAutoDelete; // enables 'delete this' after thread termination
..............
}


//在用戶界面線程中創建非模態對話框
if (!pDlg.Create(IDD_DIALOG1, NULL))
{
AfxMessageBox("窗口創建失敗!");
}
else
{
pDlg.ShowWindow(SW_SHOW);
m_pMainWnd=&pDlg;
}

在創建用戶界面線程時,該句一定要加上。否則在線程不會得到釋放!

InitInstance是用來執行程序每次開始時都需要進行的初始化工作的最好地方。
如果用框架窗口作為主窗口,
m_pMainWnd = new CYourMainWindow;
如果用對話框作為主窗口,
CYourDlg dlg;
m_pMainWnd = &dlg;

m_HArrow=AfxGetApp()->LoadStandardCursor(IDC_ARROW);

m_HCross=AfxGetApp()->LoadStandardCursor(IDC_CROSS);

問題:為什么寫成:

m_HArrow=LoadStandardCursor(IDC_ARROW);

m_HCross=LoadStandardCursor(IDC_CROSS);

不行呢?此處 AfxGetApp()的用法,作用及返回值是什么?(幫助里看不清楚。)

?

LoadStandardCursor不是VC++的標準函數,也不是API的函數,它是CWinApp類的函數,當然你不能不寫AfxGetApp()。AfxGetApp返回一個CWinApp對象指針,就是MFC生成的 C??App.cpp中定義的那個對象。如果你需要調用這個對象的某個成員函數,就可以使用AfxGetApp()函數。

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的获得主窗口句柄AfxGetApp()-m_pMainWnd的全部內容,希望文章能夠幫你解決所遇到的問題。

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