Windows 下简单的API程序设计(窗口创建)
目的
- 了解 windows操作系统应用程序开发的基本概念,win32 API函数、消息与事件驱动;
- 掌握WinMain函数的基本框架,窗口定义、窗口创建、消息循环及窗口过程函数;
创建步骤
- 设计一个窗口类
- 注册窗口类
- 创建窗口
- 显示及更新窗口
入口函数
int WINAPI WinMain(HINSTANCE hInstance, //应用程序的入口
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow //窗口显示的样式, 最大化,最小化
) {
//2)设计窗口类WNDCLASS(给成员变量赋值)
WNDCLASS w;
w.cbClsExtra = 0;
w.cbWndExtra = 0;
w.hbrBackground = CreateSolidBrush(RGB(255, 255, 255));
w.hCursor = LoadCursor(NULL, IDC_HAND);
w.hIcon = LoadIcon(NULL, IDI_APPLICATION);
w.hInstance = hInstance; //告诉主窗口正在使用的是哪个实例。
w.lpfnWndProc = DM; //调用消息处理函数
w.lpszClassName = TEXT("我的窗口"); //类的名字
w.lpszMenuName = NULL; //菜单
w.style = CS_HREDRAW | CS_VREDRAW;
//3)注册窗口类, 告诉系统窗口过程函数的入口地址
RegisterClass(&w);
//4)窗口类
HWND hWnd = CreateWindow(TEXT("我的窗口"), TEXT("我的窗口"),
WS_OVERLAPPEDWINDOW,
400, 400, 600, 400,
NULL, NULL, hInstance, NULL); //父窗口的句柄、主菜单的句柄、应用程序实例句柄
//5)显示和更新窗口
ShowWindow(hWnd, SW_SHOWNORMAL);
UpdateWindow(hWnd);
//6)消息循环
MSG msg;
//如果接受到WM_QUIT, 返回0, 退出; 如果出错,不退出
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);//翻译
DispatchMessage(&msg);//给操作系统分发消息
}
return msg.wParam;
}
消息处理函数
LRESULT CALLBACK DM(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
switch (Msg) {
case WM_LBUTTONDOWN:
MessageBox(hWnd, TEXT("路过的假面骑士"), TEXT("回答"), MB_OK);
break;
case WM_RBUTTONDOWN:
MessageBox(hWnd, TEXT("没有梦想的咸鱼"), TEXT("回答"), MB_OK);
break;
case WM_CLOSE: {
if (IDYES == MessageBox(hWnd, TEXT( "确认退出吗?"), TEXT( "是否关闭"), MB_YESNO))
DestroyWindow(hWnd);
break;
}
case WM_PAINT: { //绘图
PAINTSTRUCT ps;
HDC dc = BeginPaint(hWnd, &ps);
TCHAR * p = L"我是谁?";
TextOutW(dc, 250, 150, p, wcslen(p));
EndPaint(hWnd, &ps);
break;
}
case WM_DESTROY:
PostQuitMessage(0); //WM_QUIT, 给主函数返回 msg.wParam
break;
default:
return DefWindowProc(hWnd, Msg, wParam, lParam);
}
return 0;
}
程序运行结果
主窗口
鼠标左键
鼠标右键
关闭