写出一个窗口
之前我们简单的认识了一下win32主函数,下面我们来讨论一下如何用这个主函数作为起点来写出一个win32窗口程
序。
int WINAPI WinMain(  
HINSTANCEhInstance,// handle to current instance  
HINSTANCEhPrevInstance,// handle to previous instance  
LPSTRlpCmdLine,// command line  
intnCmdShow // show state);
这个函数有四个参数,
①第一参数是应用程序实例句柄,应用程序实例句柄是啥?这里先简单理解为是一个标号,是操作系统为了区分系统中不同进程的,我觉得也可能是一个指针什么的。
②第二个参数是之前一个程序的实例句柄,也就是这个程序或者是窗口可能是被别的程序调用或者是其他窗口的子窗口。这个指针会指向那个调用者。
③第三个参数是命令行参数,可以输入一个命令,目前没啥用,不多讲了。
④第四个参数是窗口最开始显示的模式,一般不用我们把这个设置为0。
好了,开始写主函数的内容。下面的代码是写在主函数里的。
不行,这里我要先说一些事情。
创建一个窗口应用程序的基本步骤(有些是我自己的土话,可能缺少专业术语):
①创建窗口类,这里面有好多关于创建窗体样式,大小等参数
②注册窗口类,为啥有个注册的步骤,个人觉得可能你要调用系统什么资源了,或者创建窗口需要有个登记才能让你用
③然后就可以创建一个窗口了,根据你最开始窗口类里面那些参数,可以创建一个你想要的窗口。
④准备工作都做好了就开始显示窗口了
⑤最后是消息循环,你对窗口发送的消息由一个循环不断的接受并且处理
这回我们可以进入代码部分了,开始可能枯燥,很快这段就过去了。
WNDCLASS 这个是结构体,这个有啥用呢?我觉得就是把你要创建的窗口的参数都写进去,到时候让系统根据这个配
置单子给你创建一个窗口,这个就像你在电脑城装电脑的配置单子,我们看看这个单子需要填啥。
WNDCLASS window;
 window.lpfnWndProc = WinProc;        //回调函数指针
 window.style = CS_DBLCLKS | CS_OWNDC |
CS_HREDRAW | CS_VREDRAW;                   //窗口样式
 window.cbClsExtra = 0;                            //窗口类的附加内存,取0
 window.cbWndExtra = 0;                            //窗口的附加内存,取0就行了
 window.hInstance = hInstance;                     //包含窗口过程的程序的实例句柄。
 window.hIcon = LoadIcon(NULL, IDI_APPLICATION);   //程序的图标。默认
 window.hCursor = LoadCursor(NULL, IDC_ARROW);     //程序中的光标。默认
 window.hbrBackground = (HBRUSH)GetStockObject(DKGRAY_BRUSH);  //程序的背景颜色
 window.lpszMenuName = NULL;                       //菜单名字,没有,写空
 window.lpszClassName = "GameCore";                //窗口类名
这是一段小代码,看看注释,应该没有什么大问题,建议最好有一个msdn,里面每个参数都有详细的解释。我们目前的目的只是写一个窗口,多余的我就不说了。这段代码就是填写一个窗口类。现在我们的配置单子填好了,去注册一下。
 if (!RegisterClass(&window))  //对窗口类进行注册,这才能创建该类型的窗口
return -1;

窗口注册完了,该创建窗口了,用如下的代码来创建我们的窗口
//创建窗口
HWND hWnd;
hWnd = CreateWindow("GameCore",
"Game",
WS_POPUP | WS_VISIBLE,
CW_USEDEFAULT,
CW_USEDEFAULT,
800,
600,
NULL,
NULL,
hInstance,
NULL);

这个HWND类型的变量以后我们可能会多次用到,那个是窗口句柄,、。现在我们已经创建了一个窗口,这个函数有好几个参数,我们暂时先不去管那个是什么,先看看一个窗口大概是怎么写出来的,然后我们在细说。
//显示窗口
ShowWindow(hWnd, SW_SHOWNORMAL);
然后显示窗口,到这里,大概窗口就出来了,然后是一个消息循环,就是窗口要不断接受我们给它的消息然后进行处理,
MSG  msgs;
while (TRUE)
{
if (PeekMessage(&msgs, NULL, 0, 0, PM_REMOVE))
{

if (msgs.message == WM_QUIT)
break;
TranslateMessage(&msgs);
DispatchMessage(&msgs);
}
UnregisterClass("GameCore", window.hInstance);  //程序准备结束,注销窗口类

这是一个消息循环,现在我们还差一个执行消息的函数,也就是回掉函数。好啦,下回分解。

Windows下游戏制作(1)---win32窗口创建(2)相关推荐

  1. win32窗口创建之通俗易懂版

    win32应用程序的第一章 1最简单的win32窗口的创建 这里呢我把win32窗口的创建作为第一个知识分享给大家,也算我对他的一个巩固了.嘿嘿 这里我要说明的是创建这个窗口有两种方法(当然是对于萌新 ...

  2. houdini环境变量服务器文件读不了,Windows下在普通命令行窗口里初始化Houdini环境...

    Linux下很容易,就source houdini_setup就好了,可是windows下的没给? 打开开始菜单里Side Effects Software的Utilities下面的Command l ...

  3. 【转】C++ win32窗口创建详解

    转自:https://my.oschina.net/u/4328928/blog/3315324 本篇所讲解的内容仅限于 Windows 操作系统且限于 win32程序设计 现在我们在Windows系 ...

  4. 【python】分享一个在Windows下对应用程序python窗口后台截图的方法

    最近心血来潮想自己用python写一个图色操作游戏的脚本,于是上百度一查"python后台截图",事实上能用的也就是pywin32读取内存截图(什么设备环境.设备描述表.内存设备描 ...

  5. windows下putty自动登录和窗口显示IP

    一,写一个bat文件,里面内容写上 start D:\soft\putty.exe -pw my$1234 william@119.29.109.244 然后就可以自动登录了.如果有多个窗口的话,标题 ...

  6. oracle dialog运行,win32窗口创建 之 CreateDialog和DialogBox

    DialogBox 函数原型: INT_PTR DialogBox( HINSTANCE hInstance,LPCTSTR lpTemplate, HWND hWndParent,DLGPROC l ...

  7. Windows下sc create命令行添加/创建/修改服务

    添加服务:  sc create TestService binpath= "D:\TestApp\TestService.exe" 注意:所有的等号和值之间需要一个空格(等号前不 ...

  8. QT应用编程: windows下使用UDT传输协议_创建工程示例(高速数据传输)

    一.环境介绍 操作系统: win10 64位 QT版本:  QT5.12.6 编译器:  MinGW 32 二.UDT传输协议介绍 UDT是基于UDP的数据传输协议(UDP-based Data Tr ...

  9. macos支持exfat吗_[启动盘制作]如何在 Windows 下制作苹果 macOS 启动盘

    to 知乎管理员: 此前本文被删, 专门写了篇文章反映问题:关于安装实录-windows下如何制作苹果安装盘文章被删的声明 现按照要求改写文章, 如果再删, 烦劳注明原因. 步入正题: 苹果的镜像格式 ...

最新文章

  1. linux sar命令 性能监控
  2. MySQL python update 语句
  3. wxWidgets:wxNavigationKeyEvent类用法
  4. pythondockerapi_docker-py 用Python调用Docker接口的方法
  5. word自定义模板的存储位置
  6. 苏宁大数据怎么运营_数据驱动经营 苏宁大数据用户标签入选2019TOP100全球软件案例...
  7. Generator 函数的异步应用
  8. 推荐一款超好用的vue的markdown 编辑器
  9. 支持单个生成的DM码制作工具(测试)
  10. SSM框架讲解(史上最详细的文章)
  11. H桥电机驱动电路详解
  12. ftp 命令访问 ftp服务器
  13. linux firefox源码修改主页
  14. 数据泄露事件频发,深扒企业数据库安全隐患(内附高效防护手段)
  15. 【最短路 搜索】JZOJ_4246 san
  16. 解决git bash中无法粘贴的问题
  17. 安装惠普打印机显示等待php,安装惠普打印机出现“新设备现已连接”一直不动怎么办?...
  18. NLTK常用操作和语料库
  19. 外贸独立站SEO排名
  20. 前端小白如何提高,解决问题

热门文章

  1. 2023年全国最新交安安全员精选真题及答案1
  2. 三种最流行的商业模式解析:让顾客感觉占便宜,你才能赚更多钱
  3. 研磨设计模式之简单工厂模式-3
  4. QGraphicsItem释放内存——QGraphicsRectItem
  5. 记录错误:ImportError: No module named ‘tools‘。jupyter无法import第三方文件夹的库
  6. 6款经典BI项目报表表单风格配色方案
  7. 分享6个优质的黑科技APP,简约良心还免费
  8. smaba(跨平台文件共享)
  9. echart图表-刷新界面.初始化时默认显示hover提示内容
  10. windows下maven打包镜像并推送docker服务器