MFC工程与命令行参数

来源:互联网 发布:linux环境变量生效 编辑:程序博客网 时间:2024/05/20 16:14

一般情况下MFC工程生成的东东很少会用到命令行,但是毕竟会用到。而相对于win32控制台程序,MFC程序获取命令行参数可能会稍微复杂一些。

关键函数:GetCommandLine,CommandLineToArgv

源代码(注意哟 这个是控制台程序的)

#include <windows.h>#include <stdio.h>#include <shellapi.h>int __cdecl main(){   LPWSTR *szArglist;   int nArgs;   int i;   szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs);   if( NULL == szArglist )   {      wprintf(L"CommandLineToArgvW failed\n");      return 0;   }   else for( i=0; i<nArgs; i++) printf("%d: %ws\n", i, szArglist[i]);// Free memory allocated for CommandLineToArgvW arguments.   LocalFree(szArglist);   return(1);}

虽然这段代码是控制台的,但是同样适用于MFC带界面的工程。

在mfc工程中,默认情况是带一个命令行参数的(vc控制台程序也同样带),即为可执行程序的绝对路径。

一般在mfc工程的主线程类初始化之后,弹出主界面之前加入相关获取命令行参数的代码段。

BOOL CAppLineApp::InitInstance(){// 如果一个运行在 Windows XP 上的应用程序清单指定要// 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,//则需要 InitCommonControlsEx()。否则,将无法创建窗口。INITCOMMONCONTROLSEX InitCtrls;InitCtrls.dwSize = sizeof(InitCtrls);// 将它设置为包括所有要在应用程序中使用的// 公共控件类。InitCtrls.dwICC = ICC_WIN95_CLASSES;InitCommonControlsEx(&InitCtrls);CWinAppEx::InitInstance();AfxEnableControlContainer();// 标准初始化// 如果未使用这些功能并希望减小// 最终可执行文件的大小,则应移除下列// 不需要的特定初始化例程// 更改用于存储设置的注册表项// TODO: 应适当修改该字符串,// 例如修改为公司或组织名SetRegistryKey(_T("应用程序向导生成的本地应用程序"));LPWSTR *szArglist;int nArgs;szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs);if (nArgs >= 2){MessageBox(NULL,_T("有手动输入参数"), _T("提示"),MB_OK);MessageBox(NULL,szArglist[1],_T("第二个参数"),MB_OK);LocalFree(szArglist);return FALSE;}LocalFree(szArglist);CAppLineDlg dlg;m_pMainWnd = &dlg;INT_PTR nResponse = dlg.DoModal();if (nResponse == IDOK){// TODO: 在此放置处理何时用//  “确定”来关闭对话框的代码}else if (nResponse == IDCANCEL){// TODO: 在此放置处理何时用//  “取消”来关闭对话框的代码}// 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,//  而不是启动应用程序的消息泵。return FALSE;}
我的exe是AppLine.exe
输入时是这样的

AppLine  “第2个参数”

原创粉丝点击