主题:AfxWinInit函数执行什么操作
yanjie0802
[专家分:20] 发布于 2008-08-16 23:59:00
在AfxWinMain函数中 第一个执行的 就是 AfxWinInit函数,这个函数到底 执行了 一些什么操作?
看了源码 也没看太懂 ,请高手 详细的解释一下.谢谢了
回复列表 (共1个回复)
沙发
f-wind [专家分:1240] 发布于 2008-08-19 15:06:00
AfxWinInit
BOOL AFXAPI AfxWinInit(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow
);
参数: hInstance 当前运行模块的句柄。
hPrevInstance 应用程序前一个实例的句柄。对于基于Win32的应用程序,这个参数总是NULL。
lpCmdLine 指向一个以null结尾的字符串,指定了应用程序的命令行。
nCmdShow 指定了GUI应用程序的主窗口将如何显示。
说明:
这个函数是由MFC提供的WinMain函数调用的,它是基于GUI的应用程序的CWinApp初始化的一部分,主要用来初始化MFC。对于控制台应用程序,不使用MFC提供的WinMain函数,你必须直接调用AfxWinInit来初始化MFC。
如果你自己调用AfxWinInit,你必须声明一个CWinApp类的实例。对于控制台应用程序,你可以选择不从CWinApp基础你自己的类,而是直接使用CWinApp的实例。如果你决定在你的main函数的实现中将所有的工作留给你的应用程序,这样做是可以的。
例子程序TEAR演示了如何用MFC生成一个控制台应用程序。
示例:
// this file must be compiled with the /GX and /MT options:
// cl /GX /MT thisfile.cpp
#include <afx.h>
#include <afxdb.h>
#include <iostream.h>
int main()
{
// try to initialize MFC
if(!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
cerr << "MFC failed to initialize!" << endl;
return 1;
}
// 试图与并不存在的ODBC数据库连接
// (如果不初始化MFC,这根本不会起作用。)
CDatabase db;
try
{
db.Open("This Databsae Doesn't Exist");
// 我们不会真正到达这里。
cout << "Successful!" << endl;
cout << "Closing ... ";
db.Close();
cout << "Closed!" << endl;
}
catch(CDBException* pEx)
{
// 我们到达了一个异常。输出错误信息。
// (如果不初始化MFC,这根本不会起作用。)
char sz[1024];
cout << "Error: ";
if(pEx->GetErrorMessage(sz, 1024)) cout << sz;
else cout << "No error message was available";
cout << endl;
pEx->Delete();
return 1;
}
return 0;
}
我来回复