Я делал это с нуля (см. Код ниже), он работает, но каждый раз, когда вы Добавьте новую базовую функциональность и используйте ее, вы обнаружите, что еще одна недостающая функция, которая, тем не менее, распространена в таком диалоговом окне с текстовыми входами (присутствует во многих программных программных делах!):
- Вы должны вручную кодировать enter => отправить "ok" < /li>
Тогда вы понимаете, что клавиши со стрелками не работают < /li>
Вы добавляете эту функцию, затем Вы понимаете, что выбор/выделение в синем не работайте и - То же самое для ctrl+c , ctrl+v , ctrl+x , ctrl+a
- То же самое для контекстного меню
- ...
- Тогда вы понимаете del не поддерживается ни
/> - Обновление: новое, что я забыл: вкладка должен процитироваться на фокусировке из входного виджета, кнопка OK, кнопка отмены
- Список бесконечный
LRESULT CALLBACK EditWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
switch (message) {
case WM_CREATE:
hEdit = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "", WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL | ES_LEFT, 10, 10, 580, 25, hWnd, (HMENU)ID_EDIT, NULL, NULL);
SetFocus(hEdit);
originalEditProc = (WNDPROC)GetWindowLongPtr(hEdit, GWLP_WNDPROC);
SetWindowLongPtr(hEdit, GWLP_WNDPROC, (LONG_PTR)EditWndProc);
CreateWindow("BUTTON", "OK", WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON, 10, 50, 80, 30, hWnd, (HMENU)ID_OK, NULL, NULL);
CreateWindow("BUTTON", "Cancel", WS_CHILD | WS_VISIBLE, 100, 50, 80, 30, hWnd, (HMENU)ID_CANCEL, NULL, NULL);
break;
case WM_COMMAND: {
int wmId = LOWORD(wParam);
if (wmId == ID_OK) {
GetWindowText(hEdit, g_input, sizeof(g_input));
DestroyWindow(hWnd);
} else if (wmId == ID_CANCEL) {
g_input[0] = '\0';
DestroyWindow(hWnd);
}
break;
}
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
LRESULT CALLBACK EditWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
switch (message) {
case WM_KEYDOWN:
if (wParam == VK_RETURN) {
GetWindowText(hWnd, g_input, sizeof(g_input));
HWND parentWnd = GetParent(hWnd);
PostMessage(parentWnd, WM_COMMAND, ID_OK, 0);
return 0; // Prevent default processing (no newline in edit control)
}
break;
default:
if (originalEditProc) {
return CallWindowProc(originalEditProc, hWnd, message, wParam, lParam);
}
break;
}
return 0;
}
Подробнее здесь: https://stackoverflow.com/questions/794 ... ith-winapi
Мобильная версия