找到一个窗口并设置焦点

Ash*_*ish 0 mfc visual-c++

我想找一个窗口并设置焦点,但是窗口没有关注.

2.如果我使用HWND_TOP,那么它不会激活窗口,如果我使用HWND_TOPMOST,那么它会使窗口始终位于顶部.

谁能帮我 ??

HWND hwndAppDlg = ::FindWindowEx(hwndDesktop,NULL,lpszClass,lpszWindow);

    if(hwndAppDlg && IsWindow(hwndAppDlg))
    {
        CRect rcAppDlg;
        if( 0 == ::GetWindowRect(hwndAppDlg,rcAppDlg))
        {
            OutputDebugString(L"\n GetWindowRect failed...");           
            return FALSE;
        }
        if(0 == ::SetWindowPos(hwndAppDlg,HWND_TOPMOST,rcAppDlg.left,rcAppDlg.top,rcAppDlg.Width(),rcAppDlg.Height(),SWP_SHOWWINDOW))
        {
            OutputDebugString(L"\n SetWindowPos failed...");            
            return FALSE;
        }
        if(0 == ::PostMessage(hwndAppDlg,WM_SETFOCUS,0,0))
        {
            OutputDebugString(L"\n WM_SETFOCUS failed");        
            return FALSE;
        }

        return TRUE;
    }
Run Code Online (Sandbox Code Playgroud)

Ste*_*fan 5

您正在发送WM_SETFOCUS,但这不会设置焦点.如果该消息获得或失去焦点,则该消息被发送到控件,但是当发送/接收该消息时,焦点改变已经发生.

要实际设置焦点(您不需要发送WM_SETFOCUS消息),如果您知道对话框中的哪个控件应该获得焦点,请使用SetFocus(),或者使用SetForegroundWindow()将焦点设置为对话框本身并让对话框确定哪个子控件实际上将获得焦点.这两个API都将自动发送WM_SETFOCUS.