VC++6.0及MFC基礎知識

VC++6.0及MFC基礎知識

這是早期的學習筆記,今天翻出來,覺得還有點價值,就轉發到這裏。

Visual C++ 6.0的主界面

 

VC++6.0MFC

 

Windows 的三大模塊就是以DLL( Dynamic Link Librar、動態鏈接庫)的形式提供的(Kernel32.dll,User32.dll,GDI32.dll),裏面就含有了 API函數的執行代碼。爲了使用 DLL 中的 API 函數, 必須要有 API 函數的聲明(.H)和其導入庫(.LIB),導入庫可以先這樣理解:導入庫是爲了在 DLL 中找到 API 的入口點而使用的。

人們常把僅使用 API 來編寫應用程序的開發方式叫做“SDK編程”。爲減少應用程序開發人員的難度和工作量,一種方法是API進行了封裝處理,以編程框架和類庫的形式出現,比如MFC 。【SDK(Software Development Kit,軟件開發工具包)是爲特定軟件包、框架、硬件平臺、操作系統等建立引用軟件的開發工具的集合。SDK相當於很多API接口和其他支持文件的集合體。它是一個軟件工具包,一些功能性的SDK已經被當作一個產品來運營。API (Application Programming Interface、應用程序編程接口),是一些預先定義的函數,目的是提供應用程序與開發人員基於某軟件或硬件得以訪問一組例程的能力,而又無需訪問源碼,或理解內部工作機制的細節。】

 

MFC是建立在C++的基礎上,利用C++的封裝功能使開發者擺脫Windows中各種句柄的困擾,只需要面對C++中的對象,這樣一來使開發更接近開發語言而遠離系統。利用C++的封裝性開發者可以更容易理解和操作各種窗口對象;利用C++的派生性開發者可以減少開發自定義窗口的時間和創造出可重用的代碼;利用虛擬性可以在必要時更好的控制窗口的活動。

MFC(Microsoft Foundation Classes, 微軟基礎類庫)是微軟提供的類庫(class libraries),以C++類的形式封裝的WindowsAPI,包含一個應用程序框架,以減少應用程序開發人員的工作量。其中類包含大量Windows句柄封裝類和Windows內建控件和組件的封裝類。MFC把Windows SDK API函數包裝成許多個類(class)。MFC已經基本上不再更新了。

在MFC中,類的名稱都約定以字母C開始,在開發MFC程序時,要注意留意瞭解哪些類及代碼是由嚮導自動生成的,類的名稱是什麼(例如一個單文檔應用程序,嚮導會生成一個CMainFrame類,一個以“C+工程名+APP”爲名的類,一個以“C+工程名+Doc”爲名的類,一個以“C+工程名+View”爲名的類),哪些類及代碼是由我們添加的。

 

生成的程序項目(Project:工程,項目)所在的文件夾(目錄)類似如:

其中

.cpp文件:是源代碼文件

.dsp文件:DeveloperStudio Project,是VC6.0的工程(Project:工程,項目)文件,用來保存當前工程的信息,例如編譯參數、包含的源文件等,不建議手動改動。當需要打開一個已存在的工程時,打開該文件即可。 對於工程來說,這個文件是非常重要的。這個文件在轉移工程時,不要刪除。我們打開別人的項目,一些設置已經保存於此,如果只是拷貝代碼文件,這些信息就不見了,就可能導致工程無法正常打開編譯運行。

 

VC++6.0MFC中三個常用類

CRect:用來表示矩形的類,擁有四個成員變量:top left bottom right。分別表是左上角和右下角的座標。可以通過以下的方法構造:

CRect( int l, int t, int r, int b ); 指明四個座標

CRect( const RECT& srcRect ); 由RECT結構構造

CRect( LPCRECT lpSrcRect ); 由RECT結構構造

CRect( POINT point, SIZE size ); 有左上角座標和尺寸構造

CRect( POINT topLeft, POINT bottomRight ); 有兩點座標構造

CRect幾個成員函數:

int Width( ) const; 得到寬度

int Height( ) const; 得到高度

CSize Size( ) const; 得到尺寸

CPoint& TopLeft( ); 得到左上角座標

CPoint& BottomRight( ); 得到右下角座標

CPoint CenterPoint( ) const; 得當中心座標

此外矩形可以和點(CPoint)相加進行位移,和另一個矩形相加得到“並”操作後的矩形。

 

CPoint:用來表示一個的座標,有兩個成員變量:x y。 可以和另一個點相加。

CPoint( int initX, int initY );   initX 指定x座標的值,initY 指定y座標的值。

 

CString:用來表示可變長度的字符串。使用CString可不指明內存大小,CString會根據需要自行分配。CString類型的初始化:

CString str;

CString str1(L"abc");

CString str2 = _T("defg");

CString幾個成員函數:

GetLength 得到字符串長度

GetAt 得到指定位置處的字符

operator + 相當於strcat

void Format( LPCTSTR lpszFormat, ... ); 相當於sprintf

Find 查找指定字符,字符串

Compare 比較

CompareNoCase 不區分大小寫比較

MakeUpper 改爲小寫

MakeLower 改爲大寫

 

設備環境

設備環境DC(Device Context設備環境)對象是一個抽象的作圖環境,可能是對應屏幕,也可能是對應打印機或其它。這個環境是設備無關的,所以你在對不同的設備輸出時只需要使用不同的設備環境就行了,而作圖方式可以完全不變。這也就是設備無關性。

設備環境DC(Device Context、設備環境)是Windows 應用程序與設備驅動程序和輸出設備(如打印機、顯示器等)之間的接口。

圖形設備接口GDI(Graphical Device Interface)供了用戶可以調用的一套用於繪圖的函數集。例如,調用GDI函數中的Ellipse函數可以繪製橢圓,調用TextOut函數可以繪製文本,調用Rectangle函數可以繪製矩形等。MFC的CDC類對GDI 函數進行了全面的封裝,使這兩者的使用更加方便。CDC 類是一個通用的類,可以從它派生出特定類型的DC子類。

 

設備座標

圖形或文字要在物理設備(如顯示器、打印機等)上輸出,就必須使用該物理設備的座標系統,稱爲設備座標。設備座標以設備的最小分辨單位——像素爲基本單位,以左上角爲座標原點,X 軸向右延伸,Y 軸向下延伸,如圖所示:

如果直接使用設備座標繪圖,由於屏幕和打印機的分辨率不同,同樣是100個像素長的一條直線,在兩種設備上的實際輸出長度將不相同。假設程序員想畫一條在兩種設備上都是10cm長的直線,將不得不針對屏幕和打印機的分辨率分別計算它們各需要包含多少個設備像素。爲了解決這個問題,在GDI 繪圖中使用了邏輯座標這一概念。邏輯座標使用的是邏輯單位,邏輯單位與設備無關,比如邏輯單位是0.lmm ,則一條100個邏輯單位長的直線,不論是顯示在屏幕上,還是輸出到打印機上,都是10cm 長。雖然最終顯示或打印時仍然要使用像素點(設備座標),但一個邏輯單位應該映射爲物理設備上的多少個像素點,是由Windows 自動處理的。

 

Windows 提供了一些工具用於繪圖,這些工具有:畫筆(Pen)、畫刷(Brush)、位圖( Bitmap)、字體(Font)、調色板(Palette)、區域(Region)等,這些都稱爲GDI 對象。

MFC 中用CPen 類封裝了Windows 的畫筆、用CBrush 類封裝了Windows 的畫刷、用CBitmap即類封裝了Windows 的位圖、用CFont 類封裝了Windows 的字體、用CPalette 類封裝了Windows 的調色板、用CRgn 類封裝了Windows 的(橢圓、多邊形或者不規則區域)區域。CRect類:封裝了一個矩形(rectangle)區域及相關操作。

 

在窗口中輸出文字

輸出文字一般使用CDC::BOOL TextOut(int x, int y, const CString& str)和CDC::int DrawText( const CString& str, LPRECT lpRect, UINT nFormat )兩個函數,對TextOut來講只能輸出單行的文字,而DrawText可以指定在一個矩形中輸出單行或多行文字,並且可以規定對齊方式和使用何種風格。nFormat可以是多種以下標記的組合(利用位或操作)以達到選擇輸出風格的目的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章