欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
技術(shù)資料-【剖析MFC六大關(guān)鍵技術(shù)之初始化過(guò)程】
【剖析MFC六大關(guān)鍵技術(shù)之初始化過(guò)程】
我并不認為MFC減輕了程序員們的負擔,MFC出現的目的雖然似乎是為了讓程序員不用懂得太多就可以進(jìn)行視窗編程,但本人在MFC里徘徊了很久很久(因為那時(shí)沒(méi)有書(shū)本詳細介紹MFC的原理),毫無(wú)收獲??赡芘笥褌儠?huì )說(shuō),怎么一定要了解MFC的具體呢,“黑箱”作業(yè)不行嗎?這不是微軟的初衷嗎?
不行?。?!如果這樣,我寧愿永遠不選擇MFC!在學(xué)電腦之前,本人學(xué)習的東西大都與藝術(shù)不無(wú)關(guān)系,小學(xué)時(shí)參加過(guò)全國書(shū)畫(huà)比賽獲銀獎。兒時(shí)的愛(ài)好就是在一張紙上隨心所欲地畫(huà)畫(huà)!MFC“黑箱”就象一幅碩大的抽象畫(huà)(抽象到你不能理解),它用鉛筆勾畫(huà)好線(xiàn)條,然后請你填顏色。
我們怎么能忍受“黑箱”作業(yè)?我們選擇C++,就是因為它夠自由,夠藝術(shù),我們可以在此放飛幻想。所以,我們要攻克MFC。
偉大孫老師在剖析MFC的時(shí)候雖然盡心盡力,但可能由于篇幅所限,說(shuō)得并不大清楚(我相信許多學(xué)員都有這方面的感受)。在此,我突發(fā)奇想,想與大家一同分享一下著(zhù)名的MFC六大關(guān)鍵技術(shù)。
從什么地方開(kāi)始講起好呢?我覺(jué)得回到最初摸索MFC的時(shí)候,從基本談起最好。
因為我知道,一個(gè)走過(guò)來(lái)程序員,總是忘記了當初自己是怎么走過(guò)來(lái)的,忘記了一個(gè)學(xué)員最想知道的是什么。一個(gè)小小的問(wèn)題(一兩句話(huà)就可以解釋的),足學(xué)以令手無(wú)寸鐵的學(xué)員頭大半個(gè)月,所以,我努力回憶當初是怎么讓自己豁然開(kāi)朗的。
轉入正題,MFC的六大關(guān)鍵技術(shù)包括:
·MFC程序的初始化過(guò)程
·運行時(shí)類(lèi)型識別(RTTI)
·動(dòng)態(tài)創(chuàng )建
·永久保存
·消息映射
·消息傳遞
MFC程序的初始化過(guò)程
1、設計一個(gè)簡(jiǎn)單完整MFC程序,產(chǎn)生一個(gè)窗口。當然這不能讓AppWizard自動(dòng)為我們生成。我們可以在Win32 Application工程下面那樣寫(xiě):
#include <afxwin.h>
class MyApp : public CWinApp
{
public:
BOOL InitInstance() //②程序入點(diǎn)
{
CFrameWnd *Frame=new CFrameWnd();//構造框架
m_pMainWnd=Frame; //將m_pMainWnd設定為Frame;
Frame->Create(NULL,"最簡(jiǎn)單的窗口");//建立框架
Frame->ShowWindow(SW_SHOW); //顯示框架
return true; //返回
}
};
MyApp theApp; //①建立應用程序。
設定鏈接MFC庫,運行,即可看見(jiàn)一個(gè)窗口。
從上面,大家可以看到建立一個(gè)MFC窗口很容易,只用兩步:一是從CWinApp派生一個(gè)應用程序類(lèi)(這里是MyApp),,然后建立應用程序對象(theApp),就可以產(chǎn)生一個(gè)自己需要的窗口(即需要什么樣就在InitInstance()里創(chuàng )建就行了)。
整個(gè)程序,就改寫(xiě)一個(gè)InitInstance()函數,創(chuàng )建那么一個(gè)對象(theApp),就是一個(gè)完整的窗口程序。這就是“黑箱”作業(yè)的魅力?。。?!
在我們正想為微軟鼓掌的時(shí)候,我們突然覺(jué)得心里空蕩蕩的,我們想知道微軟幫我們做了什么事情,而我們想編自己的程序時(shí)又需要做什么事情,那怕在上面幾行的程序里面,我們還有不清楚的地方,比如,干嘛有一個(gè)m_pMainWnd指針變量,它從哪里來(lái),又要到哪里去呢?想一想在DOS下編程是多么美妙的一件事呵,我們需要什么變量,就聲明什么變量,需要什么樣的函數,就編寫(xiě)什么樣的函數,或者引用函數庫……但是現在我們怎么辦?。?!
我們可以逆向思維一下,MFC要達到這種效果,它是怎么做的呢?首先我們要弄明白,VC不是一種語(yǔ)言,它就象我們學(xué)c語(yǔ)言的時(shí)候的一個(gè)類(lèi)似記事本的編輯器(請原諒我的不貼切的比喻),所以,在VC里面我們用的是C++語(yǔ)言編程,C++才是根本(初學(xué)者總是以為VC是一門(mén)什么新的什么語(yǔ)言,一門(mén)比C++先進(jìn)很多的復雜語(yǔ)言,汗)。說(shuō)了那么多,我想用一句簡(jiǎn)單的話(huà)概括“MFC‘黑箱’就是幫助我們插入了‘C++代碼’的東西”。
既然MFC黑箱幫我們插入了代碼,那么大家想想它會(huì )幫我們插入什么樣的代碼呢?他會(huì )幫我們插入求解一元二次方程的代碼嗎?當然不會(huì ),所以它插入的實(shí)際上是每次編寫(xiě)窗口程序必須的,通用的代碼。
再往下想,什么才是通用的呢?我們每次視窗編程都要寫(xiě)WinMain()函數,都要有注冊窗口,產(chǎn)生窗口,消息循環(huán),回調函數……即然每次都要的東西,就讓它們從我們眼前消失,讓MFC幫忙寫(xiě)入!
要知道MFC初始化過(guò)程,大家當然可以跟蹤執行程序。孫老師的第三課跟蹤了很長(cháng)一段時(shí)間,我相信大家都有點(diǎn)暈頭轉向。本人覺(jué)得那怕你理解了MFC代碼,也很容易讓人找不著(zhù)北,我們完全不懂的時(shí)候,在成千上萬(wàn)行程序的迷宮中如何能找到出口?
我們要換一種方法,不如就來(lái)重新編寫(xiě)個(gè)MFC庫吧,嘩!大家不要笑,小心你的大牙,我不是瘋子(雖然瘋子也說(shuō)自己不瘋)。我們要寫(xiě)的就是最簡(jiǎn)單的MFC類(lèi)庫,就是把MFC宏觀(guān)上的,理論上的東西寫(xiě)出來(lái)。我們要用最簡(jiǎn)化的代碼,簡(jiǎn)化到剛好能運行。
既然,我們這一節寫(xiě)的是MFC程序的初始化過(guò)程,上面我們還有了一個(gè)可執行的MFC程序。程序中只是用了兩個(gè)MFC類(lèi),一個(gè)是CWinApp,另一個(gè)是CFrameWnd。當然,還有很多同樣重要MFC類(lèi)如視圖類(lèi),文檔類(lèi)等等。但在上面的程序可以不用到,所以暫時(shí)省去了它(總之是為了簡(jiǎn)單)。
好,現在開(kāi)始寫(xiě)MFC類(lèi)庫吧……唉,面前又有一個(gè)大難題,就是讓大家背一下MFC層次結構圖。天,那張魚(yú)網(wǎng)怎么記得住,但既然我們要理解他,總得知道它是從那里派生出來(lái)的吧。
考慮到大家都很辛苦,那我們看一下上面兩個(gè)類(lèi)的父子關(guān)系(箭頭代表派生):
CObject->CCmdTarget->CWinThread->CWinApp->自己的重寫(xiě)了InitInstance()的應用程序類(lèi)。
CObject(同上)->CCmdTarget(同上)->CWnd->CFrameWnd
看到層次關(guān)系圖之后,終于可以開(kāi)始寫(xiě)MFC類(lèi)庫了。按照上面層次結構,我們可以寫(xiě)以下六個(gè)類(lèi)(為了直觀(guān),省去了構造函數和析構函數)。
/////////////////////////////////////////////////////////
class CObiect{};//MFC類(lèi)的基類(lèi)。
class CCmdTarget : public CObject{};
------------------------------------------------
class CWinThread : public CCmdTarget{};
class CWinApp : public CWinThread{};
------------------------------------------------
class CWnd : public CCmdTarget{};
class CFrameWnd : public CWnd{};
/////////////////////////////////////////////////////////
大家再想一下,在上面的類(lèi)里面,應該有什么?大家馬上會(huì )想到,CWinApp類(lèi)或者它的基類(lèi)CCmdTarget里面應該有一個(gè)虛函數virtual BOOL InitInstance(),是的,因為那里是程序的入口點(diǎn),初始化程序的地方,那自然少不了的??赡苡行┡笥褧?huì )說(shuō),反正InitInstance()在派生類(lèi)中一定要重載,我不在CCmdTarget或CWinApp類(lèi)里定義,留待CWinApp的派生類(lèi)去增加這個(gè)函數可不可以。扯到這個(gè)問(wèn)題可能有點(diǎn)越說(shuō)越遠,但我想信C++的朋友對虛函數應該是沒(méi)有太多的問(wèn)題的??偟膩?lái)說(shuō),作為程序員如果清楚知道基類(lèi)的某個(gè)函數要被派生類(lèi)用到,那定義為虛函數要方便很多。也有很多朋友問(wèn),C++為什么不自動(dòng)把基類(lèi)的所有函數定義為虛函數呢,這樣可以省了很多麻煩,這樣所有函數都遵照派生類(lèi)有定義的函數就調用派生類(lèi)的,沒(méi)定義的就調用基類(lèi)的,不用寫(xiě)virtual的麻煩多好!其實(shí),很多面向對象的語(yǔ)言都這樣做了。但定義一個(gè)虛函數要生成一個(gè)虛函數表,要占用系統空間,虛函數越多,表就越大,有時(shí)得不償失!這里哆嗦幾句,是因為往后要說(shuō)明的消息映射中大家更加會(huì )體驗到這一點(diǎn),好了,就此打往。
上面我們自己解決了一個(gè)問(wèn)題,就是在CCmdTarge寫(xiě)一個(gè)virtual BOOL InitInstance()。
大家再下想,我們還要我們MFC“隱藏”更多的東西:WinMain()函數,設計窗口類(lèi),窗口注冊,消息循環(huán),回調函數……我們馬上想到封裝想封裝他們。大家似乎隱約地感覺(jué)到封裝WinMain()不容易, 覺(jué)得WinMain()是一個(gè)特殊的函數,許多時(shí)候它代表了一個(gè)程序的起始和終結。所以在以前寫(xiě)程序的時(shí)候,我們寫(xiě)程序習慣從WinMain()的左大括寫(xiě)起,到右大括弧返回、結束程序。
我們換一個(gè)角度去想,有什么東西可以拿到WinMain()外面去做,許多初學(xué)者們,總覺(jué)得WinMain()函數天大的函數,什么函數都好象要在它里面才能真正運行。其實(shí)這樣了解很片面,甚至錯誤。我們可以寫(xiě)一個(gè)這樣的C++程序:
////////////////////////////////////////////////////
#include <iostream.h>
class test{
public:
test(){cout<<"請改變你對main()函數的看法!"<<endl;}
};
test test1;
/**************************/
void main(){}
////////////////////////////////////////////////////
在上面的程序里,入口的main()函數表面上什么也不做,但程序執行了(注:實(shí)際入口函數做了一些我們可以不了解的事情),并輸出了一句話(huà)(注:全局對象比main()首先運行)?,F在大家可以知道我們的WinMain()函數可以什么都不做,程序依然可以運行,但沒(méi)有這個(gè)入口函數程序會(huì )報錯。
那么WinMain()函數會(huì )放哪個(gè)類(lèi)上面呢,請看下面程序:
#include <afxwin.h>
class MyApp : public CWinApp
{
public:
BOOL InitInstance() //②程序入點(diǎn)
{
AfxMessageBox("程序依然可以運行!");
return true;
}
};
MyApp theApp; //①建立應用程序。
大家可以看到,我并沒(méi)有構造框架,而程序卻可以運行了——彈出一個(gè)對話(huà)框(如果沒(méi)有WinMain()函數程序會(huì )報錯)。上面我這樣寫(xiě)還是為了直觀(guān)起見(jiàn),其實(shí)我們只要寫(xiě)兩行程序:
#include <afxwin.h>
CWinApp theApp;
//整個(gè)程序只構造一個(gè)CWinApp類(lèi)對象,任可事情,程序就可以運行!
所以說(shuō),只要我們構造了CWinApp對象,就可以執行WinMain()函數。我們馬上相信WinMain()函數是在CWinApp類(lèi)或它的基類(lèi)中,而不是在其他類(lèi)中。其實(shí)這種看法是錯誤的,我們知道編寫(xiě)C++程序的時(shí)候,不可能讓你在一個(gè)類(lèi)中包含入口函數,WinMain()是由系統調用,跟我們的平時(shí)程序自身調用的函數有著(zhù)本質(zhì)的區別。我們可以暫時(shí)簡(jiǎn)單想象成,當CWinApp對象構造完的時(shí)候,WinMain()跟著(zhù)執行。
現在大家明白了,大部分的“通用代碼(我們想封裝隱藏的東西)”都可以放到CWinApp類(lèi)中,那么它又是怎樣運行起來(lái)的呢?為什么構造了CWinApp類(lèi)對象就“自動(dòng)”執行那么多東西。
大家再仔細想一下,CWinApp類(lèi)對象構造之后,它會(huì )“自動(dòng)”執行自己的構造函數。那么我們可以把想要“自動(dòng)”執行的代碼放到CWinApp類(lèi)的構造函數中。
那么CWinApp類(lèi)可能打算這樣設計(先不計較正確與否):
class CWinApp : public CWinThead{
public:
virtual BOOL InitInstance(); //解釋過(guò)的程序的入點(diǎn)
CWinApp ::CWinApp(){ //構造函數
////////////////////////
WinMain(); //這個(gè)是大家一眼看出的錯誤
Create(); //設計、創(chuàng )建、更新顯示窗口
Run(); //消息循環(huán)
//////////////////////
}
};
寫(xiě)完后,大家又馬上感覺(jué)到似乎不對,WinMain()函數在這里好象真的一點(diǎn)用處都沒(méi)有,并且能這樣被調用嗎(請允許我把手按在圣經(jīng)上聲明一下:WinMain()不是普通的函數,它要肩負著(zhù)初始化應用程序,包括全局變量的初始化,是由系統而不是程序本身調用的,WinMain()返回之后,程序就結束了,進(jìn)程撤消)。再看Create()函數,它能確定設計什么樣的窗口,創(chuàng )建什么樣的窗口嗎?如果能在CWinApp的構造函數里確定的話(huà),我們以后設計MFC程序時(shí)窗口就一個(gè)樣,變得寫(xiě)程序變有必要。再看Run()函數,它能在WinMain()函數外面運行嗎?
回過(guò)頭來(lái),我們可以讓W(xué)inMain()函數一條語(yǔ)句都不包含嗎?不可以,我們看一下WinMain() 函數的四個(gè)參數:
WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
其中第一個(gè)參數指向一個(gè)實(shí)例句柄,我們在設計WNDCLASS的時(shí)候一定要指定實(shí)例句柄。我們窗口編程,肯定要設計窗口類(lèi)。所以,WinMain()再簡(jiǎn)單也要這樣寫(xiě):
int WinMain(HINSTANCE hinst, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{ hInstance=hinst }
既然實(shí)例句柄要等到程序開(kāi)始執行才能知道,那么我們用于創(chuàng )建窗口的Create()函數也要在WinMain()內部才能執行[因為如果等到WinMain()執行完畢后,程序結束,進(jìn)程撤消,當然Create()也不可能創(chuàng )建窗口]
那么Run()(消息循環(huán))放在那里執行好呢?眾所周知,消息循環(huán)就是相同的那么幾句代碼,但我們也不要企圖把它放在WinMain()函數之外執行。
所以我們在WinMain()函數里面,我們程序要象以下這樣寫(xiě)
WinMain(……)
{
……窗口類(lèi)對象執行創(chuàng )建窗口函數……
……程序類(lèi)對象執行消息循環(huán)函數……
}
對于WinMain()的問(wèn)題,得總結一下,我們封裝的時(shí)候是不可以把它封裝到CWinApp類(lèi)里面,但由于WinMain()的不變性(或者說(shuō)有規律可循),MFC完全有能力在我們構造CWinApp類(lèi)對象的時(shí)候,幫我們完成那幾行代碼。
轉了一個(gè)大圈,我們仿佛又回到了SDK編程的開(kāi)始。但現在我們現在能清楚地知道,表面上MFC與SDK編程截然不同,但實(shí)質(zhì)上MFC只是用類(lèi)的形式封裝了SDK函數,封裝之后,我們在WinMain()函數中只需要幾行代碼,就可以完成一個(gè)窗口程序。我們也由此知道了應如何去封裝應用程序類(lèi)(CWinApp)和主框架窗口類(lèi)(CFrameWnd)。下面把上開(kāi)始設計這兩個(gè)類(lèi)。
為了簡(jiǎn)單起見(jiàn),我們忽略這兩個(gè)類(lèi)的基類(lèi)和派生類(lèi)的編寫(xiě),可能大家會(huì )認為這是一種很不負責任的做法,但本人覺(jué)得這既可減輕負擔,又免了大家在各類(lèi)之間穿來(lái)穿去,更好理解一些(我們在關(guān)鍵的地方作注明)。還有,我把全部代碼寫(xiě)在同一個(gè)文件中,讓大家看起來(lái)不用那么吃力,但這是最不提倡的寫(xiě)代碼方法,大家不要學(xué)哦!
#include <windows.h>
HINSTANCE hInstance;
class CFrameWnd
{
HWND hwnd;
public:
CFrameWnd(); //也可以在這里調用Create()
virtual ~CFrameWnd();
int Create(); //類(lèi)就留意這一個(gè)函數就行了!
BOOL ShowWnd();
};
class CWinApp1
{
public:
CFrameWnd* m_pMainWnd;//在真正的MFC里面
//它是CWnd指針,但這里由于不寫(xiě)CWnd類(lèi)
//只要把它寫(xiě)成CFrameWnd指針
CWinApp1* m_pCurrentWinApp;//指向應用程序對象本身
CWinApp1();
virtual ~CWinApp1();
virtual BOOL InitInstance();//MFC原本是必須重載的函數,最重要的函數?。。?!
virtual BOOL Run();//消息循環(huán)
};
CFrameWnd::CFrameWnd(){}
CFrameWnd::~CFrameWnd(){}
int CFrameWnd::Create() //封裝創(chuàng )建窗口代碼
{
WNDCLASS wndcls;
wndcls.style=0;
wndcls.cbClsExtra=0;
wndcls.cbWndExtra=0;
wndcls.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);
wndcls.hIcon=LoadIcon(NULL,IDC_ARROW);
wndcls.hInstance=hInstance;
wndcls.lpfnWndProc=DefWindowProc;//默認窗口過(guò)程函數。
//大家可以想象成MFC通用的窗口過(guò)程。
wndcls.lpszClassName="窗口類(lèi)名";
wndcls.lpszMenuName=NULL;
RegisterClass(&wndcls);
hwnd=CreateWindow("窗口類(lèi)名","窗口實(shí)例標題名",WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL);
return 0;
}
BOOL CFrameWnd::ShowWnd()//顯示更新窗口
{
ShowWindow(hwnd,SW_SHOWNORMAL);
UpdateWindow(hwnd);
return 0;
}
/////////////
CWinApp1::CWinApp1()
{
m_pCurrentWinApp=this;
}
CWinApp1::~CWinApp1(){}
//以下為InitInstance()函數,MFC中要為CWinApp的派生類(lèi)改寫(xiě),
//這里為了方便理解,把它放在CWinApp類(lèi)里面完成!
//你只要記住真正的MFC在派生類(lèi)改寫(xiě)此函數就行了。
BOOL CWinApp1::InitInstance()
{
m_pMainWnd=new CFrameWnd;
m_pMainWnd->Create();
m_pMainWnd->ShowWnd();
return 0;
}
BOOL CWinApp1::Run()//////////////////////封裝消息循環(huán)
{
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
} //////////////////////////////////////////////////////封裝消息循環(huán)
CWinApp1 theApp; //應用程序對象(全局)
int WINAPI WinMain( HINSTANCE hinst, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
hInstance=hinst;
CWinApp1* pApp=theApp.m_pCurrentWinApp;
//真正的MFC要寫(xiě)一個(gè)全局函數AfxGetApp,以獲取CWinApp指針。
pApp->InitInstance();
pApp->Run();
return 0;
}
代碼那么長(cháng),實(shí)際上只是寫(xiě)了三個(gè)函數,一是CFrameWnd類(lèi)的Create(),第二個(gè)是CWinApp類(lèi)的InitInstance()和Run()。在此特別要說(shuō)明的是InitInstance(),真正的MFC中,那是我們跟據自己構造窗口的需要,自己改寫(xiě)這個(gè)函數。
大家可以看到,封裝了上面兩個(gè)類(lèi)以后,在入口函數WinMain中就寫(xiě)幾行代碼,就可以產(chǎn)生一個(gè)窗口程序。在MFC中,因為WinMain函數就是固定的那么幾行代碼,所以MFC絕對可以幫我們自動(dòng)完成(MFC的特長(cháng)就是幫我們完成有規律的代碼),所以我們創(chuàng )造MFC應用程序的時(shí)候,看不到WinMain函數。
寫(xiě)到這里,MFC六大關(guān)鍵技術(shù)之一:MFC程序的初始化過(guò)程(模擬),就差不多寫(xiě)完了?;仡^看一下,居然寫(xiě)了八千多字,原本以為寫(xiě)完六大關(guān)鍵技術(shù)也不用寫(xiě)那么多字,現在還覺(jué)得慶幸的是不把文檔、視類(lèi)牽連進(jìn)去,否則更不知寫(xiě)到何時(shí)。
還有五大關(guān)鍵技術(shù)沒(méi)有寫(xiě),我還應該寫(xiě)下去嗎?上面寫(xiě)了八千多字,都是我一個(gè)字一個(gè)字地敲進(jìn)去,每個(gè)例子都是自己生硬地想出來(lái)。用了十多個(gè)小時(shí),換來(lái)的可能更多是論壇中朋友們的漫罵,譏諷!
但我覺(jué)得還是值得的,我一向認為VC沒(méi)有敵人,只有朋友,放眼周?chē)?,發(fā)覺(jué)學(xué)VC的朋友越來(lái)越少,也沒(méi)有發(fā)現多少招收VC程序員的地方。記得讀大學(xué)的時(shí)候,我遇到一位搞美術(shù)的師兄,本來(lái)同行如敵國(我曾經(jīng)搞過(guò)美術(shù))。師兄美術(shù)功底很好,但他從來(lái)沒(méi)有在學(xué)校獲過(guò)美術(shù)一等獎,原因評獎的不懂得欣賞他的作品。我的出現,他深刻地體會(huì )到了:多一個(gè)朋友,會(huì )少一分孤獨!有時(shí)覺(jué)得學(xué)習VC的朋友是英雄(但我不是英雄,因為我學(xué)VC多年來(lái)無(wú)甚突破),是值得尊敬的人物,大家交流一下,糾正一下自己的錯誤,真是一種福份……
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
MFC-最簡(jiǎn)單的MFC程序
Windows編程之MFC窗口程序淺析
MFC基本介紹
理解MFC文檔/視圖框架
MFC基于對話(huà)框基礎程序解析
Wolf的日志
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久