目 录
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
C语言Windows程序设计->第一天->第一个Windows程序 ......................................... - 2 - C语言Windows程序设计->第二天->ASCII与Unicode ................................................ - 6 - C语言Windows程序设计->第二天->宽字符和C语言 ................................................. - 7 - C语言Windows程序设计->第三天->Windows版printf .............................................. - 10 - C语言Windows程序设计->第三天->属于自己的窗口 ................................................ - 12 - C语言Windows程序设计->第四天->详解我的窗口(上) ............................................. - 16 - C语言Windows程序设计->第四天->详解我的窗口(中) ............................................. - 20 - C语言Windows程序设计->第四天->详解我的窗口(下) ............................................. - 24 - C语言Windows程序设计->第五天->回顾与反思 ........................................................ - 28 - C语言Windows程序设计->第六天->GDI与设备环境 ................................................ - 29 - C语言Windows程序设计->第七天->TextOut与系统字体 .......................................... - 32 - C语言Windows程序设计->第八天->滚动条 ................................................................ - 38 - C语言Windows程序设计->第九天->GDI绘图基础 .................................................... - 57 - C语言Windows程序设计->第十天->响应键盘事件 .................................................... - 67 - C语言Windows程序设计->第十一天->使用鼠标 ........................................................ - 73 - C语言Windows程序设计->第十二天->使用计时器 .................................................... - 80 - C语言Windows程序设计->第十三天->按钮类控件 .................................................... - 88 - C语言Windows程序设计->第十四天->窗口、编辑框样式 ........................................ - 98 - C语言Windows程序设计->第十五天->文本输入框 .................................................... - 99 - C语言Windows程序设计--实战:png图片的解析与显示........................................ - 110 -
- 1 -
C语言Windows程序设计->第一天->第一个Windows程序
在《Windows程序设计》(第五版)第一章的起步中, 作者介绍了学习Windows程序设计的一些基本要求:
1. 能够从用户角度熟练的使用Windows; 2. 懂得如何使用C语言;
3. 安装好了Windows的开发环境.
看起来要求并不算高(怎么样?一起来尝试下?)。 笔者在这里决定使用Visual C++ 6.0作为开发环境, 虽说在Visual Studio这个大家族中, VC++6早已被长江后浪推前浪, 把VC++6推成了一个将近淘汰的环境, 但是作者的机器实在是有点不够给力, 启动VS2010时相对比较慢。 总之, 既然Charles Petzold也假定我会用Visual C++ 6.0, 那么我就用VC++6好了。
·介绍Windows
*Windows的历史:
是的, 你不用惊讶, Windows在这里就是指的微软(Microsoft)的那个操作系统, 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在界面上做了些改动, 采用了重叠窗口。
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年写好的), 后来的Windows就更猛了, 横扫桌面, Windows 2000/2003/XP/Vista/2008/7/8..., 都懂得。 *Windows的优点:
更加人性化? 操作更简单? 一定还有其他的优点。
*工作原理的中心思想:
\动态链接\概念即为Windows工作原理的中心思想, 通过调用Windows自带的函数来实现在屏幕上显示文本与图形。 函数通过动态链接库实现, .dll以及.exe的文件, 在Windows 98中, 这些文件在\\Windows\\System子目录下, NT的在\\WinNT\\System或\\WinNT\\System32, NT以上放在\\Windows\\System32。
·关于Windows编程 *Windows API:
API, Application Programming Interface, 应用程序编程接口,Windows API 实际上也就是Windows提供的一些函数, 通过对这些函数的调用完成应用程序的开发。 *API文档:
这份文档里介绍了Windows提供的已公开的所有API, 你可以下载份离线的, 或者去MSDN在线图书馆( MSDN Library Online )查阅这份文档.上午的随笔暂时写到这里, 感觉写的有点短, 其实书上写了很多, 仔细品味了好几遍, 越品味越有种找不到重点的感觉, 要是比着书上的句子抄, 这博文岂不是太无味了, 我想, 这些Windows的背景知识对编程影响或许也不是很大, 所以在这里就不啰嗦这些了。下午学习\你的第一个Windows程序\。
- 2 -
*我的第一个Windows程序, Hello,world! 在Charles Petzold的书中, 作者首先回顾了下C语言在控制台下通过标准输入输出函数输出\的程序, 代码如下: #include
{ printf( \ return 0 ;}
同样, Charles Petzold也给出了Windows版的\其实他给出的是Hello,windows 98!), 代码如下:
#include
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow ) {
MessageBox( NULL, TEXT(\ return 0; }
通过Visual C++ 6.0的\文件\新建\工程\选择\创建一个空的项目, 再在这个项目中新建一个\文件\文件类型为\文件以.c为扩展名, 将上面的代码敲入或者复制粘贴到这个文件内容中, 经过编译运行就可以得到一个对话框了, 赶紧截图留念吧!
在这个对话框中, 有标题栏, 标题栏的内容是\对话框的内容为
\还有一个\确定\按钮, 而且, 没有那个黑框框窗口, 一切看起来都是那么美好, 来一起看看这段Windows版的Hello,world!吧!
*Windows版的Hello,world!代码注释* *第一行
#include
稍微有点C语音基础的都能明白, 这是要包含\这个头文件, 也就说明, 在下面的代码中, 要用到这个头文件, 如果我们将#include
Compiling... HelloWorld.c
d:\\project\\lwinc\\helloworld\\helloworld.c(3) : error C2061: syntax error :
identifier 'WinMain'd:\\project\\lwinc\\helloworld\\helloworld.c(3) : error C2059: syntax error : ';'d:\\project\\lwinc\\helloworld\\helloworld.c(3) : error C2146:
- 3 -
syntax error : missing ')' before identifier
'hInstance'd:\\project\\lwinc\\helloworld\\helloworld.c(3) : error C2061: syntax error : identifier 'hInstance'd:\\project\\lwinc\\helloworld\\helloworld.c(3) : error C2059: syntax error : ','d:\\project\\lwinc\\helloworld\\helloworld.c(3) : error C2059: syntax error : ')'执行 cl.exe 时出错.
意料之内的, 报错了, 第一条就是标识符\错误, 具体的细节暂时就不深究了, 继续向下看。
*关于windows.h头文件:
在windows.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 ■ STDARG.H ■ WINNLS.H ■ WINCON.H ■ WINVER.H ■ WINREG.H ■ WINNETWK.H ■ CDERR.H ■ DDE.H ■ DDEML.H ■ DLGS.H ■ LZEXPAND.H ■ MMSYSTEM.H ■ NB30.H ■ RPC.H ■ SHELLAPI.H■ WINPERF.H ■ WINSOCK2.H ■ MSWSOCK.H ■ WINSOCK.H ■ WINCRYPT.H■ COMMDLG.H ■ WINSPOOL.H ■ OLE.H ■ OLE2.H ■ WINWLM.H ■ WINSVC.H ■ MCX.H ■ IMM.H *程序的入口
在Win32控制台程序(Win32 Console Application)中, 应用程序的入口为main()函数, windows程序的程序入口和win32控制台程序的入口类似, 为WinMain()函数. 程序的入口函数在WINBASE.H作出了声明, 声明如下: int WINAPI WinMain(
HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd );
其中由声明可以看出, WinMain函数的返回值被定义为int型;
WINAPI为WinMain函数的调用规则, 在WINDEF.H对\作出了如下宏定义: #define WINAPI __stdcall
说明, WinMain函数的调用规则为\__stdcall\方式, 对于\调用规则, 现在暂时先不去深究, 知道有这么回事就行, 以后会详细了解到的, 现在如果深究\就偏离了这篇博文的主题。
*WinMain函数的参数:
1>. WinMain的第一个参数 HINSTANCE hInstance, 用书上的解释为\实例句柄\由于第一次接触C语言Windows程序设计, 对这个句柄的概念也不是很了解, 去百科了下, 句柄的解释为\一个句柄是指使用的一个唯一的整数值,即一个四字节长的数值,来标志应用程序中的不同对象和同类对象中的不同的实例,诸如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等。\——引用自百度百科->句柄。
笔者是这样对句柄进行理解的, 在一个应用程序中, 通常创建了很多的窗口、按钮、标签, 或者使用了一个文件等, 在程序的任何地方, 只要能够获得这个被称为句柄的东西, 就能够找到该控件或者窗口在内存中的位置, 从而对其进行操作。感觉有点像带参数的main函数, 只是这里的主函数参数为一个句柄。
2>. WinMain函数的第二个参数, 同样是个实例句柄, 但书上又进一步解释说在32位的
- 4 -
相关推荐: