void CMyDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
CDialog::OnSysCommand(nID, lParam);
CWnd *pWnd = GetForegroundWindow();
        SetForegroundWindow();
pWnd->SetActiveWindow();
}如上一段程序,我想在对话框最小化后(并不是最小化到任务栏)把另外的窗口激活,怎么一运行pWnd->SetActiveWindow()就会出错呢,换成别的如SetFocus也会出错。这是怎么回事啊?

解决方案 »

  1.   

    GetForegroundWindow();返回的是一个零时的指针
    在你调用pWnd- >SetActiveWindow之前先用IsWindow判断一下是否有效句柄﹗
      

  2.   

    ::AfxGetApp()->m_pMainWnd->m_hWnd;
    ::AfxGetMainWnd()->m_hWnd;
    if( pWnd->m_hWnd && ::IsWindow(m_hWnd)){
    ...;
    }
      

  3.   

    搞编程技术,VC++,C#,JAVA,VB,可以加QQ群251623
      

  4.   

    首先要搞清楚,另外的窗口不一定是你写的程序,也不一定是MFC写的,可能还是别的语言写的,因此不能指望得到CWnd之类的东东。只能通过HWND操作:
    HWND hwnd = ::GetForegroundWindow();
    ::SetForegroundWindow(hwnd);
    ::SetActiveWindow(hwnd);
      

  5.   

    ACtiveWindow 激活的是文档框架里面的一个view,别的就会出错。