在同一对话框类中刷新CDialog MFC

时间:2018-03-07 15:09:39

标签: mfc cdialog

有没有办法在同一个类中刷新()MFC CDialog

我已尝试使用Invalidate()RedrawWindow()UpdateWindow()但未成功...

我会感激任何帮助。

1 个答案:

答案 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);
}

现在转到CMainFrameCMyMDIFrameWnd或应用程序主窗口中的任何一个,并准备好在命令行中出现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;
}