15天学习C语言Windows程序设计.docx





《15天学习C语言Windows程序设计.docx》由会员分享,可在线阅读,更多相关《15天学习C语言Windows程序设计.docx(30页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、15天学习C语言Windows程序设计 目录 1.C语言Windows程序设计-第一天-第一个Windows程序. - 2 - 2.C语言Windows程序设计-第二天-ASCII与Unicode . - 6 - 3.C语言Windows程序设计-第二天-宽字符和C语言 . - 7 - 4.C语言Windows程序设计-第三天-Windows版printf . - 10 - 5.C语言Windows程序设计-第三天-属于自己的窗口. - 12 - 6.C语言Windows程序设计-第四天-详解我的窗口(上) . - 16 - 7.C语言Windows程序设计-第四天-详解我的窗口(中) . -
2、 20 - 8.C语言Windows程序设计-第四天-详解我的窗口(下) . - 24 - 9.C语言Windows程序设计-第五天-回顾与反思. - 28 - 10.C语言Windows程序设计-第六天-GDI与设备环境. - 29 - 11.C语言Windows程序设计-第七天-TextOut与系统字体. - 32 - 12.C语言Windows程序设计-第八天-滚动条. - 38 - 13.C语言Windows程序设计-第九天-GDI绘图基础. - 57 - 14.C语言Windows程序设计-第十天-响应键盘事件. - 67 - 15.C语言Windows程序设计-第十一天-使用鼠标.
3、 - 73 - 16.C语言Windows程序设计-第十二天-使用计时器. - 80 - 17.C语言Windows程序设计-第十三天-按钮类控件. - 88 - 18.C语言Windows程序设计-第十四天-窗口、编辑框样式. - 98 - 19.C语言Windows程序设计-第十五天-文本输入框. - 99 - 20.C语言Windows程序设计-实战:png图片的解析与显示. - 110 - C语言Windows程序设计-第一天-第一个Windows程序 在Windows程序设计(第五版)第一章的起步中, 作者介绍了学习Windows程序设计的一些基本要求: 1. 能够从用户角度熟练的使
4、用Windows; 2. 懂得如何使用C语言; 3. 安装好了Windows的开发环境. 看起来要求并不算高(怎么样?一起来尝试下?)。笔者在这里决定使用Visual C+ 6.0作为开发环境, 虽说在Visual Studio这个大家族中, VC+6早已被长江后浪推前浪, 把VC+6推成了一个将近淘汰的环境, 但是作者的机器实在是有点不够给力, 启动VS2022时相对比较慢。总之, 既然Charles Petzold也假定我会用Visual C+ 6.0, 那么我就用VC+6好了。 介绍Windows *Windows的历史: 是的, 你不用惊讶, Windows在这里就是指的微软(Micr
5、osoft)的那个操作系统, Windows的历史如果要详细介绍的话, 我觉得可能要单开个随笔分类才行, 所以这里就简 略的介绍下, 不过我还是建议你去搜索引擎查找下关于Windows的历史(如果你认为有必要的话)。 1. 1985年11月, Windows 1.0正式推出; IBM与Microsoft共同开发, 基于DOS系统,通过DOS来进行文件操作, 当然, 2.0、3.0也都是基于DOS的, 直到Windows 2000的发布,Windows才彻底的摆脱了DOS,成为真正独立的操作系统。 2. 1987年11月, Windows 2.0推向市场;相对于1.0, 2.0在界面上做了些改动
6、, 采用了重叠窗口。 3. 1990年 5月, Windows 3.0推向市场;支持Intel 286、386、486微处理器的16位保护模式。 4. 1993年 7月, Windows NT投放市场;Windows家族中第一个支持Intel 386、486、奔腾微处理器32位模式的版本。 5. 1995年 8月, Windows 95发布;一个混合的16位/32位Windows系统。 6. 1998年 6月, Windows 98进入市场;基于Windows 95编写, 对Windows 95的改进。 书的作者就将Windows介绍到这里(没办法, 人家这本书就是1998年写好的), 后来的
7、Windows就更猛了, 横扫桌面, Windows 2000/2022/XP/Vista/2022/7/8., 都懂得。 *Windows的优点: 更加人性化?操作更简单?一定还有其他的优点。 *工作原理的中心思想: 动态链接概念即为Windows工作原理的中心思想, 通过调用Windows自带的函数来实现在屏幕上显示文本与图形。函数通过动态链接库实现, .dll以及.exe的文件, 在Windows 98中, 这些文件在WindowsSystem子目录下, NT的在WinNTSystem或 WinNTSystem32, NT以上放在WindowsSystem32。 关于Windows编程
8、*Windows API: API, Application Programming Interface, 应用程序编程接口,Windows API 实际上也就是Windows提供的一些函数, 通过对这些函数的调用完成应用程序的开发。 *API文档: 这份文档里介绍了Windows提供的已公开的所有API, 你可以下载份离线的, 或者去MSDN在线图书馆( MSDN Library Online )查阅这份文档.上午的随笔暂时写到这里, 感觉写的有点短, 其实书上写了很多, 仔细品味了好几遍, 越品味越有种找不到重点的感觉, 要是比着书上的句子抄, 这博文岂不是太无味了, 我想, 这些Wind
9、ows的背景知识对编程影响或许也不是很大, 所以在这里就不啰嗦这些了。下午学习你的第一个Windows程序。 *我的第一个Windows程序, Hello,world! 在Charles Petzold的书中, 作者首先回顾了下C语言在控制台下通过标准输入输出函数输出Hello,world!的程序, 代码如下: #include int main() printf( Hello,world!n ) ; return 0 ; 同样, Charles Petzold也给出了Windows版的Hello,world!(其实他给出的是 Hello,windows 98!), 代码如下: #includ
10、e int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow ) MessageBox( NULL, TEXT(Hello,world!), TEXT(MessageBox), 0 ); return 0; 通过Visual C+ 6.0的文件-新建-工程, 选择Win32 Application创建一个空的项目, 再在这个项目中新建一个文件, 文件类型为C+ Source File, 文件以.c 为扩展名, 将上面的代码敲入或者复制粘贴到这个文件内容中, 经过编
11、译运行就可以得到一个对话框了, 赶紧截图留念吧! 在这个对话框中, 有标题栏, 标题栏的内容是MessageBox, 对话框的内容为Hello,world!, 还有一个确定按钮, 而且, 没有那个黑框框窗口, 一切看起来都是那么美好, 来一起看看这段Windows版的Hello,world!吧! *Windows版的Hello,world!代码注释* *第一行 #include 稍微有点C语音基础的都能明白, 这是要包含windows.h这个头文件, 也就说明, 在下面的代码中, 要用到这个头文件, 如果我们将#include这句去掉再进行编译看看会有什么情况: Compiling. Hell
12、oWorld.c d:projectlwinchelloworldhelloworld.c(3) : error C2061: syntax error : identifier WinMaind:projectlwinchelloworldhelloworld.c(3) : error C2059: syntax error : ;d:projectlwinchelloworldhelloworld.c(3) : error C2146: syntax error : missing ) before identifier hInstanced:projectlwinchelloworldh
13、elloworld.c(3) : error C2061: syntax error : identifier hInstanced:projectlwinchelloworldhelloworld.c(3) : error C2059: syntax error : ,d:projectlwinchelloworldhelloworld.c(3) : error C2059: syntax error : )执行 cl.exe 时出错. 意料之内的, 报错了, 第一条就是标识符WinMain错误, 具体的细节暂时就不深究了, 继续向下看。 *关于windows.h头文件: 在windows.
14、h这个头文件中, 实际上已经包含了若干的其他相关的头文件, 用书上的 话说, windows.h是个非常重要的包含文件, 其中包含的其他比较重要的头文件有: WINDEF.H 基本数据类型定义 WINNT.H 支持Unicode的类型定义 WINBASE.H 内核函数 WINUSER.H 用户界面函数 WINGDI.H 图像设备接口函数 不过我还是好奇windows.h到底包含了那些头文件, 找到VC6的安装目录, 打开Include文件夹, 找到WINDOWS.H并打开, 虽说看不太懂, 但找#include关键词还是无压力的. 除去上面的5个还有: WINRESRC.H EXCPT.H S
15、TDARG.H WINNLS.H WINCON.H WINVER.HWINREG.H WINNETWK.H CDERR.H DDE.H DDEML.H DLGS.H LZEXPAND.H MMSYSTEM.H NB30.H RPC.H SHELLAPI.HWINPERF.HWINSOCK2.H MSWSOCK.H WINSOCK.H WINCRYPT.HCOMMDLG.HWINSPOOL.HOLE.H OLE2.H WINWLM.HWINSVC.H MCX.H IMM.H *程序的入口 在Win32控制台程序(Win32 Console Application)中, 应用程序的入口为main(
16、)函数, windows程序的程序入口和win32控制台程序的入口类似, 为WinMain()函数. 程序的入口函数在WINBASE.H作出了声明, 声明如下: int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd ); 其中由声明可以看出, WinMain函数的返回值被定义为int型; WINAPI为WinMain函数的调用规则, 在WINDEF.H对WINAPI作出了如下宏定义: #define WINAPI _stdcall 说明, WinMain函数
17、的调用规则为_stdcall方式, 对于_stdcall调用规则, 现在暂时先不去深究, 知道有这么回事就行, 以后会详细了解到的, 现在如果深究_stdcall就偏离了这篇博文的主题。 *WinMain函数的参数: 1. WinMain的第一个参数 HINSTANCE hInstance, 用书上的解释为实例句柄, 由于第一次接触C语言Windows程序设计, 对这个句柄的概念也不是很了解, 去百科了下, 句柄的解释为一个句柄是指使用的一个唯一的整数值,即一个四字节长的数值,来标志应用程序中的不同对象和同类对象中的不同的实例,诸如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等。引用
18、自百度百科-句柄。 笔者是这样对句柄进行理解的, 在一个应用程序中, 通常创建了很多的窗口、按钮、标签, 或者使用了一个文件等, 在程序的任何地方, 只要能够获得这个被称为句柄的东西, 就能 够找到该控件或者窗口在内存中的位置, 从而对其进行操作。感觉有点像带参数的main函数, 只是这里的主函数参数为一个句柄。 2. WinMain函数的第二个参数, 同样是个实例句柄, 但书上又进一步解释说在32位的 Windows程序设计中, WinMain函数的实例句柄概念已不再采用, 因此WinMain的第二个参数通常总是NULL。 笔者的见解: 感觉马上就要晕了, 疑问一: 因此WinMain的第二
19、个参数通常总是NULL, 那么第一个呢?WinMain的第一个参数会不会也可以是NULL呢?疑问二: WinMain函数的参数从何而来?是操作系统么?带着疑问继续向下看。 3. WinMain的第三个参数是用来运行程序的命令行, PSTR: 用来指向一个字符串的指针类型, szCmdLine, sz:表示以0结尾的字符串; 目的是通过命令行方式运行程序并向主函数中传入参数, 应该就像给main函数传入参数一样; 4. WinMain的第四个参数是一个int型参数, 用来指明程序(窗口)最初如何被显示, 例如最小化?最大化?全屏? 笔者的见解: 应该很有用, 经常见一些游戏一启动就是全屏的, 但
20、是这个参数也是操作系统传给程序的么?因为从平时运行Windows程序时都是直接双击, 并没有通过命令行给它传入参数, 在编程时应该对程序启动时的显示方式有交代才对, 这样系统再运行时再把这个交代的参数传入给程序告诉程序启动时应该如何显示.(在笔者的见解部分的观点均为笔者个人的见解, 如果有误肯定指正, 我会及时更正, 避免误导其他读者。) *WinMain函数函数体的MessageBox函数: MessageBox(), 名如其人, 不用猜也知道这个就是显示一个对话框的函数, 打开API文档,MSDN Library通过索引找到MessageBox函数, 发现其声明如下: int Messag
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 15 学习 语言 Windows 程序设计

限制150内