在學完c++基礎知識後,我試着看了一下windows編程的知識,大學時學過一些基本概念。所以現在學起來不會太費力。這個文章就當做一個入門吧。
我們做任何系統的開發,都離不開框架,框架都會有一個框架模型。比如現在web領域編程中比較流行的SSH框架,其模型就是MVC架構,我們在框架的基礎上編程,無外乎是兩點,一點是框架的API,一點是在框架特定的接口下編程。我們主要做這兩點,其他都由框架來調用,這就是IOC和AOP中的原理:“你不用來找我,我來找你”。
windows也不例外,我們也完全可以理解爲一個框架,只是這個框架太複雜了,模型太多了,。但是有一個最最基礎的模型,就是消息驅動模型。windows應用程序的處理過程是這樣的:當操作鼠標鍵盤或其他外設時,windows會自動產生一個對應的消息,將其消息放置在應用程序的消息隊列中,應用程序將取出消息,並對消息作出響應,在作出響應的時候,應用程序會調用windows的API來實現特定的功能。這就是一個基本的過程了。
說這麼多,我們直接先寫個例子吧,作爲一個helloworld的實例。
1 新建Win32 Application的空項目,然後再新建一個cpp源文件,源文件中包含的代碼如下:
#include <windows.h>
#include <stdio.h>
LRESULT CALLBACK WinProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
WNDCLASS wndclass;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
wndclass.hCursor = LoadCursor(NULL,IDC_ARROW );
wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION);
wndclass.hInstance = hInstance;
wndclass.lpfnWndProc = WinProc;
wndclass.lpszClassName = "bplead";
wndclass.lpszMenuName = NULL;
wndclass.style = CS_HREDRAW | CS_VREDRAW;
RegisterClass(&wndclass);
HWND hwnd;
hwnd = CreateWindow("bplead","bplead",WS_OVERLAPPEDWINDOW,0,0,800,600,NULL,NULL,hInstance,NULL);
ShowWindow(hwnd, SW_SHOWNORMAL);
UpdateWindow(hwnd);
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WinProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
switch(uMsg)
{
case WM_CHAR:
char szChar[20];
sprintf(szChar, "char code is %d", wParam);
MessageBox(hwnd, szChar, "char", 0);
break;
/**case WM_LBUTTONDOWN:
break;**/
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
TextOut(hdc, 0, 0, "HelloWorld!",11);
EndPaint(hwnd, &ps);
break;
case WM_CLOSE:
if(IDYES == MessageBox(hwnd,"close window?","",MB_YESNO))
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
return 0;
}
2 看看運行效果:
3 HelloWorld的例子就完成了,雖然複製粘貼代碼很簡單,但是裏面的知識很多。我想放在下一篇文章裏面詳細講解。一篇文章說的多了,是個很恐怖的事情。