现在主要的问题是对话框的初始化顺序是哪几步,initdialog是不是最后一步呢?
我发现如果在initdialog的最后执行最小化的话,他确实是最小化了,但是马上又会正常显示出来,是不是写的地方不对阿?

解决方案 »

  1.   

    在对话框中加一个变量,并初始化为true;
    bool m_bFirst; OnPaint()如下:
    void CMyPadDlg::OnPaint() 
    {
    if (IsIconic())
    {
    CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle
    int cxIcon = GetSystemMetrics(SM_CXICON);
    int cyIcon = GetSystemMetrics(SM_CYICON);
    CRect rect;
    GetClientRect(&rect);
    int x = (rect.Width() - cxIcon + 1) / 2;
    int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon
    dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
    if (m_bFirst) //添加了这几行。本方法也可用于启动隐藏
    {
    m_bFirst = false;
    ShowWindow(SW_SHOWMINIMIZED);
    }
    else
    {
    CDialog::OnPaint();
    }
    }
    }
      

  2.   

    你可以在主程序中的InitInstance()找到
    m_pMainWnd->ShowWindow(SW_SHOW);
    改为:
    m_pMainWnd->ShowWindow(SW_SHOW|SW_MINIMIZE);
      

  3.   

    SoLike,你的方法可以实现,不过那个onpaint不知道为何执行两次之后才可以,总之这个思想还是可以的,不过总感觉有点不太好
      

  4.   

    m_pMainWnd->ShowWindow(SW_SHOW|SW_MINIMIZE);
      

  5.   

    szclm(lm.c)
    的方法不我在2000下不行!!!
      

  6.   

    基于对话框的,用的是DOMODEL()
      

  7.   

    对话框用DoModal(),ShowWindow好像不行吧
      

  8.   

    ShowWindow不行,看看InitInstance()中的源代码:
    CMyDlg dlg;
    m_pMainWnd = &dlg;
    int nResponse = dlg.DoModal();  //<--------------------||
    if (nResponse == IDOK)
    {
     // TODO: Place code here to handle when the dialog is
     //  dismissed with OK
     }
    else if (nResponse == IDCANCEL)
    {
     // TODO: Place code here to handle when the dialog is
     //  dismissed with Cancel
     }
      

  9.   

    在 OnActivate(...) 里
    {
        CDialog::OnActivate(nState, pWndOther, bMinimized);
        if (m_bFirst) //添加了这几行。本方法也可用于启动隐藏
        {
            m_bFirst = false;
            ShowWindow(SW_SHOWMINIMIZED);
        }
    }
      

  10.   

    响应这个消息。
    void CYDlg::OnShowWindow(BOOL bShow, UINT nStatus) 
    {
            ShowWindow(SW_MINIMIZE);
    CDialog::OnShowWindow(bShow, nStatus);


    }