——天道酬勤
对比C语言入门hello,world!,用windows编程实现。
C:
#include "stdio.h"
int main() //主函数,入口
{
printf("hello world!\n"); //调用标准库函数
}
同样效果的Windows程序
在vc/vs中创建一个win32项目(我用vs2012,差别不大)
Windows关于「hello, world」程序的等价程序有和文字模式版本完全相同的组件。它有一个include声明、一个程序进入点、一个函数呼叫和一个return语句。
#include "windows.h"
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
{
MessageBox(NULL,TEXT("你好"),TEXT("问候"),0);
return 0;
}
以下方式也行:
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
{
MessageBox(NULL,TEXT("HELLO"),TEXT("Greeting"),0);
return 0;
}
许多Windows程序中的变量名使用一种称作「匈牙利表示法」的命名系统,该系统在变量名称前面增加了表示变量数据型态的短前缀,前缀i表示int、sz表示「以零结束的字符串」。
首先,介绍一下WinMain中的四个参数
WinMain的第一个参数被称作「执行实体句柄」。在Windows程序设计中,句柄仅是一个应用程序用来识别某些东西的数字。在这种情况下,该句柄唯一地标识该程序,还需要它在其它Windows函数呼叫中作为参数。在Windows的早期版本中,当同时运行同一程序多次时,您便创建了该程序的「多个执行实体(multiple instances)」。同一应用程序的所有执行实体共享程序和只读的内存(通常是例如菜单和对话框模板的资源)。程序通过检查hPrevInstance参数就能够确定自身的其它执行实体是否正在运行。然后它可以略过一些繁杂的工作并从前面的执行实体将某些数据移到自己的数据区域。
在32位Windows版本中,该概念已被抛弃。传给WinMain的第二个参数总是NULL(定义为0)。
WinMain的第三个参数是用于执行程序的命令列。某些Windows应用程序利用它在程序启动时将文件加载内存。WinMain的第四个参数指出程序最初显示的方式,可以是正常的或者是最大化地充满整个画面,或者是最小化显示在工作列中。
MessageBox函数
MessageBox函数用于显示短信息。虽然,MessageBox显示的小窗口不具有什么功能,实际上它被认为是一个对话框。
MessageBox的第一个参数通常是窗口句柄,第二个参数是在消息框主体中显示的字符串,第三个参数是出现在消息框标题列上的字符串。在HELLMSG.C中,这些文字字符串的每一个都被封装在一个TEXT宏中。通常您不必将所有字符串都封装在TEXT宏中,但如果想将您的程序转换为Unicode字符集,这确是一个好主意。
MessageBox的第四个参数可以是在WINUSER.H中定义的一组以前缀MB_开始的常数的组合。
——摘自windows程序设计
程序结果如下:
带入参数MB_OK
带入参数MB_OKCANCEL
带入图示参数和按钮参数MB_OKCANCEL|MB_ICONQUESTION
‘|’为位运算“或”,两个宏的定义如下
#define MB_OKCANCEL 0x00000001L
#define MB_ICONQUESTION 0x00000020L
0x开头,16进制表示,二进制为
00000001 ——MB_OKCANCEL
00100000——MB_ICONQUESTION
两数或运算为00100001,仍能看出两数特征