我是第一次看C++的书,以前由于只喜欢做网站就全身心地去看ASP.NET(C#)了,这里只是一个笔记没有什么特别的,记录以下生活中的小事,也算是有第二门高级语言的开始,因为VB已经忘光了。大学学的C语言更别提了,呵呵,脚本应该不能算,开始吧,Fighting!
在Windows程序中,窗口是用窗口句柄(HWND)来标示的,也就是说每一个窗口都有一个窗口句柄,而且唯一,这个应该和分配内存有关的;当然我们要对某个窗口进行操作,首先就要得到这个窗口的句柄。句柄(HANDLE)是Windows程序中一个重要的概念,使用也非常频繁。在Windows程序中,有各种各样的资源(窗口、图标、光标等),系统在创建这些资源时会为它们分配内存,并返回标识这些资源的标识号,即句柄。在后面的内容中我们还会看到图标句柄(HICON)、光标句柄(HCURSOR)和画刷句柄(HBRUSH)。
消息:这个名词经常听到,但是我还没有真正认识和应用过这个都西!在C++中消息时有MSG结构表示:
2
3 HWND hwnd;
4
5 UINT message;
6
7 WPARAM wParam;
8
9 LPARAM lParam;
10
11 DWORD time;
12
13 POINT pt;
14
15 } MSG;
第一个成员变量hwnd表示消息所属的窗口。我们通常开发的程序都是窗口应用程序,一个消息一般都是与某个窗口相关联的。例如,在某个活动窗口中按下鼠标左键,产生的按键消息就是发给该窗口的。在Windows程序中,用HWND类型的变量来标识窗口。
第二个成员变量message指定了消息的标识符。在Windows中,消息是由一个数值来表示的,不同的消息对应不同的数值。但是由于数值不便于记忆,所以Windows将消息对应的数值定义为WM_XXX宏(WM是Window Message的缩写)的形式,XXX对应某种消息的英文拼写的大写形式。例如,鼠标左键按下消息是WM_LBUTTONDOWN,键盘按下消息是WM_KEYDOWN,字符消息是WM_CHAR,等等。在程序中我们通常都是以WM_XXX宏的形式来使用消息的。
第三、第四个成员变量wParam和lParam,用于指定消息的附加信息。例如,当我们收到一个字符消息的时候,message成员变量的值就是WM_CHAR,但用户到底输入的是什么字符,那么就由wParam和lParam来说明。wParam、lParam表示的信息随消息的不同而不同。
最后两个变量分别表示消息投递到消息队列中的时间和鼠标的当前位置。
消息队列:有消息当然要排队,应为CPU执行程序又先后顺序的吧,不同的队列执行的次序也是不同的!但是也不是所有消息都要进去排队,Windows程序中的消息可以分为“进队消息”和“不进队消息”。进队的消息将由系统放入到应用程序的消息队列中,然后由应用程序取出并发送。不进队的消息在系统调用窗口过程时直接发送给窗口。不管是进队消息还是不进队消息,最终都由系统调用窗口过程函数对消息进行处理。
最后看一下,程序的入口函数作为我们这堂课的结束,因为要上班了!
2
3 HINSTANCE hInstance, // handle to current instance
4
5 HINSTANCE hPrevInstance, // handle to previous instance
6
7 LPSTR lpCmdLine, // command line
8
9 int nCmdShow // show state
10
11 );
第一个参数hInstance表示该程序当前运行的实例的句柄,这是一个数值。当程序在Windows下运行时,它唯一标识运行中的实例(注意,只有运行中的程序实例,才有实例句柄)。一个应用程序可以运行多个实例,每运行一个实例,系统都会给该实例分配一个句柄值,并通过hInstance参数传递给WinMain函数。
第二个参数hPrevInstance表示当前实例的前一个实例的句柄。通过查看MSDN我们可以知道,在Win32环境下,这个参数总是NULL,即在Win32环境下,这个参数不再起作用。
第三个参数lpCmdLine是一个以空终止的字符串,指定传递给应用程序的命令行参数。第四个参数nCmdShow指定程序的窗口应该如何显示,例如最大化、最小化、隐藏等。这个参数的值由该程序的调用者所指定,应用程序通常不需要去理会这个参数的值。
学习是要一个过程,但是我相信我有C#做我的靠山,对C++的学习是很有信心的,虽然不能一下子把它给啃了,慢慢努力!OK上班了,每天都去学学,在用用应该可以的哦!