本人正在学习Windows编程操作,所以进行一些记录,希望对刚入门的个位有所帮助。
目录
1.什么是win32编程
1.在32位的windows操作系统中 调用Windows 的 提供的API来进行编程。和c++时期原来不同的是c++时期我们一般创建控制台应用程序(Console Application),而在win32编成时期,我们使用的是 标准 windows窗口程序。
2. 一个简单的win32程序
2.1 创建一个空项目
首先我们创建一个win32的一个空项目。
windows桌面向导:在这里可以自主创建win32空项目和带有预编译头的项目(注:一定要在应用程序类型中选择桌面应用程序,然后在选择)
Windows桌面应用程序:系统自动为搭建好了框架
2.2 入口函数
和以往的c++应用程序入口函数不同,Windows函数的入口函数为WinMain函数
该入口函数的返回值为 Int 整形 , APIENTRY 用于标志该函数为入口函数(有的程序有时会写_stdcall 是一样的东西,应为在Windows宏定义中,WINAPI和APIENTRY都是__stdcall的宏定义),HINSTANCE 该参数可以看作是一个标识,用于记录操作的窗口是哪个。
2.3 注册窗口
前面所说,Win32编程是写窗口程序,所以我们要先进行注册窗口然后才能创建窗口,注册窗口函数函数为RegisterClass
在windows中我们用 RegisterClass(注:RegisterClassEX 为RegisterClass的扩展函数,基本已经代替RegisterClass) 来注册一个窗口(其实可以看做就是创建了一个带有窗口属性的类),而在这里我们用WNDCLASS 该结构体来保存窗口的属性
cbsize : 设置WNDCLASS的大小
style: 定义窗口菜单的一些风格
CS_HREDRAW | 若移动或改变窗口宽度,则刷新整个页面 |
CS_VREDRA | 若移动或改变窗口高度,则刷新整个页面 |
CS_DBLCLKS | 当用户双击窗口时向窗口发送双击消息 |
CS_NOCLOSE | 禁用系统菜单的关闭指令 |
CS_DROPSHADOW | 实现窗体边框阴影效果 |
...... | ...... |
LpfnWndProc : 窗口消息处理函数,是一个回调函数,当窗口有消息时系统自动调用
cbClsExtra: 窗口类结构分配的额外字节数,一般默认为0
cbWndExtra:在窗口实例之后分配的额外字节数。 系统将字节初始化为零。 如果应用程序使 用 WNDCLASSEX 在资源文件中使用 CLASS 指令创建对话框,则必须将此成员设置 为 DLGWINDOWEXTRA
hInstance; 要实例化的窗口的实例句柄
hIcon: 设置图标资源的句柄
hCursor:设置应用程序的鼠标样式
hbrBackground :默认窗口,设置窗口默认背景颜色
lpszMenuName:菜单的资源名称,名称显示在资源文件中
lpszClassName : WNDCLASS的另一个标识名
2.3.1 窗口回调函数 ![](https://i-blog.csdnimg.cn/blog_migrate/977976f4d760a2f00bd45cb5d676a403.png)
hwnd : 用于获取控制台窗口句柄 uint : 该变量为窗口传来的消息
wparam: 信息中附带的字参数(后面再说) lparam : 信息中附带的长参数(后面再说)
(注:窗口处理函数是必须的,只有当返回true的时候窗口的注册才会成功;如果为默认 要返回 默认的Windows自带的处理函数 DefWindowProchan函数)
2.4 创建窗口
创建窗口我们使用的是CreateWindow函数
LpClassName: 注册的窗口的标识 LpWindowName :窗口的TItle
DWstyle: 窗口的风格 x:窗口左上角距屏幕顶的距离 y:窗口左上角距屏幕左边框的距离
nWidth: 窗口的宽 nHeight:窗口的高 hwndParent : 父窗口的句柄
hmenu:菜单句柄 hinstance:实例句柄 lparam:附带信息
2.5 显示窗口
ShowWindow(HWND hwnd,int nCmdShow);
第一个参数 hwnd 表示显示的窗口是哪个
第二个参数 是表示窗口的显示风格
2.6 更新窗口
UpdateWindow(hwnd);
发送一些消息,更新绘图等等;
3. 最终总结
经过以上步骤 ,就可以创建出一个简单的窗口
(注:因为我们还没有写消息循环函数,所在我们创建窗口的一瞬间就会死掉,如果想看窗口可打断点观看)
以上就是入门的第一步;
如果文章哪里有错误,欢迎指出,我会进行修改。