C\C++ Windows程序设计[1]:第一个Windows程序

话说学了这么久C++(其实也不久),是否总想着自己弄一款像记事本那样的程序?那么这篇文章就来从对话框开始,讲讲如何写一个Windows程序。


在写程序之前,我们先来简单介绍下Windows程序和黑窗窗的概念:

  • 其实,我们前面所讲的“黑窗窗”,它的真名应该是 控制台程序(Win32 Console Application) ,也被叫做 “DOS程序” 。DOS是一种早期的命令式操作系统,很难做出漂亮的界面,这种程序对用户来说不是很友好。
  • 带界面的Windows程序全称是 Windows应用程序(Win32 Application) ,带有丰富的交互界面,可以做出很漂亮的程序。

使用C\C++语言可以开发出Windows程序,但是绝大部分C\C++语言的教程均没有讲道,只讲了基本语法,让很多初学者认为学C语言没用,什么都做不出来。
其实不是这样的,C语言只是一种工具,需要与Windows系统结合,借助Windows提供的函数才能开发出漂亮的程序(Windows API)。


那么现在问题来了,如何开发Windows程序呢?本文使用的是C\C++语言,不过其他语言也阔以,比如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,      //对话框的内容,如果要换行里面阔以加上 '\n'
    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是一个停止图标,也就是说,如果你要同时包含按钮和图标,可以使用 `|` 这个运算符,该运算符在C\C++中的意思是"或"。

TEXT宏


细心的童鞋可能已经发现,我的代码中MessageBox用的是TEXT(x)而不是x,这是为什么呢?这就涉及到Unicode、ANSI编码的知识了,这里不做过多解释。总之在Windows程序开发中,应该尽量使用TEXT(x)或者_T(x)而不是单独的字符串。
posted @ 2020-03-15 11:23  _Return  阅读(911)  评论(0编辑  收藏  举报