WIN32 API编程中,添加按钮后,就不再相应键盘消息,为什么?
参照Charles Petzold的书编写WIN32 API程序
我编写的是单文档程序。有键盘控制。为什么在我添加了按钮过后,并在程序运行中按了那个按钮,键盘消息就不在相应了?
…………………………………………………………
LRESULT CALLBACK WndProc (……)
{
switch (message)
{
…………………………………………………………
case WM_CREATE:
renew = CreateWindow(TEXT("button"),TEXT("New Game"),
WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON,
baseX + 17 * grid, baseY + grid,
100, 30,
hwnd, (HMENU)ID_RENEW,
((LPCREATESTRUCT)lParam) -> hInstance, NULL);
return 0 ;
……………………………………………………
……………………………………………………
case WM_KEYDOWN:
switch (wParam)
{
case VK_UP:
…… ;
break ;
case VK_DOWN:
…… ;
break ;
………… ;
………… ;
}
return 0 ;
……………………………………………………
……………………………………………………
case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (……) ;
}
程序的大致的关键处结构就如上(其他地方没有错,就不写出来了),为什么我在WM_CREATE:中添加了CreateWindow(),添加一个按钮后,下面的WM_KEYDOWN就不再被相应了?
急!解决就给分。请大家帮忙啊!
问题点数:50、回复次数:5Top
1 楼xing_xing_xing(哈哈)回复于 2005-06-21 23:44:07 得分 30
点击按钮后焦点在按钮上,就不会响应主窗口的键盘消息了Top
2 楼72193(夺命飞刀)回复于 2005-06-22 08:17:29 得分 15
没错,焦点变了而已。Top
3 楼pipilupzj(皮皮鲁)回复于 2005-06-22 08:19:42 得分 5
case WM_KEYDOWN:
switch (wParam)
{
case VK_UP:
…… ;
break ;
case VK_DOWN:
…… ;
break ;
………… ;
………… ;
}
return 0 ;
是这段代码有问题
你直接return 0,自然把所有的键盘消息给拦截了
应该将return 0 改为break,将消息传给DefWindowProc (……) ;Top
4 楼szwpc(风色鸟)回复于 2005-06-22 10:07:14 得分 0
那么如何在按完按钮后,再将焦点转回到客户区啊?
谢谢Top
5 楼szwpc(风色鸟)回复于 2005-06-22 10:18:16 得分 0
谢谢各位!我明白了!Top




