点击按钮,隐藏SELECT窗口,再显示PASSDLG窗口即可啊

解决方案 »

  1.   

    没有父子关系、没有置顶窗口(WS_EX_TOPMOST)的情况下
    直接CWnd::SetForegroundWindow()就可以了
      

  2.   

    可以调用SetForegroundWindow()
    或者通过设置窗口置顶也可以吧,不过SELECT要是非模态的,不然显示了PASSDLG也操作不了
      

  3.   


    是这样的,本来这个程序是PASSDLG先显示的,后来我插入了一个SELECT窗体,想让SELECT先显示,并通过一个按钮响应再让PASSDLG显示出来。
      

  4.   


    void 按钮被点击()
    {
        if(PASSDLG.IsIconic())
        {
            //窗口被最小化了,发送消息还原
            PASSDLG.SendMessage(WM_SYSCOMMAND,SC_RESTORE,NULL);
        }
        if(!PASSDLG.IsWindowVisible())
        {
            //窗口被隐藏了,用ShowWindow显示
            PASSDLG.ShowWindow(SW_SHOW);
        }
        //推向前台并激活该窗口
        PASSDLG.SetForegroundWindow();
    }
      

  5.   

    MFC中文说明手册CWnd::SetForegroundWindowBOOL SetForegroundWindow( );返回值:如果函数成功,则返回非零值;否则返回0。说明:
    这个函数将创建窗口的线程推向前台并激活该窗口。键盘输入被定向到这个窗口,并且将向用户显示不同的视觉提示。前台窗口是指用户当前工作的窗口。前台窗口仅针对顶层窗口而言(框架窗口或对话框)。
      

  6.   

    void 按钮被点击()
    {
        if(PASSDLG.IsIconic())
        {
            //窗口被最小化了,发送消息还原
            PASSDLG.SendMessage(WM_SYSCOMMAND,SC_RESTORE,NULL);
        }
        if(!PASSDLG.IsWindowVisible())
        {
            //窗口被隐藏了,用ShowWindow显示
            PASSDLG.ShowWindow(SW_SHOW);
        }
        //推向前台并激活该窗口
        PASSDLG.SetForegroundWindow();
    }
    void 按钮被点击()
    {
        if(PASSDLG.IsIconic())
        {
            //窗口被最小化了,发送消息还原
            PASSDLG.SendMessage(WM_SYSCOMMAND,SC_RESTORE,NULL);
        }
        if(!PASSDLG.IsWindowVisible())
        {
            //窗口被隐藏了,用ShowWindow显示
            PASSDLG.ShowWindow(SW_SHOW);
        }
        //推向前台并激活该窗口
        PASSDLG.SetForegroundWindow();
    }
    我这个按钮是在SELECT窗体上的,具体功能是这样的:PASSDLG是一个输入用户名密码的登录界面,SELECT是选择登录身份的登录界面,原本程序是直接显示输入用户名密码的登陆界面,没有选择身份的界面,现在我加入一个SELECT窗体但是,问题是编译连接后还是PASSDLG界面先显示,现在我想让SELECT先显示出来,选择完身份后再显示出用户名密码(PASSDLG)界面。
      我MFC很水之前看这个PASSDLG的窗体初始化好像是oninitdialog()完成的,我想能不能把PASSDLG的初始化删除掉,改到SELECT上面,或者别的办法?
      

  7.   

    在PASSDLG的APP类的InitInstance()函数里:CSELECTDLG dlg;
    dlg.DoModal();
      

  8.   


    CSELECTDLG dlg;
    if(dlg.DoModal() != IDOK)
        return FALSE;
      

  9.   


    问题是PASSDLG.CPP里面没有这个函数
    代码如下:
    // PASSDLG.cpp : implementation file
    //#include "stdafx.h"
    #include "cyj.h"
    #include "PASSDLG.h"#ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif/////////////////////////////////////////////////////////////////////////////
    // PASSDLG dialog
    PASSDLG::PASSDLG(CWnd* pParent /*=NULL*/)
    : CDialog(PASSDLG::IDD, pParent)
    {
    //{{AFX_DATA_INIT(PASSDLG)
    m_password = _T("");
    m_user = _T("");
    //}}AFX_DATA_INIT
    }
    void PASSDLG::DoDataExchange(CDataExchange* pDX)
    {
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(PASSDLG)
    DDX_Text(pDX, IDC_PASSWORD, m_password);
    DDX_Text(pDX, IDC_USER, m_user);
    //}}AFX_DATA_MAP
    }BEGIN_MESSAGE_MAP(PASSDLG, CDialog)
    //{{AFX_MSG_MAP(PASSDLG)
    ON_WM_TIMER()
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
    // PASSDLG message handlersvoid PASSDLG::OnTimer(UINT nIDEvent) 
    {t--;
    CString str;
    str.Format("登陆窗口%d秒后自动关闭",t);
    SetWindowText(str);
    if(t==-1)
    {
    KillTimer(1);
    OnCancel();
    }CDialog::OnTimer(nIDEvent);
    }BOOL PASSDLG::OnInitDialog() 
    {
    CDialog::OnInitDialog();
    UpdateData(FALSE);
    SetTimer(1,1000,NULL);

    return TRUE;  // return TRUE unless you set the focus to a control
    // EXCEPTION: OCX Property Pages should return FALSE
    }
      

  10.   

    不是这个类,是PASSApp
    BOOL PASSApp::InitInstance()
    实在找不到你就查找InitInstance(
    然后写上CSELECTDLG dlg;
    if(dlg.DoModal() != IDOK)
        return FALSE;