上一个内容:31.加载配置文件中的游戏到辅助列表
以 31.加载配置文件中的游戏到辅助列表 它的代码为基础进行修改
效果图:
添加列表双击事件
实现代码:
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
*pResult = 0;
int index = pNMItemActivate->iItem;
if (index < 0)return;
CString GamePath = ExeLst.GetItemText(index, 2);
CString GameExe = ExeLst.GetItemText(index, 1);
CString GameCmds = ExeLst.GetItemText(index, 3);
CString GameDlls = ExeLst.GetItemText(index, 4);
// 用来指定创建时进程的主窗口的窗口工作站、桌面、标准句柄和外观。
STARTUPINFO si{};
si.cb = sizeof(si);
PROCESS_INFORMATION prinfo{};
CreateProcess(GameExe,
GameCmds.GetBuffer(),
NULL,NULL,
FALSE,
// 新进程的主线程处于挂起状态创建,在调用 ResumeThread 函数之前不会运行。
CREATE_SUSPENDED,
NULL,
GamePath,
&si,
&prinfo
);
// 让游戏继续运行
ResumeThread(prinfo.hThread);
之前保存游戏路径的地方传参写反了,修改为下图的样子:
void CWndAddGame::OnBnClickedButton3()
{
CWndINJ* p = (CWndINJ*)father;
UpdateData(TRUE);
p->AddGame(GameName, GameFullPath, GamePath, GameCmds, DllPath);
CDialog::OnCancel();
}
列表加载GameDlls写错了,修改为下图样子:
void CWndINJ::LoadGame()
{
int count = GetPrivateProfileInt(L"main", L"count", 0, GameIni);
for (int i = 0; i < count; i++) {
CString GameName, GameExe, GamePath, GameCmds, GameDlls, _AppName;
_AppName.Format(L"count_%d", i+1);
wchar_t wRead[0xFF];
GetPrivateProfileString(_AppName, L"GameName", L"", wRead, 0xFF, GameIni);
GameName.Format(L"%s", wRead);
GetPrivateProfileString(_AppName, L"GamePath", L"", wRead, 0xFF, GameIni);
GameExe.Format(L"%s", wRead);
GetPrivateProfileString(_AppName, L"GameFullPath", L"", wRead, 0xFF, GameIni);
GamePath.Format(L"%s", wRead);
GetPrivateProfileString(_AppName, L"GameCmds", L"", wRead, 0xFF, GameIni);
GameCmds.Format(L"%s", wRead);
GetPrivateProfileString(_AppName, L"GameDlls", L"", wRead, 0xFF, GameIni);
GameDlls.Format(L"%s", wRead);
ExeLst.InsertItem(i, GameName);
ExeLst.SetItemText(i, 1, GameExe);
ExeLst.SetItemText(i, 2, GamePath);
ExeLst.SetItemText(i, 3, GameCmds);
ExeLst.SetItemText(i, 4, GameDlls);
}
}