分享
 
 
 

《Windows程序设计》读书笔记之一

王朝system·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

开始

最近有幸拜读了Charles Petzold的大作《Windows程序设计》,真有种相见恨晚的感觉。这是一本1999年出版、主要讲述在Windows平台下如何使用C语言调用API函数进行软件开发的老书。在当今RAD工具充斥市场的今天,该书依然是新手从事Windows下软件开发入门的不二之选。本人从事Windows平台软件开发已近三年,Windows相关的书籍和文档也阅读过不少,直到接触该书之后,好多以往含糊不清的概念才一下子豁然开朗。说到这里,不得不佩服Charles Petzold先生的文笔和才识,能够把windows程序开发知识讲解的如此简洁明了、浅显易懂。

第一章讲述的主要是些介绍性的、基础性的文字内容。

接触该书的先决条件是安装有Windows系统、了解C语言、安装有可进行Windows编程的开发环境。

Winows是支持抢占式多任务、多线程的图形操作系统。支持CUI(控制台用户接口)和GUI(图形用户接口)两种编程方式。所有基于GUI的Windows程序至少有一个窗口,支持鼠标和键盘控制,每一个时刻可以有多个Windows程序同时运行,互不冲突。

Winows运转的核心是一个被称作“动态连接”的概念。通过“动态连接”功能可调用Windows提供的系统函数即API,这些函数主要包含在Kernel.dll(包含内存管理、文件I/O、任务处理API函数)、User.dll(包含用户界面API函数)、GDI.dll(包含图形设备接口API函数)三个动态连接库中。以往调用C库函数,只要包含头文件,就可以将C库函数中的机器代码连接到我们的程序中;调用Windows API函数,除了需包含头文件,还需要一个对应的“导入库(import library)”文件,用以指明dll动态库的函数调用入口,而且dll动态库并不被连接到我们的程序中,只有在程序运行时,系统才将相应dll动态库载入到内存中。

在16位版本Windows中,通过分段模式(内存地址由一个16位段地址和一个16位偏移量组成)进行内存管理,C语言中的int数据类型是16位宽。在32位版本Windows中,Windows支持32位模式的平面内存模式,C语言中的int数据类型也扩充32位宽。考虑到程序兼容性,目前32位版本的Windows都支持Win16 API和Win32 API,调用Win16函数通过一个转换层被转化为Win32函数调用,然后被操作系统调用。

使用C语言和原始API不是编写Windows程序的唯一办法,却是深入透彻理解Windows系统运作原理最有效的办法。当然,MFC、VCL等大型库源码还是非常有参考价值的,它可以让你明白专家级的Windows编程是怎么一回事。

推荐使用Visual C++ 6.0作为编程环境。MSDN是Windows开发者的宝库。

下面是基于控制台模式的典型代码:

#include <stdio.h>

main()

{

printf(“hello,world!\n”);

}

下面是基于图形模式的典型代码:

#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,PSTR szCmdLine,int iCmdShow)

{

MessageBox(NULL,TEXT(“Hello,Windows 98!”),TEXT(“HelloMsg”),0);

return 0;

}

windows.h包含了多个其他Windows头文件,如windef.h(基本类型定义)、winnt.h(支持unicode的类型定义)、winbase.h(内核函数)、winuser.h(用户接口函数)、wingdi.h(图形设备接口函数)。

如基于控制台模式程序的入口点函数是main一样,windows图形模式程序的入口点是WinMain,总是想这样出现:

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,PSTR szCmdLine,int iCmdShow)

WINAPI是一个调用约定,等价于__stdcall。

HINSTANCE是一种句柄类型,其值用以标识对象。第一个参数用以表示该程序实例;

第二参数现已废弃,总是NULL,我们不必理会;第三个参数为运行程序的命令行;第四个参数指出程序初始显示的方式。

MessageBox显示一个消息对话框。第一个参数指出父窗口句柄,设置为NULL即没有父窗口;第二个参数显示消息内容;第三个参数显示对话框标题;第四个参数指出对话框上的按钮组合和显示图标;返回值是一个整型值,标识是按下了对话框上哪个按钮。

编译此程序时,生成一个.OBJ文件,链接阶段,链接程序结合.OBJ文件和.LIB文件建立.EXE文件。通过在Project选项上选择Setting,然后单击link标签,可以看到导入库(import library)列表。

在Visual C++中,可以选择不同配置编译和链接程序,默认有Debug和Release两种配置。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有