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。