win32框架
2024-09-03 20:24:00
win32的框架
1.入口函数 2.窗口注册类信息 3.窗口创建 4。显示窗口 5.更新窗口 6.消息循环 7.入口函数结束
WNDCLASSEX wcex;窗口类结构
wcex.cbSize = sizeof(WNDCLASSEX);//结构内存大小
//类风格wcex.style CS_HREDRAW 水平刷新 CS_VREDRAW垂直刷新 CS_DBLCLKS 窗体鼠标双击响应事件
// 函数: MyRegisterClass()
//
// 目的: 注册窗口类。
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
//窗口类结构
WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX);//结构内存大小
//类风格wcex.style CS_HREDRAW 水平刷新 CS_VREDRAW垂直刷新 CS_DBLCLKS 窗体鼠标双击响应事件
wcex.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
wcex.lpfnWndProc = WndProc;//消息回调函数
wcex.cbClsExtra = ;//类的额外信息
wcex.cbWndExtra = ;//窗口的额外信息
wcex.hInstance = hInstance;//窗口的实例句柄
wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_CLASS02));//图标
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);//光标
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+);//窗体的背景颜色
wcex.lpszMenuName = MAKEINTRESOURCE(IDC_CLASS02);//窗体的菜单
wcex.lpszClassName = szWindowClass;//窗口类名
wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));//小图标 return RegisterClassEx(&wcex);//系统函数返回一个系统的注册窗口类的函数调用
}
创建主
//
// 函数: InitInstance(HINSTANCE, int)
//
// 目的: 保存实例句柄并创建主窗口
//
// 注释:
//
// 在此函数中,我们在全局变量中保存实例句柄并
// 创建和显示主程序窗口。
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;//窗口句柄 hInst = hInstance; // 将实例句柄存储在全局变量中 //创建窗口
hWnd = CreateWindow(szWindowClass,//窗口类名 类名必须和注册名一致否则创建不成功
_T("第一个Windows窗口")/*szTitle*/,//窗口标题名
//WS_OVERLAPPEDWINDOW,窗口风格
WS_OVERLAPPED | WS_SYSMENU | WS_MINIMIZEBOX,
/*
WS_OVERLAPPED:用于产生一个叠层窗口,都有标题栏和边框
WS_CAPTION:有标题栏的窗口
WS_SYSMENU:创建一个标题栏上具有系统菜单的窗口,需要ws_caption一起使用
WS_MINIMAZEBOX:创建具有最小化按钮窗口,必须有ws_system类型
WS_MAXIMIZBOX:创建具有最大化按钮的窗口,必须有ws_system类型。
WS_OVERLAPPEDWINDOW:创建有标题栏,系统菜单最大化最小化窗口
WS_POPUP - 弹出式
WS_POPUPWINDOW - 边框、弹出式、系统菜单
WS_SIZEBOX - 带尺寸框的粗边框
WS_SYSMENU - 系统菜单
*/
CW_USEDEFAULT,, //窗口的左上角x,y坐标,注意:如果x坐标给的是CW_USEDEFAULT,y坐标给0表示去匹配x坐标(单位为像素)
CW_USEDEFAULT, ,//窗口的宽高,同上
NULL,//父窗口句柄
NULL,//菜单句柄,如果值为null,表示默认使用注册时加载的菜单,如果不为null,创建窗口时将用这个菜单替换掉注册时菜单
hInstance,//窗口实例句柄
NULL);//保留参数 if (!hWnd)
{
return FALSE;
} ShowWindow(hWnd, nCmdShow);//显示窗口
UpdateWindow(hWnd);//更新窗口 return TRUE;
}
处理主窗口消息
// 函数: WndProc(HWND, UINT, WPARAM, LPARAM)
//
// 目的: 处理主窗口的消息。
//
// WM_COMMAND - 处理应用程序菜单
// WM_PAINT - 绘制主窗口
// WM_DESTROY - 发送退出消息并返回
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc; switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// 分析菜单选择:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: 在此添加任意绘图代码...
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage();
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return ;
} // “关于”框的消息处理程序。
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam);
switch (message)
{
case WM_INITDIALOG:
return (INT_PTR)TRUE; case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR)TRUE;
}
break;
}
return (INT_PTR)FALSE;
}
窗口
最新文章
- AC6102 开发板千兆以太网UDP传输实验
- <;转>;关于Certificate、Provisioning Profile、App ID的介绍及其之间的关系
- net use与shutdown配合使用,本机重启远程服务器
- LeetCode344:Reverse String@Python
- [Gym]2008-2009 ACM-ICPC, NEERC, Moscow Subregional Contest
- Android 可拖动列表项的ListView
- java 字符串 转码
- Python的列表排序
- minicom 配置
- Bash判断文件夹(目录)是否存在
- jquery,javascript -设置某一ul下的li下的 a的属性
- ultraedit替换所有空白行 --正则表达式使用
- codeforces #261 C题 Pashmak and Buses(瞎搞)
- UpdataData
- 微信小程序支付简单小结与梳理
- java集合的操作(set,Iterator)
- java并发之可见性与原子性:Syncronized和volatile
- 关于tensorflow conv2d卷积备忘的一点理解
- Servlet开发的三种方法
- Extjs 项目中常用的小技巧,也许你用得着(4)---Extjs 中的cookie设置