怎麼說呢,如果說是MFC倒不如說是MFC Windows應用程序(他們到底是什麼關係,網上是這樣認爲的:
Windows程序設計一般是指用c語言編寫windows應用程序,或叫做win32編程,MFC程序設計是利用C++,以MFC爲基礎編寫windows應用程序;VC是一個開發工具,在這個開發工具裏,可以進行win32編程和MFC程序設計)
首先我們要知道windows應用程序是由Windows系統和程序主函數及與其相關的事件消息處理函數組成的,我們需要編寫的就是主函數和消息處理函數。主函數的作用就是用來創建窗口,接受用戶事件並且將事件消息發送給系統(注意這裏不同於Java的事件監聽器);事件處理函數就是用來處理各種的反應,並且把處理後的結果返回給主函數。這兩者
(主函數和事件處理函數)之間的通信就是通過Windows系統來實現的。我們還有知道有一個基本概念就是:句柄,
這個句柄是什麼呢?很簡單的說就是一個我可以用來調用微軟封裝好之後的所有函數。下面是一個簡單的Windows程序,當鼠標左鍵單擊程序窗口的用戶區時,計算機的揚聲器會發出“叮”的聲音。
#include "stdafx.h"
#include "Windows.h"
#include<windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE PreFetchCacheLine,LPSTR lpCmdLine,int nCmdShow)
{
HWND hwnd; //定義窗口句柄
MSG msg; //定義一個用來存儲消息的變量
char lpszClassName[]="窗口";
WNDCLASS wc;
wc.lpfnWndProc=WndProc;
wc.style=0;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hInstance=hInstance;
wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc.hCursor=LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszMenuName=NULL; //窗口沒有菜單
wc.lpszClassName=lpszClassName;
RegisterClass(&wc); //註冊窗口類型
//創建窗口
hwnd=CreateWindow(lpszClassName, //窗口類的名稱
"Windows", //窗口實例的標題
WS_OVERLAPPEDWINDOW, //窗口的風格
120, //窗口左上角位置座標值x
50, //窗口左上角位置座標值y
800,//寬度
600,//窗口的高度
NULL,//父菜單的句柄
NULL,//主菜單的句柄
hInstance,//應用程序實例句柄
NULL);//該值通常爲NULL
ShowWindow(hwnd,nCmdShow); //顯示窗口
UpdateWindow(hwnd);
while (GetMessage(&msg,NULL,0,0)) //消息循環
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch (message)
{ //鼠標左鍵按下消息
case WM_LBUTTONDOWN:
{
MessageBeep(0); //可以發出聲音的API函數
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
return 0;
}