Найти окно и установить на нем фокус - PullRequest
0 голосов
/ 18 января 2010

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 ]

5 голосов
/ 18 января 2010

Вы отправляете WM_SETFOCUS, но это не устанавливает фокус. Это сообщение отправляется элементу управления, если он получил или потерял фокус, но когда это сообщение отправлено / получено, изменение фокуса уже произошло.

Чтобы фактически установить фокус (вам не нужно отправлять сообщение WM_SETFOCUS), используйте SetFocus (), если вы знаете, какой элемент управления в диалоговом окне должен получить фокус, или SetForegroundWindow (), чтобы установить фокус на само диалоговое окно и позволить диалогу определить, какой субконтроль фактически получит фокус. Оба эти API будут автоматически отправлять WM_SETFOCUS.

2 голосов
/ 18 января 2010

Как насчет ShowWindow (hwndAppDlg, SW_SHOW);

0 голосов
/ 18 января 2010

Я использовал ::SetForegroundWindow(hwndAppDlg), чтобы активировать и установить фокус на диалоге, и он работает круто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...