標籤:對象 關閉 app break cmd track UI content callback
Windows應用程式:
WinMain函數(入口函數):
1。
設計表單類,注冊表單類。WNDCLASS
2。
建立表單,顯示及更新表單。
3。
訊息迴圈。
表單過程函數(回呼函數):WindowProc
PS:Dos程式入口函數為main,Windows程式入口為WinMain,都是由系統直接調用。
windows程式執行過程
#include<windows.h>#include<stdio.h>LRESULT CALLBACK WinSunProc( //表單過程函數(回呼函數)聲明HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);int WINAPI WinMain( //WinMain函數。windows應用程式的入口HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){WNDCLASS wndcls; //執行個體化一個表單類對象,並設定各個屬性wndcls.cbClsExtra = 0;wndcls.cbWndExtra = 0;wndcls.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);wndcls.hCursor = LoadCursor(NULL,IDC_CROSS);wndcls.hIcon = LoadIcon(NULL,IDI_ERROR);wndcls.hInstance = hInstance;wndcls.lpfnWndProc = WinSunProc;wndcls.lpszClassName = "hepengtao";wndcls.lpszMenuName = NULL;wndcls.style = CS_HREDRAW | CS_VREDRAW;RegisterClass(&wndcls); //注冊表單類HWND hwnd;hwnd = CreateWindow("hepengtao","表單標題",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 訊息時返回0{TranslateMessage(&msg);//按下鍵盤按鍵時。系統得到 WM_KEYDOWN 和 WM_KEYUP 訊息。經過該函數轉變為 WM_CHAR 訊息DispatchMessage(&msg); //將得到的訊息傳遞給回呼函數}return 0;}LRESULT CALLBACK WinSunProc(//定義表單過程函數(回呼函數)HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam){switch(uMsg){case WM_CHAR: //鍵盤按下字母后,發送 WM_CHAR 訊息char szChar[20];sprintf(szChar,"char is %d",wParam);MessageBox(hwnd,szChar,"彈窗標題",0);break;case WM_LBUTTONDOWN: //滑鼠左鍵按下後。發送 WM_LBUTTONDOWN 訊息MessageBox(hwnd,"mouse clicked","彈窗標題",0);HDC hdc;hdc = GetDC(hwnd);TextOut(hdc,0,50,"I am hepengtao.",strlen("I am hepengtao."));ReleaseDC(hwnd,hdc);break;case WM_PAINT: //表單重繪時,發送 WM_PAINT 訊息HDC hDC;PAINTSTRUCT ps;hDC = BeginPaint(hwnd,&ps);TextOut(hDC,0,0,"Hello,world!",strlen("Hello,world!"));EndPaint(hwnd,&ps);break;case WM_CLOSE: //關閉button按下後,發送 WM_CLOSE 訊息if(IDYES == MessageBox(hwnd,"確定要關閉表單?" ,"彈窗標題",MB_YESNO)){DestroyWindow(hwnd); //銷毀表單,並發送 WM_DESTORY 訊息}break;case WM_DESTROY: //運行DestoryWindow()函數時。發送 WM_DESTORY 訊息PostQuitMessage(0); //程式請求退出,發送 WM_QUIT 訊息break;default:return DefWindowProc(hwnd,uMsg,wParam,lParam); //使用者不關心的訊息,由作業系統預設處理}return 0;}
Windows程式執行過程