本博客已经转移至www.mozlite.com,可能不会及时更新和关注留言记录,mvc请加群88794325(已满),8781765ASP.NET(MVC)讨论二群

[VC++入门]步入VC++的殿堂

  有时候需要用VC++来做一个小软件,但是对于没用过的我,只能从新学习!曾今有人说过:“偷懒的人学VB,聪明的人学Delphi,真正的程序员学VC。”由曾学过VB也算是偷懒过了,但是中途放弃去学习C#了,现在觉得有时候要做一个小软件,而且又不是所有的计算机上都装有.NET的框架,为了一个几百K的程序还要将.NET框架打包,人家不懂程序的人一看还不得吓死。所以学习C++还是有必要的,何况想进入游戏行业的我呢?嗬嗬!其实能让我下决心去学这个还有一个就是我想了解一下Windows是怎么完成哪些操作的!

  我是第一次看C++的书,以前由于只喜欢做网站就全身心地去看ASP.NET(C#)了,这里只是一个笔记没有什么特别的,记录以下生活中的小事,也算是有第二门高级语言的开始,因为VB已经忘光了。大学学的C语言更别提了,呵呵,脚本应该不能算,开始吧,Fighting!

  在Windows程序中,窗口是用
窗口句柄HWND)来标示的,也就是说每一个窗口都有一个窗口句柄,而且唯一,这个应该和分配内存有关的;当然我们要对某个窗口进行操作,首先就要得到这个窗口的句柄。句柄(HANDLE)是Windows程序中一个重要的概念,使用也非常频繁。在Windows程序中,有各种各样的资源(窗口、图标、光标等),系统在创建这些资源时会为它们分配内存,并返回标识这些资源的标识号,即句柄。在后面的内容中我们还会看到图标句柄(HICON)、光标句柄(HCURSOR)和画刷句柄(HBRUSH)。

  消息:这个名词经常听到,但是我还没有真正认识和应用过这个都西!在C++中消息时有MSG结构表示:
 
 1 typedef struct tagMSG {      
 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宏(WMWindow Message的缩写)的形式,XXX对应某种消息的英文拼写的大写形式。例如,鼠标左键按下消息是WM_LBUTTONDOWN,键盘按下消息是WM_KEYDOWN,字符消息是WM_CHAR,等等。在程序中我们通常都是以WM_XXX宏的形式来使用消息的。

第三、第四个成员变量wParamlParam,用于指定消息的附加信息。例如,当我们收到一个字符消息的时候,message成员变量的值就是WM_CHAR,但用户到底输入的是什么字符,那么就由wParamlParam来说明。wParamlParam表示的信息随消息的不同而不同。

最后两个变量分别表示消息投递到消息队列中的时间和鼠标的当前位置。

消息队列:有消息当然要排队,应为CPU执行程序又先后顺序的吧,不同的队列执行的次序也是不同的!但是也不是所有消息都要进去排队,Windows程序中的消息可以分为“进队消息”和“不进队消息”。进队的消息将由系统放入到应用程序的消息队列中,然后由应用程序取出并发送。不进队的消息在系统调用窗口过程时直接发送给窗口。不管是进队消息还是不进队消息,最终都由系统调用窗口过程函数对消息进行处理。

最后看一下,程序的入口函数作为我们这堂课的结束,因为要上班了!


 1 int WINAPI WinMain(
 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上班了,每天都去学学,在用用应该可以的哦!

posted @ 2007-01-23 10:21  网魂小兵  Views(592)  Comments(2Edit  收藏  举报