Work started on editor support.
This commit is contained in:
1 parent
0992ffee0d
commit
6f6d4040c4
9 files changed
+401
-5
No files matched your search
@@ -0,0 +1,81 @@
|
||||
// SPDX-License-Identifier: LGPL-2.1-or-later
|
||||
#include <windows.h>
|
||||
|
||||
static HWND editor, password;
|
||||
static int step;
|
||||
|
||||
static void key(UINT key, BOOL control, BOOL shift) {
|
||||
BYTE saved[256], state[256];
|
||||
GetKeyboardState(saved);
|
||||
CopyMemory(state, saved, sizeof(state));
|
||||
state[VK_CONTROL] = control ? 0x80 : 0;
|
||||
state[VK_SHIFT] = shift ? 0x80 : 0;
|
||||
SetKeyboardState(state);
|
||||
SendMessageW(editor, WM_KEYDOWN, key, 1);
|
||||
SetKeyboardState(saved);
|
||||
}
|
||||
|
||||
static LRESULT CALLBACK window_proc(HWND window, UINT message, WPARAM wp, LPARAM lp) {
|
||||
if (message == WM_TIMER) {
|
||||
switch (++step) {
|
||||
case 1: key(VK_RIGHT, FALSE, FALSE); break;
|
||||
case 2: key(VK_RIGHT, TRUE, FALSE); break;
|
||||
case 3: key(VK_DOWN, FALSE, FALSE); break;
|
||||
case 4: key(VK_HOME, FALSE, FALSE); break;
|
||||
case 5: key(VK_RIGHT, FALSE, TRUE); break;
|
||||
case 6: key(VK_RIGHT, FALSE, TRUE); break;
|
||||
case 7: key(VK_LEFT, FALSE, TRUE); break;
|
||||
case 8: key(VK_LEFT, FALSE, FALSE); break;
|
||||
case 9: key(VK_DELETE, FALSE, FALSE); break;
|
||||
case 10:
|
||||
key(VK_RIGHT, FALSE, FALSE);
|
||||
SendMessageW(editor, WM_CHAR, VK_BACK, 1);
|
||||
break;
|
||||
case 11: SendMessageW(editor, EM_SETSEL, 0, 5); break;
|
||||
case 12: SendMessageW(editor, WM_CLEAR, 0, 0); break;
|
||||
case 13: SetFocus(password); break;
|
||||
case 14: SendMessageW(password, WM_KEYDOWN, VK_LEFT, 1); break;
|
||||
case 15: SendMessageW(password, WM_CHAR, VK_BACK, 1); break;
|
||||
case 16:
|
||||
SetFocus(editor);
|
||||
SetWindowTextW(editor, L"\U0001f600 cafe");
|
||||
SendMessageW(editor, EM_SETSEL, 2, 2);
|
||||
break;
|
||||
case 17: key(VK_HOME, FALSE, FALSE); break;
|
||||
case 18:
|
||||
SendMessageW(editor, EM_SETREADONLY, TRUE, 0);
|
||||
SetFocus(password); SetFocus(editor);
|
||||
break;
|
||||
case 19: key(VK_DELETE, FALSE, FALSE); break;
|
||||
default:
|
||||
if (GetWindowTextLengthW(editor) != 7) ExitProcess(2);
|
||||
DestroyWindow(window); break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
if (message == WM_DESTROY) { PostQuitMessage(0); return 0; }
|
||||
return DefWindowProcW(window, message, wp, lp);
|
||||
}
|
||||
|
||||
int WINAPI WinMain(HINSTANCE instance, HINSTANCE previous, LPSTR args, int show) {
|
||||
(void)previous; (void)args; (void)show;
|
||||
WNDCLASSW cls = {0};
|
||||
cls.hInstance = instance; cls.lpszClassName = L"WineAccessEditFixture";
|
||||
cls.lpfnWndProc = window_proc; RegisterClassW(&cls);
|
||||
HWND window = CreateWindowW(cls.lpszClassName, L"Wine editor fixture", WS_OVERLAPPEDWINDOW,
|
||||
120, 120, 500, 300, NULL, NULL, instance, NULL);
|
||||
editor = CreateWindowW(L"Edit", L"alpha beta\r\nsecond line",
|
||||
WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_MULTILINE | ES_AUTOVSCROLL,
|
||||
10, 10, 450, 150, window, NULL, instance, NULL);
|
||||
password = CreateWindowW(L"Edit", L"private-password-fixture",
|
||||
WS_CHILD | WS_VISIBLE | ES_PASSWORD, 10, 180, 300, 30,
|
||||
window, NULL, instance, NULL);
|
||||
ShowWindow(window, SW_SHOW); SetForegroundWindow(window); SetFocus(editor);
|
||||
SendMessageW(editor, EM_SETSEL, 0, 0);
|
||||
SetTimer(window, 1, 350, NULL);
|
||||
MSG message;
|
||||
while (GetMessageW(&message, NULL, 0, 0) > 0) {
|
||||
TranslateMessage(&message); DispatchMessageW(&message);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
Reference in new issue
Block a user