c语言中如何识别键盘输入的方向键? 20
比如写一个万年历,按左方向年份+1,按右方向年份-1,按上方向月份+1,按下方向月份-1.如何实现。楼下的不要搞复制,我没学过API,这貌似不是一个很难的问题,为什么要用...
比如写一个万年历,按左方向年份+1,按右方向年份-1,按上方向月份+1,按下方向月份-1.如何实现。
楼下的不要搞复制,我没学过API,这貌似不是一个很难的问题,为什么要用API? 展开
楼下的不要搞复制,我没学过API,这貌似不是一个很难的问题,为什么要用API? 展开
展开全部
用windows API里面有一个LRESULT CALLBACK WndProc( HWND hWnd, // 窗口的句柄
UINT uMsg, // 窗口的消息
WPARAM wParam, // 附加的消息内容
LPARAM lParam) // 附加的消息内容
这个消息响应函数,然后用switch语句对于 case WM_KEYDOWN:即键盘按下时的消息响应,这个时候再判断传进来的参数wParam的值,方向键对应键值分别为VK_UP,VK_DOWN,VK_LEFT,VK_RIGHT,下面是一个例子,你自己看看:
LRESULT CALLBACK WndProc( HWND hWnd, // 窗口的句柄
UINT uMsg, // 窗口的消息
WPARAM wParam, // 附加的消息内容
LPARAM lParam) // 附加的消息内容
{
switch (uMsg) // 检查Windows消息
{
case WM_ACTIVATE: // 监视窗口激活消息
{
if (!HIWORD(wParam)) // 检查最小化状态 HIWORD取后面参数的高16位
{
active=TRUE; // 程序处于激活状态
}
else
{
active=FALSE; // 程序不再激活
}
return 0; // 返回消息循环
}
case WM_SYSCOMMAND: // 系统中断命令
{
switch (wParam) // 检查系统调用
{
case SC_SCREENSAVE: // 屏保要运行?
case SC_MONITORPOWER: // 显示器要进入节电模式?
return 0; // 阻止发生
}
break; // 退出
}
case WM_CLOSE: // 收到Close消息?
{
PostQuitMessage(0); // 发出退出消息
return 0; // 返回
}
case WM_KEYDOWN: // 有键按下么?
{
switch (wParam)
{
case VK_UP:
MOVEUP();
return 0;
}
}
case WM_KEYUP: // 有键放开么?
{
keys[wParam] = FALSE; // 如果是,设为FALSE
return 0; // 返回
}
case WM_SIZE: // 调整OpenGL窗口大小
{
ReSizeGLScene(LOWORD(lParam),HIWORD(lParam)); // LoWord=Width,HiWord=Height
return 0; // 返回
}
}
return DefWindowProc(hWnd,uMsg,wParam,lParam);
}
希望对你有所帮助。
UINT uMsg, // 窗口的消息
WPARAM wParam, // 附加的消息内容
LPARAM lParam) // 附加的消息内容
这个消息响应函数,然后用switch语句对于 case WM_KEYDOWN:即键盘按下时的消息响应,这个时候再判断传进来的参数wParam的值,方向键对应键值分别为VK_UP,VK_DOWN,VK_LEFT,VK_RIGHT,下面是一个例子,你自己看看:
LRESULT CALLBACK WndProc( HWND hWnd, // 窗口的句柄
UINT uMsg, // 窗口的消息
WPARAM wParam, // 附加的消息内容
LPARAM lParam) // 附加的消息内容
{
switch (uMsg) // 检查Windows消息
{
case WM_ACTIVATE: // 监视窗口激活消息
{
if (!HIWORD(wParam)) // 检查最小化状态 HIWORD取后面参数的高16位
{
active=TRUE; // 程序处于激活状态
}
else
{
active=FALSE; // 程序不再激活
}
return 0; // 返回消息循环
}
case WM_SYSCOMMAND: // 系统中断命令
{
switch (wParam) // 检查系统调用
{
case SC_SCREENSAVE: // 屏保要运行?
case SC_MONITORPOWER: // 显示器要进入节电模式?
return 0; // 阻止发生
}
break; // 退出
}
case WM_CLOSE: // 收到Close消息?
{
PostQuitMessage(0); // 发出退出消息
return 0; // 返回
}
case WM_KEYDOWN: // 有键按下么?
{
switch (wParam)
{
case VK_UP:
MOVEUP();
return 0;
}
}
case WM_KEYUP: // 有键放开么?
{
keys[wParam] = FALSE; // 如果是,设为FALSE
return 0; // 返回
}
case WM_SIZE: // 调整OpenGL窗口大小
{
ReSizeGLScene(LOWORD(lParam),HIWORD(lParam)); // LoWord=Width,HiWord=Height
return 0; // 返回
}
}
return DefWindowProc(hWnd,uMsg,wParam,lParam);
}
希望对你有所帮助。
2011-11-13
展开全部
你可以搜索一下方向键对应的ASII码值,然后判断是对应哪个方向键,
或者应该可以直接判断输入的字符是'↑','↓','←','→'
或者应该可以直接判断输入的字符是'↑','↓','←','→'
更多追问追答
追问
这样好像不行,而且我也不知道 方向键的ASCII码。
追答
方向键(←): VK_LEFT (37)
方向键(↑): VK_UP (38)
方向键(→): VK_RIGHT (39)
方向键(↓): VK_DOWN (40)
这是方向键的ascii码 你试一下
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
键盘的所有键都有键值的,可以用函数bioskey(0)获取
更多追问追答
追问
能不能具体点啊?我不懂。谢谢了
追答
int ch=bioskey(0)
switch(ch)
{
case 18432: 上
case 20480:下
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询