windows编程-窗口

引言

在windows平台开发,少不了要和windows窗体打交道。
无论是opencv的窗体还是qt建立的窗体,都可以用windows的API进行控制。
这里介绍的是典型的win32窗口应用程序结构

创建窗口

需要以下7个步骤

  1. 程序入口点(WinMain函数)/设计窗口类
  2. 注册窗口类(RegisterClass/EX)
  3. 创建窗口类(CreateWindows)
  4. 显示主窗口(Show Windows)
  5. 更新主窗口(UpdateWindows)
  6. 进入消息循环GetMessage->TranslateMessage->DispatchMessage->对应的消息处理)

搭建一个Win32应用程序

首先建立一个win32的应用程序

  • 一般情况下,如果是windows程序,那么WinMain是入口函数,在VS2017中新建项目为“win32项目”
  • 如果是dos控制台程序,那么main是入口函数,在VS2017中新建项目为“win32控制台应用程序”

设计窗口类

 //第一步、设计窗口类
 WNDCLASS wndclass;
 wndclass.style = CS_HREDRAW | CS_VREDRAW; //设置水平竖直重绘,发送WM_PAINT消息
 wndclass.lpfnWndProc = WindowProc; //指定窗口的回调函数
 wndclass.cbClsExtra = 0;
 wndclass.cbWndExtra = 0; //两个额外数据
 wndclass.hInstance = hInstance;
 wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
 wndclass.hCursor = LoadCursor(NULL, IDC_CROSS);
 wndclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
 wndclass.lpszMenuName = NULL;
 wndclass.lpszClassName = "myWindowClass";

**常见句柄:**窗口句柄(HWND) 图标句柄(HICON),光标句柄(HCURSOR),画刷句柄(HBRUSH)

注册窗口类

 //第二步、注册窗口类
 RegisterClass(&wndclass);

创建窗口类

//第三步、创建窗口
HWND hWnd = CreateWindow(
“myWindowClass”, //窗口类的名字
“my first window”, //窗口标题
WS_OVERLAPPEDWINDOW, //样式
0, 0, 500, 500, //左上角坐标,宽高
NULL, //父窗口
NULL, //菜单
hInstance, //实例
NULL); //附加参数

显示主窗口

 ShowWindow(hWnd, SW_SHOWNORMAL); //正常显示窗口

更新主窗口

 UpdateWindow(hWnd); //更新窗口

进入消息循环

 MSG msg;
 while (GetMessageA(&msg, NULL, 0, 0))
 {
  TranslateMessage(&msg); //翻译消息
  DispatchMessageA(&msg); //将消息传入窗口的回调函数
 }

参考

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值