// 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);
}