关于按键处理

leechrockgames 2009-03-06 11:10:14
//windows部分代码



int main(void)
{
//HINSTANCE hInstance=hInst;
HINSTANCE hInstance= ::GetModuleHandle(NULL);
// HINSTANCE hInstance = hInst;
HWND m_hWnd; // generic window handle
MSG msg; // generic message

WNDCLASSEX winclass;//每个窗口,控件,列表框,对话框,和小部件实际上都是一个窗口

WNDCLASS wndClass = { CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW , MsgProc, 0, 0, hInstance,
LoadIcon( hInstance, MAKEINTRESOURCE(IDI_MAIN_ICON) ),
LoadCursor( NULL, IDC_ARROW ),
(HBRUSH)GetStockObject(BLACK_BRUSH),
NULL,WINDOW_CLASS_NAME };//BLACK_BRUSH //WHITE_BRUSH
RegisterClass( &wndClass );

// Create the render window WS_OVERLAPPEDWINDOW | WS_POPUP | WS_VISIBLE |WS_SYSMENU|| WS_CLIPCHILDREN |WS_CAPTION
m_hWnd = CreateWindow( WINDOW_CLASS_NAME,WINDOW_CLASS_NAME,
WS_OVERLAPPEDWINDOW|WS_CAPTION| WS_POPUP | WS_VISIBLE | WS_CLIPCHILDREN,
(GetSystemMetrics(SM_CXFULLSCREEN)-SCREEN_WIDTH)/2,
(GetSystemMetrics(SM_CYFULLSCREEN)-SCREEN_HEIGHT)/2,
SCREEN_WIDTH, SCREEN_HEIGHT, 0,
NULL, hInstance, 0 );


D3dCom.SAVE_HWND=m_hWnd;


ShowWindow( m_hWnd, SW_SHOWNORMAL );

UpdateWindow( m_hWnd );

ZeroMemory( &msg, sizeof(msg) );

D3dCom.GAME_INIT();

//0:PLAY AVI 4:STOP PLAY AVI
D3dCom.GameState=0;//全屏及播放AVI控制

while(1)
{

if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
// test if this is a quit
if (msg.message == WM_QUIT)
break;
// translate any accelerator keys
TranslateMessage(&msg);
// send the message to the window proc
DispatchMessage(&msg);
} // end if
LHxxGET_INPUT();

//这部分是检测键盘按下"1"时打印out字符,为什么按一下次,会打印2次???
if(LHxxDIK_KEYDOWN(DIK_1))
{
printf("out\n");
}



} // end while




UnregisterClass(WINDOW_CLASS_NAME, hInstance );
// return to Windows like this
return(msg.wParam);
}




这部分中..
//这部分是检测键盘按下"1"时打印out字符,为什么按一下次,会打印2次???
if(LHxxDIK_KEYDOWN(DIK_1))
{
printf("out\n");
}


...全文
133 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
leechrockgames 2009-03-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 dtor 的回复:]
LHxxGET_INPUT();

//这部分是检测键盘按下"1"时打印out字符,为什么按一下次,会打印2次???
if(LHxxDIK_KEYDOWN(DIK_1))
{
printf("out\n");
}

断点到printf("out\n");试试看,有可能你的程序在其他地方也有printf("out\n");
[/Quote]

这个原因可以排除.
leechrockgames 2009-03-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hairetz 的回复:]
先在while里加句调试信息,看看是一次while里打印了2次,还是一个if(LHxxDIK_KEYDOWN(DIK_1))里打印了2次.
[/Quote]

if(LHxxDIK_KEYDOWN(DIK_1))里打印了2次,我也不明白原因.
leechrockgames 2009-03-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 iu_81 的回复:]
printf("out\n");
break;
[/Quote]
这个不行,我不是想跳出循环
genius_tong 2009-03-07
  • 打赏
  • 举报
回复
up~~
dtor 2009-03-07
  • 打赏
  • 举报
回复
LHxxGET_INPUT();

//这部分是检测键盘按下"1"时打印out字符,为什么按一下次,会打印2次???
if(LHxxDIK_KEYDOWN(DIK_1))
{
printf("out\n");
}

断点到printf("out\n");试试看,有可能你的程序在其他地方也有printf("out\n");
  • 打赏
  • 举报
回复
将 msg 的各项参数打印出来,一看结果便知问题出在哪里了
dongpy 2009-03-07
  • 打赏
  • 举报
回复
单就这段代码,不好确定原因。问题可能出在LHxxDIK_KEYDOWN函数里。
dongpy 2009-03-07
  • 打赏
  • 举报
回复
会不会按键松开时,LHxxDIK_KEYDOWN函数也返回成功了?
  • 打赏
  • 举报
回复
先在while里加句调试信息,看看是一次while里打印了2次,还是一个if(LHxxDIK_KEYDOWN(DIK_1))里打印了2次.
iu_81 2009-03-06
  • 打赏
  • 举报
回复
printf("out\n");
break;

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧