话说学了这么久C++(其实也不久),是否总想着自己弄一款像记事本那样的程序?那么这篇文章就来从对话框开始,讲讲如何写一个Windows程序。
在写程序之前,我们先来简单介绍下Windows程序和黑窗窗的概念:
- 其实,我们前面所讲的“黑窗窗”,它的真名应该是 控制台程序(Win32 Console Application) ,也被叫做 “DOS程序” 。DOS是一种早期的命令式操作系统,很难做出漂亮的界面,这种程序对用户来说不是很友好。
- 带界面的Windows程序全称是 Windows应用程序(Win32 Application) ,带有丰富的交互界面,可以做出很漂亮的程序。
使用CC++语言可以开发出Windows程序,但是绝大部分CC++语言的教程均没有讲道,只讲了基本语法,让很多初学者认为学C语言没用,什么都做不出来。
其实不是这样的,C语言只是一种工具,需要与Windows系统结合,借助Windows提供的函数才能开发出漂亮的程序(Windows API)。
那么现在问题来了,如何开发Windows程序呢?本文使用的是CC++语言,不过其他语言也阔以,比如Visual Basic,C#等等。
另外,本文中代码的编译环境为 Windows+Visual C++ 6.0或MinGW。
好了废话了这么多,是时候来上代码了!
#include <windows.h>
int main(void){
MessageBox( NULL, TEXT("Hello,world!"), TEXT("第一个Windows程序"), 0 ); //弹出对话框
return 0;
}
现在来编译:
Visual C++ 6.0:
打开Visual C++ 6.0,选择"文件"-->"新建"-->"工程", 选择"Win32 Application"创建一个空的项目, 再在这个项目中新建一个"文件", 文件类型为"C++ Source File", 文件以.cpp为扩展名, 将上面的代码敲入或者复制粘贴到这个文件内容中, 编译运行,即可得到一个闪亮亮的对话框(大雾)。
MinGW(纯命令行):
打开记事本,将上面的代码敲入或者复制粘贴到这个里面,保存。接着打开cmd(Win+R,输入cmd),输入 g++ 代码路径+名称 -o 生成的exe的路径 -mwindows
好了敲下回车,不出问题的话,这段代码应该是编译成功的,运行,你会看到一个闪亮亮的对话框。
觉得如上步骤麻烦?没关系,我们还有Dev-Cpp编译版本:
打开Dev-Cpp,点击"工具"-->"编译选项"-->"编译器",选中"在连接命令行时加入以下命令",勾上,再在下面那个框框里面加上 -mwindows
,接着新建段代码,将上面的代码敲入或者复制进去,保存,编译,运行。不出问题的话,你会看到一个闪亮亮的对话框。
现在来一句句解析这段代码:
先来康#include <windows.h>
这段代码,只要是写Windows程序,就必须包含Windows.h
这个头文件,里面包含了许多WindowsAPI,如果不添加的话就不能编译了。
接着是main主函数,这应该是我们最熟悉的了,即程序入口函数。
然后是MessageBox,这个函数的作用是弹出对话框,接下来着重讲解这个函数:
先上函数原型:
int MessageBox(
HWND hWnd, //窗口句柄,这将在后面讲解,现在暂时填NULL(即为 空 的意思)
LPCWSTR lpText, //对话框的内容,如果要换行里面阔以加上 '
'
LPCWSTR lpCaption, //对话框的标题
UINT uType //显示类型
)
其中 uType 常用的值如下:
值 | 含义 |
---|---|
MB_OK | 含义确定按钮 |
MB_OKCANCEL | 确定和取消按钮 |
MB_RETRYCANCEL | 重试和取消按钮 |
MB_YESNO | 是和否按钮 |
MB_YESNOCANCEL | 是,否和取消按钮 |
MB_ABORTRETRYIGNORE | 终止,重试和忽略按钮 |
MB_ICONSTOP | 出现一个"停止"的图标 |
MB_ICONWARNING | 惊叹号图标 |
MB_ICONINFORMATION | 感叹号图标 |
MB_ICONERROR | 错误图标 |
比如如下代码会生成一个带确定和取消按钮的对话框:
MessageBox( NULL, TEXT("这是一个对话框") , TEXT("对话框示例") , MB_OKCANCEL);
那么如果要同时包含按钮和图标怎么办呢?看下面代码:
MessageBox( NULL , TEXT("这是一个对话框") , TEXT("对话框示例") , MB_OKCANCEL | MB_ICONSTOP);
以上代码会生成一个带确定取消按钮和停止图标的对话框。可以看到,代码唯一做的改动就是加了 `MB_OKCANCEL | MB_ICONSTOP` ,核对上面的表格,你会发现,MB_ICONSTOP是一个停止图标,也就是说,如果你要同时包含按钮和图标,可以使用 `|` 这个运算符,该运算符在CC++中的意思是"或"。
TEXT宏
细心的童鞋可能已经发现,我的代码中MessageBox用的是TEXT(x)而不是x,这是为什么呢?这就涉及到Unicode、ANSI编码的知识了,这里不做过多解释。总之在Windows程序开发中,应该尽量使用TEXT(x)或者_T(x)而不是单独的字符串。