代码之家  ›  专栏  ›  技术社区  ›  Ashish

找到一个窗口并对其设置焦点

  •  0
  • Ashish  · 技术社区  · 16 年前

    1.我想找到一个窗口并在其上设置焦点,但该窗口没有获取焦点。

    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;
        }
    
    3 回复  |  直到 16 年前
        1
  •  6
  •   Stefan    16 年前

    您正在发送WM_SETFOCUS,但这不会设置焦点。如果控件获得或失去焦点,则会将该消息发送给控件,但当发送/接收该消息时,焦点已发生更改。

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

        2
  •  2
  •   Timbo    16 年前
        3
  •  0
  •   Ashish    16 年前

    我用过 ::SetForegroundWindow(hwndAppDlg) 要激活并设置对话框的焦点,它会很酷。