如何设定一窗口焦点,使之成为当前窗口?

解决方案 »

  1.   

    既然是窗口焦点,那它就是当前窗口了。给你一个将别的程序提到当前的例子。
    CString strCaption = _T("Test");
    CWnd* pwndFirst = CWnd::FindWindow(NULL, strCaption);
    if (pwndFirst)
    {
    CWnd* pwndPopup = pwndFirst->GetLastActivePopup();
    pwndFirst->SetForegroundWindow();
    pwndFirst->ShowWindow(SW_SHOWNORMAL);
    if (pwndFirst != pwndPopup)
    pwndPopup->SetForegroundWindow(); 
    }
      

  2.   

    HWND SetActiveWindow( );
    的是:
    CWindow myWindow;
    myWindow.Attach(hWndFoo);   
    HWND hWndPrev = myWindow.SetActiveWindow();
    CWnd的是CWnd* activeWnd; 
    得到这个窗口的CWnd*对象,
    然后activeWnd.SetActiveWindow();这样不行吗?
      

  3.   

    KcSoft给出的代码只适合放在CYourDialogApp中的InitInstance()
    而放在CYourDialogDlg中对自己的程序则无用。
    其区别在于,程序调用InitInstance()时dialog还没有show出来,而当在程序中用的时候dialog已经show出来了。
    实验证明,只要在SetForegroundWindow()之前先ShowWindow(FALSE)就可以了。
    添加一button试试
    ShowWindow(FALSE); //加不加这句效果完全不一样
    Sleep(1000);
    SetForegroundWindow();
    ShowWindow(SW_SHOWNORMAL);我是低手,原因不是很清楚。不过这样肯定可以。在想要设为当前窗口之前先
    ShowWindow(FALSE)一下肯定可以。