Я разрабатываю для Windows Mobile на C++, и у меня возникает проблема - я добавил свое окно , и в нем я вводил клавиатуру с моим WndProc
осуществления. Проблема заключается в том, что я получаю неправильные коды и неправильно идентифицирую ключи, такие как клавиша func, и ухудшаю значения, которые я получаю (wParam
сообщения WM_KEYDOWN
) в качестве разных значений между двумя телефонами У меня здесь для тестирования - кто знает, что будет на других телефонах.Перенос Win32 API WndProc Ключевые сообщения из одного окна в другое
После долгой игры я узнал, что если я только создаю окно из предопределенного класса «EDIT» 10, я действительно правильно понимаю вход (с точки зрения букв/клавиш).
Так что проблема не в телефоне, а в способах получения сообщений (немного новичков в win32, извините за недостаток знаний). Я пробовал играть с режимами ввода, но отправлял сообщение в мое окно с помощью EM_NUMBERS, и это всегда было неудачно.
Итак, что бы я хотел сделать (хотя я открыт для предложений), так или иначе просто получите символы из скрытого окна EDIT и переместите их в мое окно. (Хотя мне все еще нужно мое окно, чтобы иметь фокус, чтобы он правильно реагировал на сообщения, отличные от сообщений WM_KEYDOWN
и т.п.)
Есть ли способ сделать это?
Это 3'rd время я спрашиваю по этому вопросу, я бесконечно благодарен всем, кто пытался помочь до сих пор (хотя бы еще более благодарен, если бы я смог решить мою проблему)
Вот соответствующий код выдержки: регистрация
Класс:
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);
}
Я добавил некоторые фрагменты кода ниже – dan