第一个Windows程序

命令行程序

下面这是通过VS2009自动生成的代码,是C++版本

使用iostream头文件中,输出流对象cout.

cout是C++预生成的处理输出的ostream类实例对象

#include <iostream>

int main()
{
    std::cout << "Hello World!\n";
    return 0;
}

C语言版本

调用stdio.h头文件中的函数printf()

#include <stdio.h>

int main()
{
	printf("Hello World!\n");
	return 0;
}

第一个简单的程序包括一个include声明、程序的进入点、一个对执行期链接库函数的呼叫和一个return语句。

Windows窗口程序

#include <windows.h>

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
     MessageBox (NULL, TEXT ("Hello World!"), TEXT ("HelloMsg"), 0) ;

     return 0 ;
}

表头文件

#include <windows.h>

WINDOWS.H是主要的含入文件,它包含了其它Windows表头文件,这些表头文件的某些也包含了其它表头文件。这些表头文件中最重要的和最基本的是:

  • WINDEF.H 基本型态定义。
     
  • WINNT.H 支持Unicode的型态定义。
     
  • WINBASE.H Kernel函数。
     
  • WINUSER.H 使用者接口函数。
     
  • WINGDI.H 图形设备接口函数。
     

这些表头文件定义了Windows的所有数据型态、

函数呼叫、数据结构和常数标识符,它们是Windows文件中的一个重要部分。使用Visual C++ Developer Studio的Edit菜单中的Find in Files搜索这些表头文件非常方便。

正如在C程序中的进入点是函数main一样,Windows程序的进入点是WinMain,总是像这样出现:

int WINAPI WinMain (HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     PSTR      szCmdLine,
                     int       iCmdShow)

WinMain函数声明为返回一个int值。WINAPI标识符在WINDEF.H定义,语句如下:

#define WINAPI __stdcall

该语句指定了一个呼叫约定,包括如何生产机械码以在堆栈中放置函数呼叫的参数。许多Windows函数呼叫声明为WINAPI。

WinMain的第一个参数被称作「执行实体句柄」。在Windows程序设计中,句柄仅是一个应用程序用来识别某些东西的数字。在这种情况下,该句柄唯一地标识该程序,还需要它在其它Windows函数呼叫中作为参数。在Windows的早期版本中,当同时运行同一程序多次时,您便创建了该程序的「多个执行实体(multiple instances)」。同一应用程序的所有执行实体共享程序和只读的内存(通常是例如菜单和对话框模板的资源)。程序通过检查hPrevInstance参数就能够确定自身的其它执行实体是否正在运行。然后它可以略过一些繁杂的工作并从前面的执行实体将某些数据移到自己的数据区域。

在32位Windows版本中,该概念已被抛弃。传给WinMain的第二个参数总是NULL(定义为0)。

WinMain的第三个参数是用于执行程序的命令列。某些Windows应用程序利用它在程序启动时将文件加载内存。

WinMain的第四个参数指出程序最初显示的方式,可以是正常的或者是最大化地充满整个画面,或者是最小化显示在工作列中。

MessageBox函数

MessageBox函数用于显示短信息。虽然,MessageBox显示的小窗口不具有什么功能,实际上它被认为是一个对话框。

MessageBox的第一个参数通常是窗口句柄。

第二个参数是在消息框主体中显示的字符串。

第三个参数是出现在消息框标题列上的字符串。

MessageBox的第四个参数可以是在WINUSER.H中定义的一组以前缀MB_开始的常数的组合。

#define     MB_OK                                                0x00000000L

#define     MB_OKCANCEL                                          0x00000001L

#define     MB_ABORTRETRYIGNORE                                  0x00000002L

#define     MB_YESNOCANCEL                                       0x00000003L

#define     MB_YESNO                                             0x00000004L

#define     MB_RETRYCANCEL                                       0x00000005L

发布了25 篇原创文章 · 获赞 8 · 访问量 427

猜你喜欢

转载自blog.csdn.net/cix1314/article/details/103590937
今日推荐