我用GetNextWindow的方法发现必须要点击那个窗口,不然不能直接设置焦点到本窗口的下面那个窗口
有没有其他更好的方法可以直接找到下面的那个窗口的句柄     或者  直接焦点设置到本窗口下面的那个窗口

解决方案 »

  1.   

    FindWindow
    用spy++去查窗口类名
    caption不是很靠谱
      

  2.   


    #include <vector>
    using namespace std;vector<HWND> vec;BOOL CALLBACK EnumProc(HWND hWnd, LPARAM lParam)
    {
    if(::IsWindowVisible(hWnd))
    {
    vec.push_back(hWnd);
    }
    return TRUE;
    }void CXXDlg::OnOK() 
    {
    // TODO: Add extra validation here

    EnumWindows(EnumProc, NULL); HWND hWnd = NULL;
    for(vector<HWND>::const_iterator iter = vec.begin(); iter != vec.end(); iter++)
    {
    if(GetSafeHwnd() == *iter && (++iter) != vec.end())
    {
    hWnd = *iter;
    break;
    }
    }
    if(hWnd)
    {
    #define MAX_BUFFER 256
    TCHAR buf[MAX_BUFFER] = {0};
    ::GetWindowText(hWnd, buf, MAX_BUFFER);
    AfxMessageBox(buf);
    }
    }
      

  3.   

    CWnd::GetNextWindow()
    ::GetNextWindow(m_hWnd,GW_HWNDNEXT);
    不知道为什么,我发现我这样老是取不到Z order 下面的窗.你要设焦点到下面的窗,直接发送一个  切换 的组合键
    keybd_event(VK_MENU,0,0,0);
    keybd_event(VK_TAB,0,0,0);
    keybd_event(VK_TAB,0,KEYEVENTF_KEYUP,0);
    keybd_event(VK_MENU,0,KEYEVENTF_KEYUP,0);
    试过可以凑合.
      

  4.   

    9楼,能解释一下
            if(GetSafeHwnd() == *iter && (++iter) != vec.end())
            {
                hWnd = *iter;
                break;
            }
    这个的意思吗?是什么原理找到最上面的下一个窗的啊?