當前位置:編程學習大全網 - 編程語言 - windows編程基礎 利用WIN32API編寫WinMain函數,完成窗口類的註冊,窗口的創建,顯示,更新,並完成消息循

windows編程基礎 利用WIN32API編寫WinMain函數,完成窗口類的註冊,窗口的創建,顯示,更新,並完成消息循

///////////////////////////////////////////////////////////////

// 04FirstWindow.cpp文件

#include <stdio.h>

#include "stdafx.h"

// 窗口函數的函數原形

LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);

int APIENTRY WinMain(HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR lpCmdLine,

int nCmdShow)

{

char szClassName[] = "MainWClass";

WNDCLASSEX wndclass;

// 用描述主窗口的參數填充WNDCLASSEX結構

wndclass.cbSize = sizeof(wndclass); // 結構的大小

wndclass.style = CS_HREDRAW|CS_VREDRAW; // 指定如果大小改變就重畫

wndclass.lpfnWndProc = MainWndProc; // 窗口函數指針

wndclass.cbClsExtra = 0; // 沒有額外的類內存

wndclass.cbWndExtra = 0; // 沒有額外的窗口內存

wndclass.hInstance = hInstance; // 實例句柄

wndclass.hIcon = ::LoadIcon(NULL,

IDI_APPLICATION); // 使用預定義圖標

wndclass.hCursor = ::LoadCursor(NULL,

IDC_ARROW); // 使用預定義的光標

wndclass.hbrBackground = (HBRUSH)

::GetStockObject(WHITE_BRUSH); // 使用白色背景畫刷

wndclass.lpszMenuName = NULL; // 不指定菜單

wndclass.lpszClassName = szClassName ; // 窗口類的名稱

wndclass.hIconSm = NULL; // 沒有類的小圖標

// 註冊這個窗口類

::RegisterClassEx(&wndclass);

// 創建主窗口

HWND hwnd = ::CreateWindowEx(

0, // dwExStyle,擴展樣式

szClassName, // lpClassName,類名

"My first Window!", // lpWindowName,標題

WS_OVERLAPPEDWINDOW, // dwStyle,窗口風格

CW_USEDEFAULT, // X,初始 X 坐標

CW_USEDEFAULT, // Y,初始 Y 坐標

CW_USEDEFAULT, // nWidth,寬度

CW_USEDEFAULT, // nHeight,高度

NULL, // hWndParent,父窗口句柄

NULL, // hMenu,菜單句柄

hInstance, // hlnstance,程序實例句柄

NULL) ; // lpParam,用戶數據

if(hwnd == NULL)

{

::MessageBox(NULL, "創建窗口出錯!", "error", MB_OK);

return -1;

}

// 顯示窗口,刷新窗口客戶區

::ShowWindow(hwnd, nCmdShow);

::UpdateWindow(hwnd);

// 從消息堆中取出消息

MSG msg;

while(::GetMessage(&msg,NULL, 0, 0))

{

// 轉化鍵盤消息

::TranslateMessage(&msg);

// 將消息發送到相應的窗口函數

::DispatchMessage(&msg);

}

// 當GetMessage返回0時程序結束

return msg.wParam;

}

LRESULT CALLBACK MainWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

{

char szText[] = "最簡單的窗口程序!";

switch (message)

{

case WM_PAINT: // 窗口客戶區需要重畫

{

HDC hdc;

PAINTSTRUCT ps;

// 使無效的客戶區變的有效,並取得設備環境句柄

hdc = ::BeginPaint (hwnd, &ps) ;

// 顯示文字

::TextOut(hdc, 10, 10, szText, strlen(szText));

::EndPaint(hwnd, &ps);

return 0;

}

case WM_CHAR:

{

char szChar[20];

sprintf(szChar,"char is %d",wParam);

MessageBox(hwnd,szChar,"Windows",MB_OK);

break;

}

case WM_LBUTTONDOWN:

{

MessageBox(hwnd,"mouse clicked","message",0);

HDC hdc;

hdc=GetDC(hwnd);

TextOut(hdc,0,50,"Windows program",strlen("Windows program"));

ReleaseDC(hwnd,hdc);

break;

}

case WM_CLOSE:

if(IDYES==MessageBox(hwnd,"是否退出程序?","Windows",MB_YESNO))

{

DestroyWindow(hwnd);

}

case WM_DESTROY: // 正在銷毀窗口

// 向消息隊列投遞壹個WM_QUIT消息,促使GetMessage函數返回0,結束消息循環

::PostQuitMessage(0) ;

return 0 ;

}

// 將我們不處理的消息交給系統做默認處理

return ::DefWindowProc(hwnd, message, wParam, lParam);

}

  • 上一篇:怎樣在自己的主頁上制造雪花飄的效果
  • 下一篇:可以快速設計電路圖的軟件有哪些?
  • copyright 2024編程學習大全網