1.昨天看完了孙先生的第一个视频,试着把他的程序完整地背一遍下来,顺便捋顺一下思路。他是用的Win32Application。
首先是头文件,要包含windows和stdio,涉及到了C语言的库。
然后是主函数。参数太多记不住,就直接在MSDN上找,然后ctrl+C、ctrl+V。(注意把复制的;去掉,昨天就是直接复制过去,后面出bug还纳闷了半天呢。)
然后开始编写函数主体,首先定义一个窗口类,即WNDCLASS;再对类中的各个参数进行初始化赋值(借助于VC助手,不需记忆,很方便)。
擦。。一整天都快过去了,参数初始化赋值还没完,我效率是要有多高啊。。。我要是老板,一分钱都不给。唉。。。
WNDCLASS有十个参数。挨个说一下吧,不然又记不住(这脑子)。
UNIT style——窗口类类型。CS_VREDRAW:窗口垂直坐标发生变化时重画;CS_HREDRAW:窗口水平坐标发生变化时重画。cs:Class Style
WNDPROC lpfnWndProc——回调函数。系统调用。程序猿编写。(这里只是要函数的地址,lp么,长指针。不要跟我一样傻得把函数参数什么都要写上。)
(孙先生提到根据功能猜函数的方法,肯定不是没有道理的。刚刚我就猜中一个。ShowWindow函数中的参数开头一定是SW_,哈哈,果然猜中了。)
int cbClsExtra:类备用内存空间吧
int cbWndExtra:窗口备用内存空间
HINSTANCE hInstance:实例
HICON hIcon:图标,即打开应用程序窗口左上角的小图案。
HCURSOR hCursor:光标,鼠标在窗口中显示的形状,如十字,箭头等。
HBRUSH hbrBackground:画刷,窗口背景颜色
LPCTSTR lpszMenuName:菜单名,lp长指针,str字符串,就知道该如何赋值了。没有菜单自然为空
LPCTSTR lpszClassName:类名。程序猿命名。
在MSDN上查看ClassName的介绍,提到一个RegisterClass函数。
---------------------------------------------------------------------------------------------------------
2.我的效率啊,现在是2013年3月14日早。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
继续之前那个RegisterClass,是指注册窗口的函数。
第一。设计一个窗口类(这个我在分割线之前就完成了)
第二。注册窗口类(就是在ClassName中介绍的RegisterClass函数)
第三。创建窗口(Create)
第四。显示及更新窗口(Show & Update)
根据步骤,从中文我们就可以猜出他涉及到的英文函数。CreateWindow ShowWindow UpdateWindow,再通过MSDN求证就可以了。
吃个苹果先
----------------------------------------------------------------------------------------------------------
为什么要注册窗口类?看MSDN:The RegisterClass function registers a window class for subsequent use in calls to the CreatWindow or CreateWindowEX function.
注册类函数就是为之后调用创建窗口函数服务的。
根据上面步骤可以知道注册完窗口类就是创建窗口和更新窗口了。可以根据VC助手提示的函数参数调用,极其方便。
----------------------------------------------------------------------------------------------------------
以上窗口即创建成功了,但是要窗口作出响应,肯定要去获取消息。MSG。
利用while判断消息,并作出响应。分别涉及到的函数有GetMessage(获取消息) TranslateMessage(翻译,虚拟键值消息转换为字符消息) DispatchMessage(发送消息到系统程序,典型应用在发送通过GetMessage获取的消息)
-------------------------------------------------------------------------------------------------------
到此为止,主函数写好了。还记不记的之前曾调用一个回调函数,现在开始写。在主函数前,先声明,直接MSDN复制粘贴顺带改个名字就OK了;然后在主函数后开始定义。
回调函数,即根据特定的消息进行判断,把消息传递给特定的windows进程。
用一个switch来对消息进行筛选(我居然连switch基本书写规则都不清楚!),我们可以根据需要对某些消息进行响应,而对某些消息不作出响应。例如按下按键,窗口要怎么做;鼠标左键单击,窗口会怎么做;等等等。
整体思路就是这样。不知道我程序是怎么写的,昨天边看视频边码的编译运行结果居然不一样。。。这让我很忧伤啊,难道还要再重复看一遍视频么?
Today就先that's all好了,tomorrow继续吧。