我在程序中以无模式的方式弹出一个窗口,然后按“最小化”按钮将其最小化,
接下来我要在程序中判断窗口时候已经打开,
如果已经打开、并且已经被最小化,则将其还原,
如果已经打开、并且没有被最小化、但是没有获得焦点,则使其获得焦点,
该怎么实现呢?
请各位大虾多多指点,谢谢!

解决方案 »

  1.   

    BOOL ShowWindow(
      HWND hWnd,     // handle to window
      int nCmdShow   // show state
    );
    SW_MAXIMIZE Maximizes the specified window. 
    SW_MINIMIZE Minimizes the specified window and activates the next top-level window in the Z order. 
    SW_RESTORE Activates and displays the window. If the window is minimized or maximized, the system restores it to its original size and position. An application should specify this flag when restoring a minimized window. 
    SW_SHOWMAXIMIZED Activates the window and displays it as a maximized window. 
    SW_SHOWMINIMIZED Activates the window and displays it as a minimized window. 
    SW_SHOWNORMAL Activates and displays a window. If the window is minimized or maximized, the system restores it to its original size and position. An application should specify this flag when displaying the window for the first time.
      

  2.   

    得到窗口当前的状态
    BOOL GetWindowPlacement(
      HWND hWnd,                // handle to window
      WINDOWPLACEMENT *lpwndpl  // position data
    );
    typedef struct _WINDOWPLACEMENT { 
        UINT  length; 
        UINT  flags; 
        UINT  showCmd; 
        POINT ptMinPosition; 
        POINT ptMaxPosition; 
        RECT  rcNormalPosition; 
    } WINDOWPLACEMENT; 
    showCmd 
    Specifies the current show state of the window. This member can be one of the following values. Value Meaning 
    SW_HIDE Hides the window and activates another window. 
    SW_MAXIMIZE Maximizes the specified window. 
    SW_MINIMIZE Minimizes the specified window and activates the next top-level window in the Z order. 
    SW_RESTORE Activates and displays the window. If the window is minimized or maximized, the system restores it to its original size and position. An application should specify this flag when restoring a minimized window. 
    SW_SHOW Activates the window and displays it in its current size and position.  
    SW_SHOWMAXIMIZED Activates the window and displays it as a maximized window. 
    SW_SHOWMINIMIZED Activates the window and displays it as a minimized window. 
    SW_SHOWMINNOACTIVE Displays the window as a minimized window. 
    This value is similar to SW_SHOWMINIMIZED, except the window is not activated.
     
    SW_SHOWNA Displays the window in its current size and position. 
    This value is similar to SW_SHOW, except the window is not activated.
     
    SW_SHOWNOACTIVATE Displays a window in its most recent size and position. 
    This value is similar to SW_SHOWNORMAL, except the window is not actived.
     
    SW_SHOWNORMAL Activates and displays a window. If the window is minimized or maximized, the system restores it to its original size and position. An application should specify this flag when displaying the window for the first time. 
      

  3.   

    1 在类申明中添加
    CAboutDlg *dlg;//该实例为CModelessDlg的一个成员变量2 在类构造函数中
    dlg=NULL;3 在cpp中实现
    void CModelessDlg::OnButton1()  //创建无模式对话框
    {
    if (!dlg)  //只创建以一次
    {
    dlg = new CAboutDlg;
    dlg->Create(IDD_ABOUTBOX,this);
    dlg->ShowWindow(SW_SHOW);
    }
    }void CModelessDlg::OnButton2() 
    {
    if (dlg)
    {
    if(dlg->IsIconic()) //如果被最小话,则还原
    dlg->ShowWindow(SW_RESTORE);
    else //获取焦点
    dlg->SetFocus();
    }
    }
      

  4.   

    ok, 谢谢各位,特别是zspwust(程序人生)