- UID
 - 66114
 
 注册时间2010-4-1
阅读权限30
最后登录1970-1-1
龙战于野 
  
 
 
 
TA的每日心情  | 慵懒 2019-3-12 17:25 | 
|---|
 
  签到天数: 3 天 [LV.2]偶尔看看I  
 | 
 
从上面这段程序就可以看到,_tWinMain 是应用程序的入口函数,这里是使用它的宏,定 
义在 tchar.h 头文件里,为什么要这样作宏定义的呢?由于Windows 的应用程序要适应 
UNICODE 和以前单字符的应用程序,由于Windows 这两个API的定义是不一样的,如 
下: 
UNICODE 的定义:  
 #define _tWinMain    wWinMain  
单字符的定义:  
 #define _tWinMain   WinMain  
只要经过这样的宏定义后,就可以适应不同字符宽度的函数接口了。由于我是采用 
UNICODE 编译的,所以这里使用 wWinMain 函数定义,下面再把它的定义找出来,如下:  
int  
WINAPI  
wWinMain(  
    HINSTANCE hInstance,  
    HINSTANCE hPrevInstance,   
     LPWSTR lpCmdLine,  
     int nShowCmd  
);  
这里要详细地解释一下函数 wWinMain 的参数,它有四个参数。  
hInstance 是当前应用程序的实例句柄,一般用来区分不同的资源使用。  
hPrevInstance 是以前 Win98 使用的句柄,在Win2000 以后的操作系统里都是空 
值 NULL。  
lpCmdLine 是命令行参数,比如你在 Windows 开始菜单里运行一个程序,并添加参 
数在后面,就会传递给应用程序,后面再详细讨论。  
nShowCmd 是窗口的显示方式,比如最大化显示,最小化显示,还是正常显示。  
   
Windows 运行程序时,是通过运行库里的启动代码来调用 wWinMain 函数,它是在启 
动文件里如下调用:  
#ifdef WPRFLAG  
            mainret = wWinMain(  
#else /* WPRFLAG */  
            mainret = WinMain(  
#endif /* WPRFLAG */  
                        (HINSTANCE)&__ImageBase,   
                       NULL,  
                        lpszCommandLine,  
                       StartupInfo.dwFlags & STARTF_USESHOWWINDOW  
                         ? StartupInfo.wShowWindow  
                         : SW_SHOWDEFAULT  
                       );  
这就是操作系统传递给应用程序的值,现在就来演示使用第一个参数 hInstance。  
请看下面的例子:  
#001 #include "stdafx.h"  
#002 #include "First.h"  
#003   
#004 //  
#005 //第一个例子。  
#006 // 
#007 //  
#008 int APIENTRY _tWinMain(HINSTANCE hInstance,  
#009                       HINSTANCE hPrevInstance,   
#010                       LPTSTR     lpCmdLine,  
#011                        int       nCmdShow)  
#012 {  
#013     UNREFERENCED_PARAMETER(hPrevInstance);  
#014     UNREFERENCED_PARAMETER(lpCmdLine);   
#015     UNREFERENCED_PARAMETER(nCmdShow);  
#016   
#017      //使用应用程序句柄  
#018      const int MAXSIZE_APPBUF = 256;  
#019     TCHAR wAppTile[MAXSIZE_APPBUF];  
#020     LoadString(hInstance,IDS_APP_TITLE,wAppTile,MAXSIZE_APPBUF);  
#021   
#022      //获取桌面的句柄。  
#023     HWND hWnd = GetDesktopWindow();  
#024   
#025      //显示一行消息。  
#026     MessageBox(hWnd, _T("第一个应用程序"), wAppTile, MB_OK);      
#027   
#028      //  
#029      return 0;  
#030 }  
这个例子是在前面的基础上修改的,主要添加了使用应用程序实例句柄。在第 19 行里定义 
了一个保存应用程序标题的缓冲区,然后在第 20 行里调用函数 LoadString 从应用程序 
的资源里加载字符串,它的第一个参数就使用到 hInstance 句柄。因此应用程序句柄是表 
示程序在资源上唯一的标识符。 |   
 
 
 
 |