win32学习笔记
作者: 姜学哲(netsail0@163.net)
教材: windows程序设计(第五版)北京大学出版社
[美]charles petzold 著
北京博彦科技发展有限公司 译 ¥:160
参考资料:
windows 应用程序设计原理_方法_技术(因为是pdf格式的ebook,作者等不详)
新编windows api 参考大全 电子工业出版社 ¥:98
c++ primer(第三版)中国电力出版社 stanley b.lippman & josee lajoie 著 潘爱民 张丽 译 ¥:128
turbo c实用大全 徐金梧 杨德斌 徐科 编 ¥:42
环境: windows2000 server + internet explorer 6.0 + directx7.0 + visual c++ 6.0
图们江计算机程序编制小组(chulsoft.xiloo.com)版权所有,转载请说明出处
------------------------------------------------------------------
【第一章 开始】
爽完了"星际争霸"后不禁有些遗憾。如果星际的地图再大一点,人口限制再多一点就好了。地图尺寸应该是8人地图的81倍,人口应该是6000。目前来说这是不可能的事情。没有任何一台机子能承受得了。我是想指挥一场真正的战争。就像想当年刘邓大军和国民党军打仗一样。其实星际已经很优秀了,我不能再要求什么。
说到这里,我想到了我们最常用的操作系统windows系列。我去过很多论坛,包括linux论坛在内,绝大多数网友们非常喜欢骂微软公司和该公司的所有产品。以前我也骂过,后来意识到了自己的错误后,再也不骂了。有很多人用着盗版的windows和ie上网骂微软。有种的用linux上网骂微软行不?要不买个正版再骂也可以呀。
我最喜欢的公司是微软。因为在微软程序员的地位是非常高的,特别是总部。微软是两个天才程序员创建的。向往程序员的我没有理由不喜欢微软。
给微软拍了这么多的马屁,怎么能不懂windows系统呢?所以我要学习win32。彻底了解微软公司的产品。
学习win32,也就是读windows程序设计(第五版)要有三个先决条件。
首先我们应该从用户的角度熟悉windows系统。意思是说会使用windows。我想这一点很多人都能做到。
第二,应该了解c语言。为什么?windows是用c写的,书中是用c语言讲解的,这就是原因。当然如果您愿意,也可以用pascal写。不过您得找另一本书了。书名应该是windows程序设计(pascal版)。
第三,应该有一个visual c++ 6.0。我也不指望您用的是正版。一万多rmb,比我的电脑还贵。
书上说,我们可以没有任何图形用户界面的编程经验。very good!
微软出版的书嘛,当然免不了大大地夸耀一下辉煌的历史了。
下面来看一看win32版的"hello world",哦,对不起!应该是"hello windows98!"才对。
#include<windows.h>
int winapi winmain(hinstance hinstance, hinstance hprevinstance, pstr szcmdline, int icmdshow)
{
messagebox(null, text("hello, windows98!"), text("hellomsg"), 0);
return 0;
}
c语言中入口应该是main(),但是到了win32就变了,winmain()代替了main()。对于从来没有接触过win32的初学者来讲,上面的程序可能会使您一头雾水。
messagebox()是对话框函数。是windows系统提供的。这就是传说中的windows api(应用程序接口)。函数功能是显示一个对话框。对话框所显示的内容就是第二个参数text(hello, windows98!)。第三个参数中的字符串会出现在标题栏中。
有关text(),这是一个宏定义,也就是用define定义的。这是为了兼容unicode字符集而做的改动。以后不管是什么时候,您最好把字符串都用text()括起来,有关unicode,那是第二章的问题,所以在第一章这个问题根本就不成为问题。
头文件windows.h中包含了其它的头文件,这些头文件中的一部分又包含了另外的一些头文件。
◆windef.h
◆winnt.h
◆winbase.h
◆winuser.h
◆wingdi.h
这些头文件定义了windows的所有数据类型,函数调用,数据结构和常数标识符。
winmain()前面的winapi在windef.h中定义如下:
#define winapi __stdcall
具体的含义我不知道。可能后面会有详细讲解吧。
#define mb_ok 0x00000000l
#define mb_okcancel 0x00000001l
#define mb_abortretryignore 0x00000002l
#define mb_yesnocancel 0x00000003l
#define mb_yesno 0x00000004l
#define mb_retrycancel 0x00000005l
上面的是messagebox()的第四个参数选项。想了解他们的具体含义很简单。上面的hellomsg程序中messagebox()的第四个参数是零,您可以把那个零换成上面六个常量中的一个,比如:
messagebox(null, text("hello windows98!"), text("hellomsg"), mb_okcancel);
重新编译后您会发现对话框中多了一个'取消'按钮。如果您使用的是英文版,两个按钮分别是 ok & cancel。您可以一个一个的试。
#define mb_iconhand 0x00000010l
#define mb_iconquestion 0x00000020l
#define mb_iconexclamation 0x00000030l
#define mb_iconasterisk 0x00000040l
这些都是对话框中的图标选项。可以用c语言中“|”运算符与前面所提到的六个选项中的一个结合起来,比如:
messagebox(null, text("hello windows98!"), text("hellomsg"), mb_okcancel | mb_iconhand);
运行上面的程序后您将会看到原先的对话框中多出了一个红色的图标,那是一个表示出错时用的“叉叉”,这个图标我不喜欢,我比较喜欢感叹号,所以把程序改成:
messagebox(null, text("hello windows98!"), text("hellomsg"), mb_okcancel | mb_iconasterisk);
运行后您可以非常lucky地看到对话框中出现了一个白底蓝字的感叹号。
就这样,第一章的内容算是学完了。是不是有股非常非常强烈的,想要写应用软件的冲动?不要着急,慢慢来。下一章简单了解一下unicode。