寫任何一個函數當然應該有一個該函數的入口了。我們知道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
);
接下來是WinMainint 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;
}
到此,所有程序結束,讀者也可以試著自己寫一個類似的程序,加入更多的響應 功能。這裡就到此結束。希望對大家了解windows程序有所幫助。