私は C++ で Windows Mobile 用に開発していますが、問題が発生しています。ウィンドウ クラスを追加し、その中にキーボード入力をWndProc
実装しました。問題は、間違ったコードを取得していて、func キーなどのキーを間違って識別していることです。さらに悪いことに、取得している値 (メッセージwParam
の) が、WM_KEYDOWN
ここにある 2 台の電話の間で異なる値になっていることです。テスト用 - 他の電話で何が起こるかは誰にもわかりません。
何年も遊んだ後、定義済みの「EDIT」クラスからウィンドウを作成するだけで、実際に入力が正しく取得されることがわかりました(文字/キーに関して)。
したがって、問題は電話ではなく、メッセージを取得するモードにあるはずです (win32 の初心者で、知識がなくてすみません)。入力モードをいじってみましたが、EM_NUMBERS などを使用してウィンドウにメッセージを送信すると、常に失敗しました。
だから私がやりたいことは(私は提案を受け付けていますが)、どういうわけか隠し編集ウィンドウから文字を取得し、それらを私のウィンドウに転送することです。(ただし、ウィンドウにフォーカスを当てる必要があるため、異なるメッセージに正しく反応するWM_KEYDOWN
など)
これを行う方法はありますか?
この問題について私が質問するのはこれで 3 回目です。これまでに助けようとしたすべての人に永遠に感謝しています (ただし、私の問題を解決できた場合はさらに感謝します)。
関連するコードの抜粋は次のとおりです。
履修登録 :
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);
}