当模态对话框在计时器中时,为什么任务栏不显示应用程序按钮? (MFC)

时间:2016-12-03 18:23:56

标签: c++ mfc

我想在OnTimer()函数内执行时显示模态对话框。

如下例所示:

void OnTimer(UINT_PTR timer)
{
    if(timer == 1){

        ...

        MainFrame.DoModal();

        ...
    }
    return;
}

虽然它成功显示了对话框,但任务栏没有显示应用按钮。

如下图所示:

dynamic array of dynamically allocated structs

原因是什么?如何解决这个问题?

下面是完整的代码:(前5秒显示正常模态对话框,其中任务栏上有app按钮。之后,它显示计时器中的模态对话框,任务栏上没有app按钮)< / p>

#include <afxwin.h> 
#include "resource.h"

class CMainDlg : public CDialog
{
public:
    CMainDlg(CWnd *wnd = NULL):CDialog(IDD_DIALOG2, wnd){}
    CString title;

    BOOL OnInitDialog()
    {
        CDialog::OnInitDialog();

        return TRUE;
    }
};

class CSpashDlg : public CDialog
{
public:
    CSpashDlg(CWnd *wnd = NULL):CDialog(IDD_DIALOG1, wnd){}
    CMainDlg MainFrame;

    BOOL OnInitDialog()
    {
        CDialog::OnInitDialog();

        SetTimer(1, 5000, 0);

        return TRUE;
    }

    void OnTimer(UINT_PTR timer)
    {
        if(timer == 1){
            KillTimer(timer);
            PostMessage(WM_COMMAND, IDCANCEL);

            MainFrame.DoModal();

            DestroyWindow();
        }
        return;
    }
    DECLARE_MESSAGE_MAP()
};

BEGIN_MESSAGE_MAP(CSpashDlg, CDialog)
    ON_WM_TIMER()
END_MESSAGE_MAP()

class MyApp : public CWinApp
{
public:
    BOOL InitInstance()
    {
        CWinApp::InitInstance();

        CSpashDlg Frame;
        Frame.DoModal();

        return true;
    }
} a_app;

0 个答案:

没有答案