win32创建窗口函数(windows程序内部运行机制)

win32创建窗口函数(windows程序内部运行机制)

利用win32创建窗口函数,主要操作步骤为:

1、设计一个窗口类
2、注册窗口类
3、创建窗口
4、显示及窗口更新
5、消息循环
6、窗口过程函数
 
(1)设计一个窗口类
设计窗口类,这样的类型已经被windows定义好了,我们只需要像选择题一样填满定义好的结构体(WNDCLASS)即可。
首先有两个一般设为0的选项:cbClsExtra和cbWndExtra,这两个是类附加内存和窗口附加内存。
hbrBackground指定窗口类的背景画刷句柄。可以用来指定一个画刷的句柄,也可以指定一个标准的系统颜色值。
hCursor指定窗口类的光标句柄
hIcon指定窗口类的图标句柄
hInstance指定包含窗口过程程序的程序的实例句柄
lpfnWndProc是一个函数指针,指向窗口过程函数
lpszClassName指定窗口类的名字
lpszMenuName指定菜单资源的名字
style指定窗口的样式
 
(2)注册窗口类
RegisterClass( xxx )里面的参数为指向窗口WNDCLASS的指针
让操作系统知道这一类型的窗口相关信息
 
(3)创建窗口
hwnd = CreateWindow(lpClassName,lpWindowName,dwStyle,x,y,nWidth,nHeight,hWndParant,hMenu,hInstance,lpParam)
lpClassName指定窗口类的名称,即窗口类中的lpszClassName
lpWindowName指定窗口的名字
dwStyle指定创建的窗口样式,主要是窗口显示些什么东西
x,y,nWidth,nHeight左上角坐标,长、宽
hWndParant指定被创建窗口的父窗口句柄
hMenu指定窗口菜单的句柄
hInstance指定窗口所属的应用程序实例的句柄
lpParam多数窗口将这个设为NULL
 
(4)显示及更新
ShowWindow(hwnd,窗口显示状态);
UpdateWindow(hwnd);

 
(5)消息循环
创建、显示、更新窗口之后,需要有一个消息循环,不断的从消息队列中读取消息。
GetMessage( lpMsg , hWnd , wMsgFilterMin, wMsgFilterMax)
lpMsg指向一个消息结构体(MSG)
hWnd指定接收哪一个窗口的消息,通常设为NULL,接收属于调用线程所有窗口的窗口消息
wMsgFilterMin,wMsgFilterMax指定要获取的消息最小值和最大值,通常设为0
GetMessage函数对于WM_QUIT消息,返回0
TranslateMessage和DispatchMessage对收到的消息进一步处理
 
(6)窗口过程函数
用于处理发送给窗口的消息
 
 
这一章主要通过一个win32编程的例子,讲述了windows程序设计,是一种交互式的、事件驱动的程序设计模式,基于消息的。
 
详细内容,参考VC++深入讲解这本书吧

本节程序

 
 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119502.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • Protel99SE覆铜笔记

    Protel99SE覆铜笔记主要讲Protel99se的PCB覆铜方式。

    2022年5月7日
  • 教你二分钟入侵一个网站_入侵网站工具

    教你二分钟入侵一个网站_入侵网站工具作者:Firefox   文章来源:火狐技术联盟说起流光、溯雪、乱刀,可以说是大名鼎鼎无人不知无人不晓,这些都是小榕哥的作品。每次一提起小榕哥来,我的崇拜景仰就如滔滔江水,连绵不绝~~~~(又来了!)让我们崇拜的小榕哥最新又发布了SQL注入工具,这回喜欢利用SQL注入入侵网站的黑友们有福了。小榕哥的工具就是强!偶用它来搞定我们本地的信息港,从寻找注入漏洞到注入攻击成功,通过准确计时,总共只用了

    2022年10月31日
  • mysql查询语句执行过程及运行原理命令_MySQL常用命令

    mysql查询语句执行过程及运行原理命令_MySQL常用命令Mysql查询语句执行原理数据库查询语句如何执行?DML语句首先进行语法分析,对使用sql表示的查询进行语法分析,生成查询语法分析树。 语义检查:检查sql中所涉及的对象以及是否在数据库中存在,用户是否具有操作权限等 视图转换:将语法分析树转换成关系代数表达式,称为逻辑查询计划; 查询优化:在选择逻辑查询计划时,会有多个不同的表达式,选择最佳的逻辑查询计划; 代码生成:必须将逻辑查…

    2022年11月3日
  • padStart()微信浏览器不支持

    padStart()微信浏览器不支持记录下今天写微信小程序遇见的问题。在处理后台返回的时间戳时使用了padStart()方法,在手机上中预览都没有问题,便提交了代码,直到在pc端打开小程序时,页面没有数据,随后了解到微信内置内核不支持padStart()方法,所以处理不了数据,才会报错。再转换时间戳可以用uptime2(num){letdate=newDate(num); letdatetime=date.getFullYear() +”-” +((date.getMonth()+1)>

    2022年9月8日
  • linux工具箱_docker ps命令

    linux工具箱_docker ps命令1.gdb调试利器GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。对于一名Linux下工作的c++程序员,gdb是必不可少的工具;1.1.启动gdb对C/C++程序的调试,需要在编译前就加上-g选项:$g++-ghello.cpp-ohello调试可执行文件:$gdbprogram也就是你的执行文件,一般在当前目录下。调试core文件(core是程序非法执行后coredump后产生的文件):$gdb$gdb

    2022年9月14日
  • android之List<T>的空指针问题_List的初始化

    在使用list做东西的时候出现空指针,查了半天资料本来是这样的 List model; LunchListAdapter adapter;//这是我重写的适配器 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setC

    2022年3月10日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号