#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结束