没有合适的资源?快使用搜索试试~ 我知道了~
(完整word)15天学习C语言Windows程序设计.doc
需积分: 8 0 下载量 172 浏览量
2022-11-16
02:15:10
上传
评论
收藏 2.17MB DOC 举报
温馨提示
试读
109页
(完整word)15天学习C语言Windows程序设计.doc
资源推荐
资源详情
资源评论
(完整 word)15 天学习 C 语言 Windows 程序设计
- 1 -
目 录
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 程序设计->第四天-〉详解我的窗口(中) ...........- 20 -
8. C 语言 Windows 程序设计—〉第四天—〉详解我的窗口(下) .........- 24 -
9. C 语言 Windows 程序设计—〉第五天-〉回顾与反思 ...............— 28 —
10. C 语言 Windows 程序设计->第六天—〉GDI 与设备环境 ..............- 29 —
11. C 语言 Windows 程序设计—>第七天—〉TextOut 与系统字体 .........— 32 -
12. C 语言 Windows 程序设计—>第八天—〉滚动条 ...................— 39 —
13. C 语言 Windows 程序设计—>第九天-〉GDI 绘图基础 ................— 58 -
14. C 语言 Windows 程序设计->第十天->响应键盘事件 ................— 67 —
15. C 语言 Windows 程序设计—〉第十一天->使用鼠标 .................- 73 —
16. C 语言 Windows 程序设计->第十二天->使用计时器 ..................- 80 -
17. C 语言 Windows 程序设计->第十三天—>按钮类控件 ................- 88 —
18. C 语言 Windows 程序设计—>第十四天—〉窗口、编辑框样式 .......— 98 —
19. C 语言 Windows 程序设计—〉第十五天->文本输入框 ................- 99 -
20. C 语言 Windows 程序设计——实战:png 图片的解析与显示 .........- 110 —
(完整 word)15 天学习 C 语言 Windows 程序设计
- 2 -
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 程序”.
*我的第一个 Windows 程序, Hello,world!
在 Charles Petzold 的书中, 作者首先回顾了下 C 语言在控制台下通过标准输入输出函数输出”
Hello,world!"的程序, 代码如下:
#include 〈stdio。h>
int main()
{ printf( "Hello,world!\n” ) ;
return 0 ;}
(完整 word)15 天学习 C 语言 Windows 程序设计
- 3 -
同样, Charles Petzold 也给出了 Windows 版的"Hello,world!”(其实他给出的是 Hello,windows 98!),
代码如下:
#include 〈windows.h>
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 为扩展名, 将上面
的代码敲入或者复制粘贴到这个文件内容中, 经过编译运行就可以得到一个对话框了, 赶紧截图留念吧!
在这个对话框中, 有标题栏, 标题栏的内容是”MessageBox”, 对话框的内容为"Hello,world!”, 还
有一个”确定"按钮, 而且, 没有那个黑框框窗口, 一切看起来都是那么美好, 来一起看看这段 Windows
版的 Hello,world!吧!
*Windows 版的 Hello,world!代码注释*
*第一行
#include <windows.h>
稍微有点 C 语音基础的都能明白, 这是要包含”windows.h"这个头文件, 也就说明, 在下面的代码
中, 要用到这个头文件, 如果我们将#include<windows。h>这句去掉再进行编译看看会有什么情况:
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: 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 时出错。
意料之内的, 报错了, 第一条就是标识符”WinMain"错误, 具体的细节暂时就不深究了, 继续向下看.
*关于 windows。h 头文件:
在 windows。h 这个头文件中, 实际上已经包含了若干的其他相关的头文件, 用书上的话说,
windows.h 是个非常重要的包含文件, 其中包含的其他比较重要的头文件有:
■ WINDEF.H 基本数据类型定义
■ WINNT。H 支持 Unicode 的类型定义
■ WINBASE。H 内核函数
■ WINUSER。H 用户界面函数
(完整 word)15 天学习 C 语言 Windows 程序设计
- 4 -
■ 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 对"WINAPI”作出了如下宏定义:
#define WINAPI __stdcall
说明, WinMain 函数的调用规则为”__stdcall”方式, 对于"__stdcall"调用规则, 现在暂时先不去深究,
知道有这么回事就行, 以后会详细了解到的, 现在如果深究"__stdcall"就偏离了这篇博文的主题。
*WinMain 函数的参数:
1>。 WinMain 的第一个参数 HINSTANCE hInstance, 用书上的解释为”实例句柄", 由于第一次接触 C
语言 Windows 程序设计, 对这个句柄的概念也不是很了解, 去百科了下, 句柄的解释为"一个句柄是指使
用的一个唯一的整数值,即一个四字节长的数值,来标志应用程序中的不同对象和同类对象中的不同的实例,
诸如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等。"——引用自百度百科—〉句柄。
笔者是这样对句柄进行理解的, 在一个应用程序中, 通常创建了很多的窗口、按钮、标签, 或者使用了一
个文件等, 在程序的任何地方, 只要能够获得这个被称为句柄的东西, 就能够找到该控件或者窗口在内存
中的位置, 从而对其进行操作.感觉有点像带参数的 main 函数, 只是这里的主函数参数为一个句柄.
2>. WinMain 函数的第二个参数, 同样是个实例句柄, 但书上又进一步解释说在32位的 Windows 程序设
计中, WinMain 函数的实例句柄概念已不再采用, 因此 WinMain 的第二个参数通常总是 NULL。
笔者的见解: 感觉马上就要晕了, 疑问一: ”因此 WinMain 的第二个参数通常总是 NULL", 那么第一个
呢?WinMain 的第一个参数会不会也可以是 NULL 呢? 疑问二: WinMain 函数的参数从何而来?是操作系统
么?带着疑问继续向下看。
3>。 WinMain 的第三个参数是用来运行程序的命令行, PSTR: 用来指向一个字符串的指针类型,
szCmdLine, sz:表示以0结尾的字符串; 目的是通过命令行方式运行程序并向主函数中传入参数, 应该就
像给 main 函数传入参数一样;
4>. WinMain 的第四个参数是一个 int 型参数, 用来指明程序(窗口)最初如何被显示, 例如最小化?
最大化?全屏?
笔者的见解: 应该很有用, 经常见一些游戏一启动就是全屏的, 但是这个参数也是操作系统传给程
序的么?因为从平时运行 Windows 程序时都是直接双击, 并没有通过命令行给它传入参数, 在编程时应该对
程序启动时的显示方式有交代才对, 这样系统再运行时再把这个交代的参数传入给程序告诉程序启动时应
该如何显示.(在”笔者的见解"部分的观点均为笔者个人的见解, 如果有误肯定指正, 我会及时更正, 避免
误导其他读者。)
*WinMain 函数函数体的 MessageBox 函数:
MessageBox(), 名如其”人", 不用猜也知道这个就是显示一个对话框的函数, 打开 API 文档,MSDN
Library 通过索引找到 MessageBox 函数, 发现其声明如下:
int MessageBox(
HWND hWnd, // handle of owner window, 窗口的一个句柄
LPCTSTR lpText, // address of text in message box, 一个文本(字符串)的指针
(完整 word)15 天学习 C 语言 Windows 程序设计
- 5 -
LPCTSTR lpCaption, // address of title of message box, 标题字符串的指针
UINT uType // style of message box, 对话框的风格
);
在上面示例中对 MessageBox 函数的调用如下:
MessageBox( NULL, TEXT("Hello,world!”), TEXT("MessageBox"), 0 );
第一个参数窗口的句柄的实参为 NULL, 意思为不属于任何窗口.
第二个参数为对话框的内容。
第三个参数为对话框的标题, 但是这两个参数都使用了一个 TEXT()的函数, 书上讲使用 TEXT()的目的
是将这些字符串打包到 TEXT 宏代码里面, 笔者尝试了不用这个 TEXT()函数而直接像这样:
MessageBox( NULL, ”Hello,world!", "MessageBox", 0 );
调用并没有出现警告或者报错信息, 具体使用 TEXT()函数的详细原因还不太清楚, 暂时先在这里画个圈。
第四个参数为对话框的风格, 一些以 MB_开头的一些常量的组合, 可以使用 OR(|)运算进行组合, 这些常
量定义在 WINUSER.H 中, 例如常用的有:
1〉.对话框按钮类型:
#define MB_OK 0x00000000L //仅有一个”确定"按钮
#define MB_OKCANCEL 0x00000001L //”确定" + ”取消”
#define MB_ABORTRETRYIGNORE 0x00000002L //"终止" + ”重试" + "忽略”
#define MB_YESNOCANCEL 0x00000003L //”是" + ”否” + ”取消”
#define MB_YESNO 0x00000004L //"是” + ”否”
#define MB_RETRYCANCEL 0x00000005L //"重试" + ”取消
2>.对话框中的图标类型:
#define MB_ICONHAND 0x00000010L //一个红 X 的错误/停止图标
#define MB_ICONQUESTION 0x00000020L //一个问号的询问图标
#define MB_ICONEXCLAMATION 0x00000030L //一个黄色感叹号的警告图标
#define MB_ICONASTERISK 0x00000040L //一个带有 i 的信息提示图标
同时, 在这些图标中有的还可以用其他名称代替, 这些别名在 WINUSER.H 的定义如下:
#define MB_ICONWARNING MB_ICONEXCLAMATION //警告
#define MB_ICONERROR MB_ICONHAND //错误
#define MB_ICONINFORMATION MB_ICONASTERISK //信息
#define MB_ICONSTOP MB_ICONHAND //停止
下午的学习暂时就到这里, 在学习的过程中出现了几个疑问, 在这里对疑问进行下总结:
疑问一: 在书中介绍 WinMain 函数的参数时讲到 ”因此 WinMain 的第二个参数通常总是 NULL”, 那么
第一个呢?WinMain 的第一个参数也可以是 NULL 吗?
疑问二: WinMain 函数的参数从何而来?是操作系统么?
疑问三: 使用 TEXT()函数的作用是什么呢?
C 语言 Windows 程序设计—>第二天—〉ASCII 与 Unicode
一、ASCⅡ
1>. 关于 ASCⅡ
ASCII(American Standard Code for Information Interchange,美国信息互换标准代码)
ASCII 一共包含128个字符, 包括: 33个控制符号, 1个空格, 32个符号, 10个数字, 26个小写字母和26
个大写字母.每个 ASCII 字符采用7位二进制编码的方式.
ASCII 的优点:十分可靠, 普遍扎根在我们的键盘、显示器、系统硬件、打印机、操作系统等, 用途十
分广泛.
ASCII 的缺点:ASCII, 美国信息互换标准代码, 美国原生, 不能满足其他国家文字的需求, 例如, 中
剩余108页未读,继续阅读
资源评论
xinkai1688
- 粉丝: 335
- 资源: 8万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Last Loaded Test.DBK
- Screenshot_20240520_163011.jpg
- ubuntu-python3-whisper-tornado docker镜像 Dockerfile
- ubuntu-python3-whisper-tornado docker镜像07
- 新录音 8.m4a
- ubuntu-python3-whisper-tornado docker镜像
- ubuntu-python3-whisper-tornado docker镜像
- ubuntu-python3-whisper-tornado docker镜像09
- ubuntu-python3-whisper-tornado docker镜像
- ubuntu-python3-whisper-tornado docker镜像
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功