我正在为C++中的Windows Mobile开发,并且遇到了一个问题 - 我添加了我的窗口 类,并且在其中我使用了键盘输入WndProc
执行。问题是 我得到了错误的代码,并且错误地识别了诸如func键之类的键,并且使得它变得更糟,我得到的值(WM_KEYDOWN
消息的wParam
)作为两个电话之间的不同值我在这里进行测试 - 谁知道其他手机会发生什么。传输Win32 API WndProc从一个窗口到另一个窗口的密钥消息
在玩了很久以后,我发现如果我只是从 预定义的“EDIT”类创建一个窗口,我实际上是正确地得到输入(按字母/键)。
所以这个问题一定不能在手机中,而是获取消息的模式(在win32中有点新手,请原谅我缺乏知识)。我尝试过使用输入模式,但是使用EM_NUMBERS发送消息到我的窗口等,总是失败。
所以我想要做什么(虽然我打开的建议),不知何故只是从一些隐藏的编辑窗口中获取字符,并将它们转发到我的窗口。 (虽然我仍然需要我的窗口有焦点,所以它会对不同于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 2009-11-11 17:43:28