windows編程之helloworld

        在學完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的例子就完成了,雖然複製粘貼代碼很簡單,但是裏面的知識很多。我想放在下一篇文章裏面詳細講解。一篇文章說的多了,是個很恐怖的事情。

發佈了59 篇原創文章 · 獲贊 10 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章