#include<Windows.h>
#pragma comment(lib,"winmm")
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
/*szCmdLine 中sz表示“以零结束的字符串”
iCmdShow 中i表示“整型”
*/
{
static TCHAR szAppName[] = TEXT("HelloWin");
HWND hwnd;
MSG msg; //消息结构
WNDCLASS wndclass; //窗口类结构
/*
typedef struct tagWNDCLASSA {
UINT style; 类风格
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCSTR lpszMenuName;
LPCSTR lpszClassName;
} WNDCLASSA, *PWNDCLASSA, *NPWNDCLASSA, *LPWNDCLASSA;
*/
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
//下面两行用于在类结构和Windows内部维护的窗口结构中预留一些额外的空间
//应用程序可以按照需求来使用这些额外的空间
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0; //表示应用程序的实力句柄
wndclass.hInstance = hInstance;
//下面这行为所以基于该窗口类的窗口设定一个图标
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); //LoadIcon:加载图标,以供程序使用
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); //LoadCursor 加载鼠标光标,以供程序使用
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //获取一个图形形象,
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szAppName;
if (!RegisterClass(&wndclass)) //RegisterClass 为应用程序注册一个窗口类
{
MessageBox(NULL, TEXT("This program requires Windows NT!"), szAppName, MB_ICONERROR);
//MessageBox:显示消息框
return 0;
}
//基于窗口类创建一个窗口
hwnd = CreateWindow(szAppName, //窗口类名称
TEXT("The Hello Program"), //窗口标题
WS_OVERLAPPEDWINDOW, //窗口风格
CW_USEDEFAULT, //最初的x位置
CW_USEDEFAULT, //最初的y位置
CW_USEDEFAULT, //初始x方向尺寸
CW_USEDEFAULT, //初始y方向尺寸
NULL, //父窗口句柄
NULL, //窗口菜单句柄
hInstance, //程序实例句柄
NULL); //创建参数
ShowWindow(hwnd, iCmdShow); //ShowWindow在屏幕中显示窗口
UpdateWindow(hwnd); //UpdateWindow指示窗口对其自身重绘
while (GetMessage(&msg, NULL, 0, 0)) //GetMessage从消息队列获取消息
{
TranslateMessage(&msg); //TranslateMessage翻译一些键盘消息
DispatchMessage(&msg); //DispatchMessage将消息发送给窗口过程
}
/*
typedef struct tagMSG {
HWND hwnd; 消息所指向的窗口的句柄
UINT message; 消息标识符
WPARAM wParam; 一个32位的消息参数
LPARAM lParam; 一个32位的消息参数
DWORD time; 消息进入队列的时间
POINT pt; 消息进入消息队列中时鼠标指针的位置坐标
DWORD lPrivate;
} MSG, *PMSG, *NPMSG, *LPMSG;
*/
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)//由Windows自身调用
{
HDC hdc;
PAINTSTRUCT ps; //绘制结构
RECT rect; //矩形结构
switch (message)
{
case WM_CREATE:
//PlaySound播放声音文件
PlaySound(TEXT("hellowin.mav"), NULL, SND_FILENAME | SND_ASYNC);
return 0;
//当窗口的客户区的部分或全部“无效”且必须“更新”时,应用程序将得到此通知
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps); //BeginPaint表明绘制开始
GetClientRect(hwnd, &rect); //GetClientRect获取窗口客户区的尺寸
//DrawText 显示一个文本字符串
DrawText(hdc, TEXT("Hello Windows 98!"), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
EndPaint(hwnd, &ps); //EndPaint结束窗口绘制
return 0;
case WM_DESTROY:
PostQuitMessage(0); //PostQuitMessage 将“退出”消息插入消息队列
return 0;
}
//所有窗口过程不进行处理的消息都必须传给名称为DefWindowProc的window函数,
//DefWindowProc的返回值必须从窗口过程返回,若不处理,其它的正常行为无法进行
return DefWindowProc(hwnd, message, wParam, lParam); //DefWindowProc执行默认的消息处理
}
HelloWin
最新推荐文章于 2024-07-16 15:00:52 发布