-1

有什么方法可以CDialog在同一个类中刷新() MFC 吗?

我曾尝试使用Invalidate(), RedrawWindow()UpdateWindow()但没有成功...

我将不胜感激任何帮助。

4

1 回答 1

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;
}
于 2018-03-09T02:32:42.143 回答