Windows應用程序入口函數編寫

轉自 http://www.vckbase.com/document/viewdoc/?id=1724

覺得對於理解MFC有作用,下面的東西都是被MFC封裝的。

寫任何一個函數應該有一個該函數的入口了。我們知道c語言裏的入口函數是main()函數,那麼在寫Windows應用程序也是main()嗎?回答當然不是了。我們用的是WinMain()函數,不過我們在寫MFC程序的時候好象沒有看到該函數,其實這是微軟爲了幫助我們快速寫一個基於Windows應用程序,而把它封裝起來了,當然我們也是可以找到的。在這裏,我們試着自己編寫一個WinMain()函數。好了,我們進入主題吧!首先,我們要包含一些庫。

#include <windows.h>
#include <stdio.h>
還有,我們應該學會使用msdn快速查找到我們所需要的信息。
這裏,windows是基於消息的應用程序,我們應該先編寫一個消息響應函數,即一個回調函數。
LRESULT CALLBACK WinMYProc(
  HWND hWnd,      // handle to window
  UINT uMsg,      // message identifier
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
);
接下來是WinMain
int WINAPI WinMain(
  HINSTANCE hInstance,      // handle to current instance
  HINSTANCE hPrevInstance,  // handle to previous instance
  LPSTR lpCmdLine,          // command line
  int nCmdShow              // show state
)
{
WNDCLASS wndcls;//註冊窗口類
wndcls.cbClsExtra=0;
	wndcls.cbWndExtra=0;
	wndcls.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//窗口畫刷
	wndcls.hCursor=LoadCursor(NULL,IDC_ARROW);//鼠標
	wndcls.hIcon=LoadIcon(NULL,IDI_WINLOGO);//圖標
	wndcls.hInstance=hInstance;//窗口實例
	wndcls.lpfnWndProc=WinMYProc;//窗口函數
	wndcls.lpszClassName="BEYOND";//窗口類名
	wndcls.lpszMenuName=NULL;//菜單名(這裏爲空)
	wndcls.style=CS_HREDRAW | CS_VREDRAW;//窗口風格(水平重繪和垂直重繪)
	RegisterClass(&wndcls);//註冊窗口

//註冊完窗口,接着是創建和顯示窗口了
HWND hWnd;
hWnd=CreateWindow("BEYOND",lovebeyond",WS_OVERLAPPEDWINDOW,
		0,0,600,400,NULL,NULL,hInstance,NULL);
	ShowWindow(hwnd,SW_SHOWNORMAL);//顯示
	UpdateWindow(hWnd);//更新

//接下來是消息循環了
	MSG msg;
	while(GetMessage(&msg,NULL,0,0))//當不爲WM_QUIT時,繼續消息循環
	{
		TranslateMessage(&msg);//用於翻譯消息
		DispatchMessage(&msg);//發送消息
	}
	return msg.wParam;//返回一個參數
}


//消息響應函數
LRESULT CALLBACK WinMYProc(
  HWND hWnd,      // handle to window
  UINT uMsg,      // message identifier
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
)
{
	switch(uMsg)
	{
	case WM_CHAR://鍵盤消息
		char szChar[20];
		sprintf(szChar,"char is %d",wParam);
		MessageBox(hWnd,szChar,"char",0);
		break;
	case WM_LBUTTONDOWN://鼠標左鍵按下
		MessageBox(hWnd,"mouse clicked","message",0);
		break;
	case WM_PAINT://窗口重繪消息
		HDC hDC;
		PAINTSTRUCT ps;
		hDC=BeginPaint(hWnd,&ps);
		TextOut(hDC,0,0,"lovebeyond",strlen("lovebeyond"));
		EndPaint(hwnd,&ps);
		break;
	case WM_CLOSE://關閉消息
		if(IDYES==MessageBox(hWnd,"想要結束嗎?","message",MB_YESNO))
		{
			DestroyWindow(hWnd);
		}
		break;
	case WM_DESTROY://銷燬窗口消息
		PostQuitMessage(0);
		break;
	default://默認窗口消息處理
		return DefWindowProc(hWnd,uMsg,wParam,lParam);
	}
	return 0;
}
到此,所有程序結束,讀者也可以試着自己寫一個類似的程序,加入更多的響應功能。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章