有什么方法可以CDialog
在同一个类中刷新() MFC 吗?
我曾尝试使用Invalidate()
, RedrawWindow()
,UpdateWindow()
但没有成功...
我将不胜感激任何帮助。
您必须关闭该程序并再次运行该程序。
用于GetModuleFileName
查找您的应用名称。使用 运行程序CreateProcess
。
您可以在应用程序路径之后添加命令行参数,例如“/restart?mydialog”,以便在程序重新启动时,它可以检查命令行参数并启动相应的对话框。例子:
void CMyDialog::OnSettings()
{
wchar_t buf[MAX_PATH];
GetModuleFileName(NULL, buf, _countof(buf));
wcscat_s(buf, L" /restart?mydialog");
AfxGetMainWnd()->SendMessage(WM_CLOSE);
STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi = { 0 };
CreateProcess(NULL, buf, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi);
}
现在转到CMainFrame
、CMyMDIFrameWnd
或应用程序的主窗口中的任何一个,并准备好在L"/restart?mydialog"
出现在命令行中时启动对话框。例子:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
...
CString s = GetCommandLine();
if (s.Find(L"/restart?mydialog") >= 0)
PostMessage(WM_COMMAND, ID_APP_ABOUT); //<== launch the correct dialog here
return 0;
}