AfxGetMainWnd返回NULL也是可能的

2021-04-02 03:20:51 字數 738 閱讀 2415

afxgetmainwnd返回null也是有可能的。

因為_afxwin_inline cwnd* afxapi afxgetmainwnd()

而cwnd* cwinthread::getmainwnd()

cwnd* cwinthread::getmainwnd()

而m_pmainwnd有時候的值如果還沒有被設定,afxgetmainwnd就會返回null。

m_pmainwnd在什麼時候被設定呢?在initinstance()中

cmainframe* pmainframe = new cmainframe;

if (!pmainframe->loadframe(idr_mainframe))

return false;

m_pmainwnd = pmainframe;

所以,在此之前的af

xgetmainwnd就都會返回null。

所以,在

int cmainframe::oncreate(lpcreatestruct lpcreatestruct)

{if (cmdiframewnd::oncreate(lpcreatestruct) == -1)

return -1;

cwnd *pwnd = afxgetmainwnd();

pwnd是為null的,因為cmainframe::oncreate是在pmainframe->loadframe中被呼叫的,那時m_pmainwnd還沒有被設定。

AfxGetMainWnd 為什麼返回NULL

通常認為afxgetmainwnd 會返回主視窗的指標。實際上有 前提條件 的。即返回當前呼叫afxgetmainwnd 的執行緒的主視窗指標。所以如果在程式的主執行緒中呼叫afxgetmainwnd 則返回程式 主執行緒 的主視窗指標。如果在輔助執行緒 createthread 中呼叫afxget...

使用AfxGetMainWnd函式的一個心得

使用afxgetmainwnd函式獲取mfc程式中的主框架類指標是一個常用作法。但是你會發現這一做法有時也會失靈。不信,你測試一下下面的 執行ontest1函式,你會發現客戶區並沒有列印 來自執行緒的字串 下面我們把執行緒函式變一下 執行ontest1函式,我們發現檢視客戶區出現了 來自執行緒的字串...

使用AfxGetMainWnd函式的一個心得

使用afxgetmainwnd函式獲取mfc程式中的主框架類指標是一個常用作法。但是你會發現這一做法有時也會失靈。不信,你測試一下下面的 unsigned stdcall secondthreadfunc void parguments return 0 void cmainframe ontest...

使用AfxGetMainWnd函式的一個心得

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!使用afxgetmainwnd函式獲取mfc程式中的主框架類指標是一個常用作法。但是你會發現這一做法有時也會失靈。不信,你測試一下下面的 cpp view plain copy print?unsigned stdcall secondthread...

C 返回物件和返回引用

最大的區別在於,返回物件的話會在記憶體中根據返回的型別開闢一塊區域,用返回的值對該記憶體進行初始化,如果是返回的物件,利用拷貝構造來初始化這個區域,但是這塊區域並沒有名字,就是說之後使用者沒辦法訪問到這個區域,也成為無名變數,它只能在接下來的 中進行一次性的用途,要不作為引數傳遞,或者將值列印,再之...