1. 程式人生 > >Windows API程式設計(二)Hello World程式

Windows API程式設計(二)Hello World程式

程式碼如下:


#include "Windows.h"

//處理WM_PAINT訊息
void OnPaint(HWND hWnd)
{
    //獲取裝置上下文控制代碼
    PAINTSTRUCT ps;
    HDC hDC = BeginPaint(hWnd, &ps);
    //獲取視窗客戶去矩形
    RECT rcClient;
    GetClientRect(hWnd, &rcClient);
    //在視窗客戶區內顯示文字
    DrawText(hDC, "Hello , World!", -1, &rcClient, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
    //釋放裝置上下文
EndPaint(hWnd, &ps); } //主視窗過程函式 LRESULT CALLBACK MainWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { case WM_PAINT: //視窗繪製訊息 { OnPaint(hWnd); }break
; case WM_DESTROY: //視窗銷燬訊息 { PostQuitMessage(0); //投遞WM_QUIT訊息 return 0; }break; } //對任何訊息都不感興趣,預設方式處理,直接交給核心 return DefWindowProc(hWnd, uMsg, wParam, lParam); } //註冊視窗類 ATOM InitApplication(HINSTANCE hInstance) { WNDCLASS wc = {0
}; //視窗類的風格, 描述一些共性的資訊 wc.style = CS_HREDRAW | CS_VREDRAW; //主視窗過程函式指標 wc.lpfnWndProc/*是一個函式指標,專門用來處理物件訊息的函式*/ = MainWndProc; //視窗類附加資料位元組數 自己定義的資料,指定位元組長度 wc.cbClsExtra = 0; //視窗附加資料位元組數,類附加資料全員共享,視窗附加資料是一個視窗一套 wc.cbWndExtra = 0; //應用程式的例項控制代碼 wc.hInstance = hInstance;//此處使用了函式引數 //指定視窗圖示控制代碼 wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); //視窗游標控制代碼 wc.hCursor = LoadCursor(NULL, IDC_ARROW); //背景 wc.hbrBackground = GetSysColorBrush(COLOR_WINDOW); //指定選單名字 wc.lpszMenuName = NULL;//沒有選單 //類名 wc.lpszClassName = "MAIN"; //註冊結構,將結構複製進核心 return RegisterClass(&wc); } //建立、顯示並重新整理視窗 BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { //建立視窗 HWND hWnd = CreateWindow( "MAIN", //視窗類的類名 "WinHello", //視窗的標題 WS_OVERLAPPEDWINDOW, //視窗的風格 描述個性化的特徵 //視窗的位置和大小 CW_USEDEFAULT, //視窗左上角水平座標 CW_USEDEFAULT, //視窗左上角垂直座標 CW_USEDEFAULT, //視窗寬度 CW_USEDEFAULT, //視窗高度 右下角,單位:畫素 NULL, //父視窗控制代碼 NULL, //選單控制代碼 hInstance, //應用程式實力控制代碼 NULL //擴充套件資料 ); if(! hWnd) { return FALSE; } //顯示視窗 ShowWindow(hWnd, nCmdShow); //重新整理視窗 UpdateWindow(hWnd); return TRUE; } int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { //註冊視窗類 if(! InitApplication(hInstance)) { return 0; } //建立、顯示並重新整理視窗 if(! InitInstance(hInstance, nCmdShow)) { return 0; } //訊息泵,即:訊息迴圈 MSG msg = {0}; while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); //間接呼叫視窗過程函式 } return 0; }

在Windows XP系統Visual C++6.0IDE環境下執行結果如下:


這裡寫圖片描述


Windows的API編寫窗體程式非常繁雜。以上帶面可以預見。