学习编写一个完整的 Windows 应用程序

从 C 语言,到常见的 setup.exe 安装程序,究竟有多远?怎样实现双击 .xls 文件会自动启动 excel 并加载?这篇文章就解释这个问题。

请跟随以下步骤:

1. 编写应用程序。为了叙述方便,暂且叫 test.exe 吧。通常 test.exe 中会用若干 scanf 或 cin 来读取用户输入的参数,并根据参数来执行程序,这是大家在学习 C 语言的过程中见到的。

2. 要规定程序所需数据的格式。例如,word 需要使用 .doc 格式的数据,photoshop 需要使用 .psd 格式的数据。不管这些数据文件是文本的还是二进制的,只有格式确定下来,程序才能按照原定意图解释数据。数据格式就是将用户输入的全部数据都放进一个文件中,然后将 scanf 语句修改为读取该文件(读文件的程序部分请参考相关书籍)。

3. 设置文件关联。在上一步我们规定了一个我们需要的数据格式,现在给这个格式的文件自定一个扩展名,比如叫 .abc,然后双击该文件,Windows 会提示用户选择打开该类型的程序,我们选择步骤 1 编写的

...

解决问题:编译范例程序都出现上百个错误

刚开始用 EasyX,编译却出现上百个错误,例如:

error C2143: syntax error : missing ')' before '='
error C2072: 'initgraph' : initialization of a function
error C2059: syntax error : ')'
warning C4028: formal parameter 1 different from declaration
warning C4028: formal parameter 2 different from declaration
warning C4028: formal parameter 3 different from declaration
error C2143: syntax error : missing ')' before '*'
error C2081: 'bool' : name in formal parameter list ill

...

解决错误:error C2665: “outtextxy”: 2 个重载中没有一个可以转换所有参数类型

【错误描述】

一些程序在 VC6 下运行好好地,但是放到 VC2008 及更高版本 VC 下编译却报错误(以下仅以 VC2008 举例,高版本 VC 类似),例如使用如下语句:

outtextxy(10, 20, "Hello World");

在 VC6 下可以成功编译,但在 VC2008 下编译后会有错误。

中文版错误提示如下:

error C2665: “outtextxy”: 2 个重载中没有一个可以转换所有参数类型

英文版错误提示如下:

error C2665: 'outtextxy' : none of the 2 overloads could convert all the argument types

同样的,对于其他一些包含字符串调用的函数,例如 loadimage、drawtext 等,也会遇到类似问题。

【错误原因】

简单来说,这是由于字符编码问题引起的。

...

什么是 LPCTSTR?和 char* 有什么关系?

简单来说,LPCTSTR 就��示字符串指针。

那么和 char* 又有什么区别呢?

大家用 char 表示字符时,英文占用一个字节,中文站用两个字节。这样有一个严重的问题:两个字节,究竟是两个英文字符,还是一个中文字符?为了解决这个问题,unicode 编码诞生了。

常见的 unicode 编码不管中文英文都用两个字节表示,用 wchar_t 来定义。

为了让代码适应 char 和 wchar_t 两种情况,可以用 TCHAR 宏,这个宏当项目定义为 unicode 时表示 wchar_t,否则表示 char。

对应的,还有 _T("") 宏用来表示字符串,例如 _T("abc") 在项目为 unicode 时表示 L"abc",否则表示 "abc"。

然后再看 LPCTSTR,它是以下几个概念的缩写:Long Point Const Tchar STRing,这样意思就明确了吧。

窗口技巧:利用窗体句柄实现圆形窗口

该篇文章讲述如何做一个圆形窗口。根据该思路,可以实现各种形状的窗口。

阅读该文章前,请先阅读

  1. “VC绘图/游戏简易教程-10:用鼠标控制绘图/游戏程序”https://www.codeabc.cn/bestans/post/concise-lesson-10
  2. “VC绘图/游戏简易教程-15:窗体句柄(Windows 编程入门)”https://www.codeabc.cn/bestans/post/concise-lesson-15

【基础程序】

先写一个基础程序,实现按鼠标右键退出,完整代码如下:

...

读取图片的技巧:将图片内嵌到 exe 文件中

注:Visual C++ Express(学习版)不支持资源编辑,无法创建资源文件,因此也就无法实现内嵌图片资源。

场景描述

如果程序中需要使用一张图片,通常会用相对路径方式指定一个外部文件。例如:

loadimage(NULL, _T("test.jpg"));

这样,将编译后的 .exe 和 test.jpg 放在一起,就可以正确加载图片。许多游戏有几十个甚至上千个文件,就是有类似这样的许多外部数据。

但还有一些情况,希望图片能嵌入编译后的 .exe 里面,这样只需要拷贝一个 .exe 文件就能附带上所需图片。本文就介绍这种情况的实现方法。

什么是资源文件

windows 应用程序是可以包含各种“资源”的,例如:图标、对话框、菜单、快捷键等等,这些资源按照一定的格式,可以和 .exe 链接在一起。

我们所要做的,就是把图片放到资源

...