mfc程式是乙個windows程式,它的內部也有視窗註冊操作,視窗產生操作,訊息迴圈操作和視窗函式。
mfc中類的兩個虛函式和initinstance,前者負責「每乙個程式只做一次」的操作,後者負責「每乙個例程都得做一次」的操作。通常,系統會(並且有能力)為我們註冊一些標準的視窗類(當然也準備了一些標準的視窗函式)。程式設計者在自己的中改寫initinstance,並在其中把視窗產生出來—這樣才有機會在標準的視窗類中指定自己的視窗標題和選單。下面即使我們新的main函式:
//my.cpp
void main()
請注意的操作,以及它所引發的行為:
cmyframewnd:: cmyframewnd()
bool cmyframewnd::create()
bool cwnd::crateex()
bool cframewnd::precreatewindow()
範例程式
mfc.h
#define bool int
#define true 1
#define false 0
#include
class cobject
cobject::~cobject()
};
class ccmdtarget : public cobject
ccmdtarget::~ccmdtarget ()
};
class cwinthread : public ccmdtarget
cwinthread::~ cwinthread ()
virtual bool initinstance()
virtual int run()
};
class cwnd;
virtual bool initinstance ()
virtual int run ()
};
class cdocument : public ccmdtarget
cdocument::~ cdocument()
};
class cwnd : public ccmdtarget
cwnd::~cwnd ()
};
class cframewnd : public cwnd
cframewnd::~cframewnd ()
bool create ();
virtual bool precreatewindow();
};
class cview : public cwnd
cview::~ cview ()
};
//global function
mfc.cpp
#include「my.h」//本該包含mfc.h,但為了的定義
bool cwnd::create()
bool cwnd::createex()
bool cwnd::precreatewindow()
bool cframewnd::create()
bool cframewnd::precreatewindow()
my.h
#include
#include「mfc.h」
;
class cmyframewnd : public cframewnd
};
mfc.cpp
#include「my.h」
cmyframewnd::cmyframewnd()
//main()
void main()
程式的輸出結果是:
cmyframewnd:: cmyframewnd
cframewnd::create
cwnd::createex
cframewnd::precreatewindow
cwinthread::run
MFC 控制項初始化的過程
之前為了學習mfc下瀏覽器的用法,參考博文 雖然按照作者的方法實現了瀏覽器的功能,但是作者在on size訊息中調整瀏覽器控制項大小的方法出現斷言錯誤,主要錯誤如下 在進入到下面函式段時,setwindowpos 出現錯誤。錯誤在此處,assert iswindow m hwnd m pctrlsi...
Java 程式初始化過程
之前應聘筆試的時候,遇到過很多次,給出一段 裡面有static靜態變數,static 塊以及建構函式等,在它們初始化或者是 塊中設定列印log,然後問它們的列印順序。再此之前一直不知道具體考察的是什麼,好在現在終於知道了,考察的是程式的初始化過程。那麼程式的初始化過程是怎樣的呢?main方法執行的時...
MFC原理第二講 MFC的初始化過程
通過上一講.我們手工模擬了乙個mfc程式.但是上一講留下了疑問.就是winmain在哪.以及訊息處理在 也就是mfc的初始化過程.我們上一講模擬了mfc程式.要查詢winmain很簡單.1.除錯啟動.f10快捷鍵.這樣直接定位到winmain 2.因為我們的initinstance呼叫.我們可以下段...