探索豐富多彩的C++技術(shù)內(nèi)幕手記
C++語言是主要使用的編程語言,但是C++憑借其對C的兼容性,面向?qū)ο笮再|(zhì)也開始在該領(lǐng)域嶄露頭角,在系統(tǒng)級的開發(fā)上,C++技術(shù)應(yīng)用居多。這3種語言各有特色??偟膩碚f,C++的應(yīng)用集中在如下主要領(lǐng)域。
一、應(yīng)用程序框架
在CmyApp類中定義了一個虛函數(shù):Virtual BOOL InitIstance();用來初始化應(yīng)用程序。在這里可以初始化應(yīng)用程序框架。在CMyApp類中有一個數(shù)據(jù)成員m_pMainWnd這是主框架窗口的指針。在需要時可以用AfxGetApp()->m_pMainWnd來獲得。其中AfxGetApp()是獲得應(yīng)用程序的指針。
初始化應(yīng)用程序:
- m_pMainWnd=new CmyFrame();
- m_pMainWnd->ShowWindow(m_nCmdShow);
- m-pMainWnd->UpdateWindow();
如果更新區(qū)域不為空,UpdateWindow成員函數(shù)直接發(fā)送消息WM_PAINT 越過應(yīng)用程序隊列,如果更新區(qū)域為空,則不會發(fā)送WM_PAINT消息。 這個函數(shù)設(shè)置窗口的可視狀態(tài)。每個應(yīng)用程序只應(yīng)用CwinApp::m_nCmdShow為主窗口調(diào)用一次ShowWindow.以后調(diào)用ShowWindow應(yīng)該用下面列出的值來替代CWinApp::m_mCmdShow指定的值。
- CWnd::ShowWindow
- 函數(shù)原型:BOOL ShowWindow(int m_nCmdShow)
- 返回值:窗口可見為:非零值;
- 窗口不可見為:零;
- m_nCmdShow可以指定的值有:
- SW_HIDE 隱藏窗口并將活動狀態(tài)傳遞給其它窗口。
- SW_MINIMIZE最小化窗口并激活系統(tǒng)列表中的頂層窗口。
- SW_RESTORE 激活并顯示窗口。如果窗口是最小化或最大化的,Windows恢復(fù)其原來的大小和位置。
- SW_SHOW 激活窗口并以其當(dāng)前的大小和位置顯示。
- SW_SHOWMAXIMIZED 激活窗口并顯示為最大化窗口。
- SW_SHOWMINIMIZED 激活窗口并顯示為圖標(biāo)。
- SW_SHOWMINNOACTIVE 將窗口顯示為圖標(biāo)。當(dāng)前活動的
- 窗口將保持活動狀態(tài)。
- SW_SHOWNA 按照當(dāng)前狀態(tài)顯示窗口。當(dāng)前活動的窗口將保持活動狀態(tài)。
- SW_SHOWNOACTIVATE 按窗口最近的大小和位置顯示。當(dāng)前活動的窗口將保持活動狀態(tài)。
- SW_SHOWNORMAL 激活并顯示窗口。如果窗口是最小化或最大化的,則Windows恢復(fù)它原來的大小和位置。
CmyFrame類 類CmyFrame的對象代表著應(yīng)用程序的主框架窗口。當(dāng)構(gòu)造函數(shù)調(diào)用基類CframeWnd的Create成員函數(shù)時,Windows將創(chuàng)建具體的的窗口結(jié)構(gòu),同時應(yīng)用程序框架會將所創(chuàng)建的窗口結(jié)構(gòu)連接到C++對象中。為了顯示所創(chuàng)建的窗口,必須調(diào)用基類中的ShowWindow和UpdateWindow成員函數(shù)。CmyFrame::Onpaint函數(shù) 應(yīng)用程序框架在每次需要重新繪制窗口時,都要調(diào)用這個非常重要的且已經(jīng)被映射過的CmyFrame類的成員函數(shù)。
在程序運行時,在用戶改變了窗口的大小時,在窗口的全部或部分被重新顯現(xiàn)時,OnPaint成員函數(shù)都會被調(diào)用。CpaintDC和圖形設(shè)備接口(GDI)有關(guān),MFC庫應(yīng)用程序框架并沒有采用虛函數(shù)來處理Window消息,相反,它通過一些宏來將特定的消息映射到派生類中相應(yīng)的成員函數(shù)上。MFC消息控件函數(shù)要求我們提供函數(shù)原型、函數(shù)體以及在消息映射中的。#t#
同樣的原因,在寫了“你應(yīng)當(dāng)如何學(xué)習(xí)C++技術(shù)一文之后,當(dāng)孟巖先生邀請我給《程序員》寫一個系列的文章,介紹一下我在接觸C++的過程中的態(tài)度和認(rèn)識轉(zhuǎn)變時,我雖然非常高興的答應(yīng)了,但直到現(xiàn)在3個月過去了還是顆粒無收。為什么?因為我覺得真正本質(zhì)的問題沒有被清晰的觸摸到;所以直到現(xiàn)在我都沒有動筆,免得廢話說了一大堆,除了能被當(dāng)成小說讀讀之外,對真正考慮是否要學(xué)習(xí)乃至使用C++的人未必有什么實際用處。
然而,這么個念頭一直都放在潛意識里面。前一陣子和Bjarne通信,談到了關(guān)于C++技術(shù)的一些想法,在郵件里面總結(jié)了一下C++的復(fù)雜性來源,感覺思路清晰了許多。而這篇文章要達(dá)到的目的,正是傳達(dá)對C++的復(fù)雜性的一個具體而明確的認(rèn)識,有了這個認(rèn)識作為支持,我們便可以推導(dǎo)出學(xué)習(xí)C++的最佳(實踐者)的方法。