应用程序的参数传递
来源:互联网 发布:移动数据流量标准资费 编辑:程序博客网 时间:2024/06/06 23:17
建立两个MFC Dialog应用程序,分别为 ParentApp.exe 和 ChildApp.exe。通过 ParentApp 调用 ChildApp,传递参数给 ChildApp,让 ChildApp 获取 ParentApp 配置文件信息,代码前提条件是ParentApp.exe 、 ChildApp.exe 和 ParentApp.ini 放同一文件夹下。以下为部分代码:
//ParentAppDlg.cpp/*父窗口调用子窗口,让子窗口显示父窗口配置文件信息*/void CParentAppDlg::OnBnClickedCallChild(){// TODO: 在此添加控件通知处理程序代码TCHAR szPath[MAX_PATH];GetModuleFileName(AfxGetApp()->m_hInstance, szPath, MAX_PATH);//获取子程序路径CString strExePath(szPath);int iPos = strExePath.ReverseFind(_T('\\'));ASSERT(-1 != iPos);strExePath = strExePath.Mid(0, iPos + 1);strExePath += _T("ChildApp.exe");//配置文件的路径加上引号,因为命令行参数以空格区分,有些路径包含空格,//会被识别为两个或多个参数,加引号可解决此问题CString strPath(_T("\""));strPath += szPath;iPos = strPath.ReverseFind(_T('\\'));ASSERT(-1 != iPos);strPath = strPath.Mid(0, iPos + 1);strPath += _T("ParentApp.ini");strPath += _T("\"");//获取 ParentApp 句柄long lWndHwnd = (long)m_hWnd;CString strHwndParam;strHwndParam.Format(_T("%d"), lWndHwnd);CString strParam;strParam = CString(_T(" wnd ")) + strHwndParam + CString(_T(" path ")) + strPath;ShellExecute(m_hWnd, _T("open"), strExePath, strParam, NULL, SW_SHOWNORMAL);}
BOOL CChildAppApp::InitInstance(){// 如果一个运行在 Windows XP 上的应用程序清单指定要// 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,//则需要 InitCommonControlsEx()。否则,将无法创建窗口。INITCOMMONCONTROLSEX InitCtrls;InitCtrls.dwSize = sizeof(InitCtrls);// 将它设置为包括所有要在应用程序中使用的// 公共控件类。InitCtrls.dwICC = ICC_WIN95_CLASSES;InitCommonControlsEx(&InitCtrls);CWinApp::InitInstance();AfxEnableControlContainer();// 标准初始化// 如果未使用这些功能并希望减小// 最终可执行文件的大小,则应移除下列// 不需要的特定初始化例程// 更改用于存储设置的注册表项// TODO: 应适当修改该字符串,// 例如修改为公司或组织名SetRegistryKey(_T("应用程序向导生成的本地应用程序"));int iArg;LPWSTR *szArgList;szArgList = CommandLineToArgvW(GetCommandLineW(), &iArg);if(NULL == szArgList){AfxMessageBox(_T("获取命令行参数失败!"));LocalFree(szArgList);return FALSE;}//实际只传4个参数,却判断参数个数是否为5?因为第一个参数是当前程序路径else if(5 != iArg){AfxMessageBox(_T("命令行参数个数不正确!"));LocalFree(szArgList);return FALSE;}else if((0 != _wcsicmp(szArgList[1], L"wnd")) || (0 != _wcsicmp(szArgList[3], L"path"))){AfxMessageBox(_T("命令行参数出错!"));LocalFree(szArgList);return FALSE;}HWND parentHwnd = (HWND)(int)(wcstod(szArgList[2], NULL));ASSERT(parentHwnd);CWnd *pWnd = CWnd::FromHandle(parentHwnd);ASSERT(pWnd);CString strConfigPath(szArgList[4]);LocalFree(szArgList);if(!PathFileExists(strConfigPath)){AfxMessageBox(_T("命令行参数指出的配置文件不存在!"));return FALSE;}//通过构造函数,将父窗口 Cwnd * 和配置文件路径传给子窗口CChildAppDlg dlg(pWnd, strConfigPath);m_pMainWnd = &dlg;INT_PTR nResponse = dlg.DoModal();if (nResponse == IDOK){// TODO: 在此处放置处理何时用“确定”来关闭// 对话框的代码}else if (nResponse == IDCANCEL){// TODO: 在此放置处理何时用“取消”来关闭// 对话框的代码}// 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,// 而不是启动应用程序的消息泵。return FALSE;}
//子窗口在 CChildAppDlg::OnInitDialog() 函数中读取配置文件信息
//ChildAppDlg.cppBOOL CChildAppDlg::OnInitDialog(){CDialog::OnInitDialog();//...// TODO: 在此添加额外的初始化代码TCHAR szInfo[1000];if(GetPrivateProfileString(_T("TEST"), _T("INFO"), _T("未找到 INFO 相关信息"), szInfo, 1000, m_strConfigPath)){GetDlgItem(IDC_SHOW)->SetWindowText(szInfo);}return TRUE; // 除非将焦点设置到控件,否则返回 TRUE}
0 0
- 应用程序的参数传递
- MFC应用程序参数传递
- 给应用程序传递参数
- Java 应用程序中的参数传递
- 在应用程序之间传递参数
- C# 向应用程序传递参数
- DeviceIoControl在应用程序和驱动程序传递参数的问题??
- 在Bootloader, WinCE,应用程序间传递参数的方法
- Android动态链接之应用程序的参数传递
- 为窗体应用程序传递启动参数
- 应用程序传递参数到水晶报表说明
- Flex中应用程序、模块之间参数传递
- 超连接的方式给应用程序传递参数方法的实现
- 在Bootloader, WinCE,应用程序间传递参数的方法(By ETDrawer@ARMCE)
- WinCE开发How to大集合之在Bootloader, WinCE,应用程序间传递参数的方法
- C# 同一应用程序域不同线程之间的参数传递方式
- C# 同一应用程序域不同线程之间的参数传递方式
- java的参数传递
- [ZOJ 3358] Green Dam Girl [动态规划+Floyd]
- hdu 3308 线段树单点更新 区间合并
- ASIHTTPRequest官方文档(一)
- Xcode非ARC项目中设置部分文件ARC支持
- create_proc_entry()函数已经被proc_create()函数取代。隐式申明函数create_proc_entry()问题
- 应用程序的参数传递
- 排序及函数对象的基本用法
- vi/vim的VISUAL BLOCK使用方法(文字选取粘贴功能)
- jQuery 参考手册 - 事件
- Java之命令模式(Command Pattern)
- 一些问题关于struts
- 黑马程序员--java File类课程笔记
- android滑动之Scroller
- Spring.NET学习笔记7——依赖对象的注入(基础篇)