建立一個基本的win32視窗
#include<Windows.h>
#include<windowsx.h>
#include <mmSystem.h>
// 建立一個基本的win32視窗
BOOL InitWindow(HINSTANCE hInstance, int nCmdshow);
LRESULT CALLBACK WinProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance, // 當前例項控制代碼
HINSTANCE hPrevInstance, // 前一個例項控制代碼
PSTR szCmdLine, // 命令字元行
int iCmdShow) { // 視窗顯示方式
MSG msg;
//建立主視窗
if (!InitWindow(hInstance, iCmdShow))
return FALSE;
//進入訊息迴圈:從該應用的訊息佇列中撿取訊息
//送到訊息處理過程,當撿取到WM_QUIT訊息時,退出訊息迴圈。
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
static BOOL InitWindow //建立視窗
(HINSTANCE hInstance, int iCmdShow) {
static TCHAR szAppName[] = TEXT("My First Win"); // 應用程式名
HWND hwnd; // 視窗控制代碼
WNDCLASS wc; //視窗類結構
//填充視窗類結構
wc.style = CS_VREDRAW | CS_HREDRAW;
wc.lpfnWndProc = WinProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(hInstance, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = GetStockBrush(WHITE_BRUSH);
wc.lpszClassName = szAppName;
wc.lpszMenuName = NULL;
//註冊視窗類
if (!RegisterClass(&wc)) {
MessageBox(NULL, TEXT("註冊視窗類失敗!"), szAppName, MB_ICONERROR);
return 0;
}
//建立主視窗
hwnd = CreateWindow(szAppName, // 視窗類名稱
TEXT("一個基本的Win32程式"), // 視窗標題
WS_OVERLAPPEDWINDOW, // 視窗風格
100, // 視窗位置座標x
100, // 視窗位置座標y
400, // 視窗寬度
300, // 視窗高度
NULL, // 父視窗控制代碼
NULL, // 選單控制代碼
hInstance, // 應用程式例項控制代碼
NULL); // 視窗建立例項指標
if (!hwnd) return FALSE;
// 顯示並更新視窗
ShowWindow(hwnd, iCmdShow);
UpdateWindow(hwnd);
return TRUE;
}
LRESULT CALLBACK WinProc //處理主視窗資訊
(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
switch (message) {
case WM_CREATE: //建立資訊
PlaySound(TEXT("My First Win.wav"), NULL, SND_ASYNC | SND_FILENAME);
return 0;
case WM_KEYDOWN: //擊鍵訊息
switch (wParam)
{
case VK_ESCAPE:
MessageBox(hWnd, TEXT("ESC鍵按下了!"), TEXT("鍵盤"), MB_OK);
break;
}
return 0;
case WM_RBUTTONDOWN: //滑鼠訊息
MessageBox(hWnd, TEXT("滑鼠右鍵按下了!"), TEXT("滑鼠"),
MB_OK);
return 0;
case WM_PAINT: //視窗重畫訊息
hdc = BeginPaint(hWnd, &ps); //取得裝置環境控制代碼
GetClientRect(hWnd, &rect); //視窗客戶區矩形
SetTextColor(hdc, RGB(50, 50, 255)); //設定文字顏色
DrawText(hdc, TEXT("歡迎使用《Windows 環境與程式設計基礎》"),
-1, &rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER); //輸出文字
EndPaint(hWnd, &ps); //釋放資源
return 0;
case WM_DESTROY: //退出訊息
PostQuitMessage(0); //呼叫退出函式
return 0;
}
//呼叫預設訊息處理過程
return DefWindowProc(hWnd, message, wParam, lParam);
}//函式WinProc結束