完全可以不用。MFC僅僅是對?Windows?API?的壹次面向C++語言的封裝,可用可不用。只不過那樣是自找麻煩罷了。我就舉個不用MFC編寫圖形用戶界面的例子,就是所謂?Windows?SDK?編程。
以下代碼不含絲毫MFC,在Visual?C++?6.0測試通過,能夠出現壹個正規的Windows窗口。
#include?<tchar.h>#include?<windows.h>
/*?這個函數由Windows內部函數DispatchMessage()調用?*/?
LRESULT?CALLBACK?WindowProcedure?(HWND?hWnd,?UINT?message,?WPARAM?wParam,?LPARAM?lParam)
{
HDC?hdc;
PAINTSTRUCT?ps;
RECT?rect;
switch?(message)/*?處理信息?*/
{
case?WM_DESTROY:?
PostQuitMessage?(0);/*?發送WM_QUIT到消息隊列?*/
break;
case?WM_PAINT:
hdc?=?BeginPaint?(hWnd,?&ps);
GetClientRect?(hWnd,?&rect);
DrawText?(hdc,?TEXT("Hello,?Windows?NT!"),?-1,?&rect,?DT_SINGLELINE?|?DT_CENTER?|?DT_VCENTER);
EndPaint?(hWnd,?&ps);
break;
default:/*?不處理的消息?*/?
return?DefWindowProc?(hWnd,?message,?wParam,?lParam);
}
return?0;
}
/*?下面是主函數?*/
int?WINAPI?_tWinMain(HINSTANCE?hThisInstance,?HINSTANCE?hPrevInstance,?LPTSTR?lpCmdLine,?int?nFunsterStil)
{
HWND?hWnd;?/*?這是窗口的句柄?*/
MSG?messages;/*?應用程序的消息保存在這裏?*/
WNDCLASSEX?wincl;/*?窗口類的數據結構?*/
TCHAR?szClassName[?]?=?TEXT("WindowsApp");?/*?窗口類的類名?*/
/*?窗口結構?*/
wincl.hInstance?=?hThisInstance;
wincl.lpszClassName?=?szClassName;
wincl.lpfnWndProc?=?WindowProcedure;/*?這個函數由Windows操作系統調用?*/
wincl.style?=?CS_DBLCLKS;?/*?獲取雙擊指令?*/
wincl.cbSize?=?sizeof?(WNDCLASSEX);
/*?使用默認圖標和鼠標指針?*/
wincl.hIcon?=?LoadIcon?(NULL,?IDI_APPLICATION);
wincl.hIconSm?=?LoadIcon?(NULL,?IDI_APPLICATION);
wincl.hCursor?=?LoadCursor?(NULL,?IDC_ARROW);
wincl.lpszMenuName?=?NULL;?/*?沒有菜單?*/
wincl.cbClsExtra?=?0;/*?窗口類後面沒有多余的字節?*/
wincl.cbWndExtra?=?0;/*?結構或者窗口實例?*/
/*?使用窗口的默認顏色作為窗口的背景色?*/
wincl.hbrBackground?=?(HBRUSH)?COLOR_BACKGROUND;
/*?註冊窗口類。如果註冊失敗,那麽就退出程序?*/
if?(!RegisterClassEx?(&wincl))
return?0;
/*?窗口類已被註冊。創建它的程序?*/
hWnd?=?CreateWindowEx?(
0,
szClassName,/*?類名?*/
TEXT("Windows?App"),/*?窗口標題欄的文字?*/
WS_OVERLAPPEDWINDOW,?/*?默認窗口?*/
CW_USEDEFAULT,?/*?窗口左上角的位置?*/
CW_USEDEFAULT,?/*?窗口右下角的位置?*/
544,?/*?窗口寬度(以“像素”位單位)?*/
375,?/*?窗口高度(以“像素”位單位)?*/
HWND_DESKTOP,?/*?窗口是桌面的子窗口?*/
NULL,/*?該窗口無菜單?*/
hThisInstance,?/*?程序實例的句柄?*/
NULL?/*?沒有窗口創建的數據?*/
);
/*?顯示窗口?*/
ShowWindow?(hWnd,?nFunsterStil);
/*?重繪窗口?*/
UpdateWindow(hWnd);
/*?運行消息循環。循環到GetMessage()函數返回0?*/
while?(GetMessage?(&messages,?NULL,?0,?0))
{
/*?把虛擬信息翻譯成字符信息?*/
TranslateMessage(&messages);
/*?發送信息到窗口過程?*/
DispatchMessage(&messages);
}
/*?返回PostQuitMessage()函數的返回值?*/
return?messages.wParam;
}
運行結果如下: