天天看點

VC|MFC學習筆記

1.常見的Afx全域函數

AfxWinInit         被WinMain調用的一個函數,用做MFC GUI程式初始化的一部份

AfxBeginThread     開始一個新的執行線程

AfxEndThread       結束一個舊的執行線程

AfxMessageBox      類似Windows API 函數MessageBox

AfxGetApp          取得application object(CWinApp衍生對象)的指針

AfxGetMainWnd      取得程式主視窗的指針

AfxGetInstance     取得程式的instance handle

AfxRegisterClass   以自定的WNDCLASS 注冊視窗類别

2.MFC的資料類型

資料類型 意義
BOOL Boolean值(TRUE or FALSE)
BSTR 32-bit字元指針
BYTE 8-bit整數,無正負号
COLORREF 32-bit數值,代表一個顔色值
DWORD 32-bit整數,無正負号
LONG 32-bit整數,有正負号
LPARAM 32-bit數值,作為視窗函數或callback函數的一個參數
LPCSTR 32-bit指針,指向一個常數字元串
LPSTR 32-bit指針,指向一個字元串
LPCTSTR 32-bit指針,指向一個常數字元串。此字元串可移植到Unicode
LPTSTR 32-bit指針,指向一個字元串。此字元串可移植到Unicode
LPVOID 32-bit指針,指向一個未指定類型的資料
LPRESULT 32-bit數值,作為視窗函數或callback函數的傳回值
UINT Win16中,16-bit無正負号,Win32中,32-bit無正負号
WNDPROC 32-bit
WORD 16-bit整數,無正負号
WPARAM 視窗函數的一個參數,Win16中16bits,Win32中32bits

MFC獨特的資料類型

資料類型 意義
POSITION 一個數值,代表collection對象(例如數組或連結清單)中的元素位置,常使用于MFC collection classes
LPCRECT 32-bit指針,指向一個不變的RECT結構

3. CWnd和HWnd

HWND是Windows系統中對所有視窗的一種辨別,即視窗句柄。這是一個SDK概念。   CWnd是MFC類庫中所有視窗類的基類。微軟在MFC中将所有視窗的通用操作都封裝到了這個類中,如:ShowWindow等等,同時它也封裝了視窗句柄即m_hWnd成員。

由HWnd得到CWnd*:

CWnd wnd;

HWnd hWnd;

wnd.Attach(hWnd);

通常一個視窗資源已經和一個CWnd類的對象關聯起來的,由于一般來說這個類是自己建立的,是以自然知道怎麼得到指向這個類的指針。由CWnd擷取HWnd就容易多了,因為它的一個成員m_hWnd就是所對應視窗的句柄。

wnd->m_hWnd;

這裡再提一下封裝的概念:MFC是對Windows API的封裝,使用OOP是對Windows程式設計的另外一種觀點。MFC認為一個程式是一個對象(CWinApp),該對象管理視窗(CView或 CDialog和CFrameWnd)以及該程式所使用的資料(CDocument)。CWnd是CView和CDialog的父類,主要負責管理程式生成的視窗。由于一個程式擁有确定的視窗(Windows為該程式生成需要的視窗),是以在CWnd的構造函數中已經初始化m_hWnd為該視窗句柄。

4. <>和""

.#include <xxx.h>與#include "xxx.h"的差別:

<>不查找運作時目錄,""查找運作時目錄。

5.強制類型轉換

如果CFish從CAnimal派生而來。則可以将魚的對象轉換為CAnimal的對象,而反之則不行。從現實中了解也是正常的,魚可以是動物,而動物卻不是魚。再如int可以強制轉換成char型。而反之則出錯。

6.NULL和0

什麼時候用NULL,什麼時候用0?

對指針指派時用NULL,對變量指派時用0。

繼續閱讀