我想在一个对话框完全显示后再自动开始做一些事情,该在哪个涵数中写代码?
我试着在OnInitDialog()里面加一句MessageBox(),可还是先显示的MessageBox
我在OnShowWindow()里加了也还是一样,MessageBox总是早于该对话框

解决方案 »

  1.   

    用线程或者消息
    CreateThread
      

  2.   

    CMyDialogApp::InitInstance()
    {  CMyDialog dlg;
      dlg.DoModal();
      // 这一句说明对话框已进入了模式消息循环, 用户不能响应
    }如上: 用线程, 在对话框初始化完后, 激发一个EVENT
      

  3.   

    也可以在ON_TIMER事件中,触发事件,结束之后,然后killTimer.
    BOOL CT1Dlg::OnInitDialog() 
    {
    CDialog::OnInitDialog();
    SetTimer(1,1000,NULL);
    return TRUE;  
    }
    void CT1Dlg::OnTimer(UINT nIDEvent) 
    {
         //进行事件处理
         KillTimer(1);
         CT1Dlg::OnTimer(nIDEvent);
    }
      

  4.   

    在OnInitDialog里PostMessage(),在消息响应里做你想做的事情
      

  5.   

    用线程是方便,但楼主的这个问题用线程显得过于复杂了。用ON_TIMER就行了。
    在CLASSWIZARD中,加上TIMER.
    BOOL Dlg::OnInitDialog() 
    {
    CDialog::OnInitDialog();
    SetTimer(1,1000,NULL);
    return TRUE;  
    }
    BOOL Dlg::OnTimer(UINT nIDEvent)
    {
    switch(nIDEvent)
    {
    case 1:
                   MessageBox();
                   KillTimer();
             break;
    default:;
    }
      

  6.   

    简单点就用定时器
    BOOL CTest6Dlg::OnInitDialog() 
    {
    CDialog::OnInitDialog(); SetTimer(1,1,NULL); return TRUE;  
    }
    void CTest6Dlg::OnTimer(UINT nIDEvent) 
    {
         KillTimer(1);     AfxMessageBox("11");     CTest6Dlg::OnTimer(nIDEvent);
    }
      

  7.   

    #define WM_SHOWDLG  WM_USER+100
    BEGIN_MESSAGE_MAP(CAaaDlg, CDialog)
    //{{AFX_MSG_MAP(CAaaDlg)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    //}}AFX_MSG_MAP
    ON_MESSAGE(WM_SHOWDLG,myShowDlg)
    END_MESSAGE_MAP()
    BOOL CAaaDlg::OnInitDialog()
    {
    CDialog::OnInitDialog();
    //...................
    // ::MessageBox(NULL,"bb","aa",MB_OK);
    PostMessage(WM_SHOWDLG,0,0);
    return TRUE;  // return TRUE  unless you set the focus to a control
    }
    void CAaaDlg::myShowDlg()
    {
    ::MessageBox(NULL,"bb","aa",MB_OK);
    }