有没有办法在同一个类中刷新()MFC CDialog
?
我已尝试使用Invalidate()
,RedrawWindow()
,UpdateWindow()
但未成功...
我会感激任何帮助。
答案 0 :(得分:0)
您必须关闭该程序并再次运行该程序。
使用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;
}