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