尝试过在OnInitDialog和OnShow和
通过自己发消息作,但每次都是对话框还没显示出来,MessageBox就出来了

解决方案 »

  1.   

    我这里有一个解决方案,虽然不是很好,但是还是可以用
    定义一个全局函数
    UINT MyThreadProc( LPVOID pParam )
    {
    HWND hwnd = (HWND) pParam; while (!::IsWindowVisible(hwnd))
    {
    Sleep(50);
    } MessageBox(hwnd, _T("Test"), NULL, MB_OK);
    return 0;
    }在你的对话框的OnInitDialog中加入如下代码:
    AfxBeginThread(MyThreadProc, (VOID*) this->GetSafeHwnd());
    启动一个辅助线程来进行处理
      

  2.   

    To Earthdog(Earthdog:
    借鉴了一下你的思想,我用定时器搞得, OnInitDialog() 中SetTimer  OnTimer
    {
        if(IsWindowVisible())
    {
        MessageBox(...);
       KillTimer(....)
    但有没有更好的办法?
      

  3.   

    在DoModal()后调用MessageBox会出这种问题吗?我这里没有啊。
      

  4.   

    不错,just do like this:
    DoModal();
    MessageBox(..);
    不行吗?
      

  5.   

    我这有一种方法
    首先定义自己的消息
    #define WM_MYMESSAGE 50000
    在OnInitDialog中
    PostMessage(MYMESSAGE );
    第三步
    BOOL CDialogDlg::PreTranslateMessage(MSG* pMsg) 
    {
    if( IsDialogMessage( pMsg ) ){
    switch(pMsg->message)
    {     
    case WM_MYMESSAGE:
    MessageBox("");
            }
            return TRUE;
    }
        else
            return CDialog::PreTranslateMessage(pMsg);
    }
    当然也可以在对话框空闲的时候MessageBox,道理是一样,一个是系统内的消息,一个是自己定义的消息,但系统空闲发出的消息,不知为何找不到WM_KICKIDLE的定义,不过没关系,原理一样:)
      

  6.   

    晕,怎么会用那么复杂的方法实现?
    下面的方法最简单:
    Dialog类中加入一个成员变量
    BOOL m_bFirstPaint;
    构造函数中初始化:
    m_bFirstPaint = TRUE;
    重载Dialog的OnPaint:
    void CMyDlg::OnPaint() 
    {
    // 调用CDialog类的Paint处理。
    CDialog::OnPaint(); if (m_bFirstPaint)
    {
    AfxMessageBox("message");
    m_bFirstPaint = FALSE;
    }
    }搞定。
      

  7.   

    楼上,每次打开这个对话框都要有对话框,所以关闭对话框的时候也要
    m_bFirstPaint=true,要么在关闭窗口时复值,要么在关闭对话框时,我看加上代码也差不多也哪么多
      

  8.   

    处理这几个消息中的一个应该可以:wm_activate
    wm_setfocus
      

  9.   

    1.自定义一个消息!在对话框的消息循环中处理此消息(ON_MESSAGE)
    2.在自定义消息的处理函数中,调用MessageBox!
    3.在对话框的OnInitDialog函数的最后调用
    PostMessage(WM_YOURMSG,0,0);
      

  10.   

    To lwg7603(刑满释放人员): 这种方法是我第一次尝试的,but not work,呵呵
      

  11.   

    谁能够解释一下一个Windows创建后发送消息的顺序,50分送去!
      

  12.   

    例如WM_ONINITDIALOG--Wm_SHOWWINDOW_WM_SETFOCUS等
      

  13.   

    用 PeekMessage , 指定系统定义的消息范围, 当最后返回FALSE, 就是队列里没消息时, 再去掉范围. 不过这好像更复杂:)
      

  14.   

    没讲完整, SORRY.上面的办法与 lwg7603 一样, 需要事先 postmessage 自定义消息
      

  15.   

    用一个比较小的timer也可以嘛
      

  16.   

    linym(BlueDove):方法不对,不可能的,你的实现肯定有问题!