Я занимаюсь разработкой для Windows Mobile на C ++, и у меня возникла проблема - я добавил свое окно
класс, и в нем я ввод клавиатуры с моей WndProc
реализацией. Проблема в
что я получаю неправильные коды и неправильно идентифицирую такие ключи, как ключ func, и, что еще хуже, получаемые значения (wParam
сообщения WM_KEYDOWN
) как разные значения между двумя телефонами У меня тут для тестирования - кто знает, что будет на других телефонах.
Поработав с ним целую вечность, я обнаружил, что если я только создаю окно из
предопределенный класс "EDIT", я действительно получаю ввод правильно (с точки зрения букв / ключей).
Так что проблема должна быть не в телефоне, а в способах получения сообщений (немного новичок в win32, извините за отсутствие знаний). Я пытался поиграться с режимами ввода, но отправка сообщения в мое окно с использованием EM_NUMBERS и т. Д. Всегда не удалась.
Итак, что я хотел бы сделать (хотя я открыт для предложений), так или иначе, просто получить символы из какого-то скрытого окна РЕДАКТИРОВАНИЯ и направить их в мое окно. (Хотя мне все еще нужно, чтобы мое окно имело фокус, чтобы оно правильно реагировало на сообщения, отличные от WM_KEYDOWN
и т.п.)
Есть ли способ сделать это?
Это третий раз, когда я спрашиваю об этой проблеме, я бесконечно благодарен всем, кто пытался помочь до сих пор (хотя был бы еще более благодарен, если бы мне удалось решить мою проблему)
Вот соответствующие выдержки из кода:
Класс регистрации:
WNDCLASS wc; wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ROADMAP));
wc.hCursor = 0;
wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = 0;
wc.lpszClassName = szWindowClass;
window creation
if (width == -1) width = CW_USEDEFAULT;
if (height == -1) height = CW_USEDEFAULT;
RoadMapMainWindow = CreateWindow(g_szWindowClass, szTitle, OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, width, height,
NULL, NULL, g_hInst, NULL);
MessageLoop
// Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
выдержка WNDPROC:
case WM_KEYDOWN:
{
WORD Code = (WORD)wParam;
int iRepeatTimes = (lParam & 0x0000FFFF);
int iScanCode = (lParam & 0x00FF0000) >> 16;
BOOL bALT_IsDown = (lParam & 0x20000000)? TRUE: FALSE;
BOOL bAlreadyPressed= (lParam & 0x40000000)? TRUE: FALSE;
BOOL bNowReleased = (lParam & 0x80000000)? TRUE: FALSE;
return DefWindowProc(hWnd, message, wParam, lParam);
}