Something went wrong. Try again.
Reactos
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220/* * PROJECT: ReactOS API tests * LICENSE: LGPL-2.1+ (https://spdx.org/licenses/LGPL-2.1+) * PURPOSE: Test for SetFocus/GetFocus/GetGUIThreadInfo * COPYRIGHT: Copyright 2021 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com> */
#include "precomp.h"#include <dlgs.h> // psh1, ...#include <process.h>
#define INTERVAL 80
static DWORD s_dwMainThreadID;
static HWND GetMainThreadFocus(void){ GUITHREADINFO gui = { sizeof(gui) }; GetGUIThreadInfo(s_dwMainThreadID, &gui); return gui.hwndFocus;}
static unsigned __stdcall thread_proc_0(void *arg){ HWND hwnd = arg;
ok_int(GetFocus() == NULL, TRUE); ok_int(GetMainThreadFocus() == GetDlgItem(hwnd, IDOK), TRUE); SendMessageA(hwnd, WM_NEXTDLGCTL, FALSE, FALSE);
ok_int(GetFocus() == NULL, TRUE); ok_int(GetMainThreadFocus() == GetDlgItem(hwnd, IDCANCEL), TRUE); SendMessageA(hwnd, WM_NEXTDLGCTL, FALSE, FALSE);
ok_int(GetFocus() == NULL, TRUE); ok_int(GetMainThreadFocus() == GetDlgItem(hwnd, psh1), TRUE); SendMessageA(hwnd, WM_NEXTDLGCTL, FALSE, FALSE);
ok_int(GetFocus() == NULL, TRUE); ok_int(GetMainThreadFocus() == GetDlgItem(hwnd, IDOK), TRUE); SendMessageA(hwnd, WM_NEXTDLGCTL, TRUE, FALSE);
ok_int(GetFocus() == NULL, TRUE); ok_int(GetMainThreadFocus() == GetDlgItem(hwnd, psh1), TRUE); keybd_event(VK_TAB, KEYEVENTF_KEYUP, 0, 0); Sleep(INTERVAL);
ok_int(GetFocus() == NULL, TRUE); ok_int(GetMainThreadFocus() == GetDlgItem(hwnd, IDOK), TRUE); keybd_event(VK_TAB, KEYEVENTF_KEYUP, 0, 0); Sleep(INTERVAL);
ok_int(GetFocus() == NULL, TRUE); ok_int(GetMainThreadFocus() == GetDlgItem(hwnd, IDCANCEL), TRUE); keybd_event(VK_TAB, KEYEVENTF_KEYUP, 0, 0); Sleep(INTERVAL);
ok_int(GetFocus() == NULL, TRUE); ok_int(GetMainThreadFocus() == GetDlgItem(hwnd, psh1), TRUE); keybd_event(VK_TAB, KEYEVENTF_KEYUP, 0, 0); Sleep(INTERVAL);
ok_int(GetFocus() == NULL, TRUE); ok_int(GetMainThreadFocus() == GetDlgItem(hwnd, IDOK), TRUE);
PostMessageA(hwnd, WM_COMMAND, psh3, 0); return 0;}
static unsigned __stdcall thread_proc_1(void *arg){ HWND hwnd = arg;
ok_int(GetFocus() == NULL, TRUE); ok_int(GetMainThreadFocus() == NULL, TRUE); keybd_event(VK_TAB, KEYEVENTF_KEYUP, 0, 0); Sleep(INTERVAL);
ok_int(GetFocus() == NULL, TRUE); ok_int(GetMainThreadFocus() == NULL, TRUE); keybd_event(VK_TAB, KEYEVENTF_KEYUP, 0, 0); Sleep(INTERVAL);
ok_int(GetFocus() == NULL, TRUE); ok_int(GetMainThreadFocus() == NULL, TRUE);
PostMessageA(hwnd, WM_COMMAND, psh3, 0); return 0;}
static unsigned __stdcall thread_proc_2(void *arg){ HWND hwnd = arg;
ok_int(GetFocus() == NULL, TRUE); ok_int(GetMainThreadFocus() == GetDlgItem(hwnd, IDCANCEL), TRUE); keybd_event(VK_TAB, KEYEVENTF_KEYUP, 0, 0); Sleep(INTERVAL);
ok_int(GetFocus() == NULL, TRUE); ok_int(GetMainThreadFocus() == GetDlgItem(hwnd, psh1), TRUE); keybd_event(VK_TAB, KEYEVENTF_KEYUP, 0, 0); Sleep(INTERVAL);
ok_int(GetFocus() == NULL, TRUE); ok_int(GetMainThreadFocus() == GetDlgItem(hwnd, IDOK), TRUE); keybd_event(VK_TAB, KEYEVENTF_KEYUP, 0, 0); Sleep(INTERVAL);
PostMessageA(hwnd, WM_COMMAND, psh4, 0); return 0;}
static INT_PTR CALLBACKDialogProc_0(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam){ HANDLE hThread; switch (uMsg) { case WM_INITDIALOG: ok_int(GetFocus() == NULL, TRUE); SetFocus(GetDlgItem(hwnd, IDOK)); ok_int(GetFocus() == GetDlgItem(hwnd, IDOK), TRUE); SendMessageA(hwnd, WM_NEXTDLGCTL, FALSE, FALSE);
ok_int(GetFocus() == GetDlgItem(hwnd, IDCANCEL), TRUE); SendMessageA(hwnd, WM_NEXTDLGCTL, TRUE, FALSE);
ok_int(GetFocus() == GetDlgItem(hwnd, IDOK), TRUE); SendMessageA(hwnd, WM_NEXTDLGCTL, FALSE, FALSE);
ok_int(GetFocus() == GetDlgItem(hwnd, IDCANCEL), TRUE); SendMessageA(hwnd, WM_NEXTDLGCTL, FALSE, FALSE);
ok_int(GetFocus() == GetDlgItem(hwnd, psh1), TRUE); SendMessageA(hwnd, WM_NEXTDLGCTL, FALSE, FALSE);
ok_int(GetFocus() == GetDlgItem(hwnd, IDOK), TRUE); SetFocus(GetDlgItem(hwnd, IDCANCEL)); PostMessageA(hwnd, WM_COMMAND, psh2, 0); return TRUE;
case WM_COMMAND: switch (LOWORD(wParam)) { case psh2: ok_int(GetFocus() == GetDlgItem(hwnd, IDOK), TRUE); hThread = (HANDLE)_beginthreadex(NULL, 0, thread_proc_0, hwnd, 0, NULL); CloseHandle(hThread); break;
case psh3: ok_int(GetFocus() == GetDlgItem(hwnd, IDOK), TRUE); EndDialog(hwnd, IDCLOSE); break; } break; } return 0;}
static INT_PTR CALLBACKDialogProc_1(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam){ HANDLE hThread; switch (uMsg) { case WM_INITDIALOG: SetFocus(GetDlgItem(hwnd, IDCANCEL)); PostMessageA(hwnd, WM_COMMAND, psh2, 0); return FALSE;
case WM_COMMAND: switch (LOWORD(wParam)) { case psh2: ok_int(GetFocus() == GetDlgItem(hwnd, IDCANCEL), TRUE); EnableWindow(GetDlgItem(hwnd, IDCANCEL), FALSE); ok_int(GetFocus() == NULL, TRUE);
hThread = (HANDLE)_beginthreadex(NULL, 0, thread_proc_1, hwnd, 0, NULL); CloseHandle(hThread); break;
case psh3: ok_int(GetFocus() == NULL, TRUE); EnableWindow(GetDlgItem(hwnd, IDCANCEL), TRUE);
ok_int(GetFocus() == NULL, TRUE); SetFocus(GetDlgItem(hwnd, IDCANCEL)); ok_int(GetFocus() == GetDlgItem(hwnd, IDCANCEL), TRUE);
hThread = (HANDLE)_beginthreadex(NULL, 0, thread_proc_2, hwnd, 0, NULL); CloseHandle(hThread); break;
case psh4: ok_int(GetFocus() == GetDlgItem(hwnd, IDCANCEL), TRUE); ShowWindow(GetDlgItem(hwnd, IDCANCEL), SW_HIDE);
ok_int(GetFocus() == GetDlgItem(hwnd, IDOK), TRUE); ShowWindow(GetDlgItem(hwnd, IDCANCEL), SW_SHOW);
ok_int(GetFocus() == GetDlgItem(hwnd, IDOK), TRUE); EndDialog(hwnd, IDCLOSE); break; } break; } return 0;}
START_TEST(SetFocus){ s_dwMainThreadID = GetCurrentThreadId(); Sleep(INTERVAL); ok_int((INT)DialogBoxA(GetModuleHandleA(NULL), "SETFOCUS", NULL, DialogProc_0), IDCLOSE); ok_int((INT)DialogBoxA(GetModuleHandleA(NULL), "SETFOCUS", NULL, DialogProc_1), IDCLOSE);}