BOOL CFccTestDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_ESCAPE)
return TRUE;
if(pMsg->message==WM_KEYDOWN)
{
ProcessHotKey(pMsg->wParam);
return TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}
void CFccTestDlg::ProcessHotKey(WPARAM wParam)
{
CWnd *a;
int nFullWidth=GetSystemMetrics(SM_CXSCREEN);
int nFullHeight=GetSystemMetrics(SM_CYSCREEN);
CRect rect;
(this->GetDlgItem(IDC_PIC))->GetWindowRect(&rect);
CPoint p(rect.left,rect.top);
int px=rect.left;
switch(wParam)
{
case VK_LEFT:
if (GetAsyncKeyState(VK_SCROLL)&&0x8000)
{
px=px-5;
a=this-> GetDlgItem(IDC_PIC);
a-> SetWindowPos(NULL,px,rect.top,8,5,1);
if((px+rect.Width())<0)
{
a-> SetWindowPos(NULL,nFullWidth-rect.Width()/2,rect.top,8,5,1);
}
else if(px>nFullWidth)
{
a-> SetWindowPos(NULL,0,rect.top,8,5,1);
}
}
RefreshPromptInfo();//刷新
break;
case VK_RIGHT:
if (GetAsyncKeyState(VK_SCROLL)&&0x8000)
{
px=px+5;
a=this-> GetDlgItem(IDC_PIC);
a-> SetWindowPos(NULL,px,rect.top,8,5,1);
if(px<0)
{
a-> SetWindowPos(NULL,nFullWidth-rect.Width()/2,rect.top,8,5,1);
}
else if(px>nFullWidth)
{
a-> SetWindowPos(NULL,0,rect.top,8,5,1);
}
}
RefreshPromptInfo();//刷新
break;
}
}
这段代码不管scroll Lock键按下与否 按左右方向键都不能移动位图 当我屏蔽掉if (GetAsyncKeyState(VK_SCROLL)&&0x8000)后不管scroll Lock键按下与否 按下左右方向键位图都能移动 为什么?哪里出错了?还请高手指教!
8 个解决方案
#1
switch(wParam)
{
case VK_LEFT:
if (GetAsyncKeyState(VK_SCROLL) &0x8000)
{
px=px-5;
a=this-> GetDlgItem(IDC_PIC);
a-> SetWindowPos(NULL,px,rect.top,8,5,1);
if((px+rect.Width())<0)
{
a-> SetWindowPos(NULL,nFullWidth-rect.Width()/2,rect.top,8,5,1);
}
else if(px>nFullWidth)
{
a-> SetWindowPos(NULL,0,rect.top,8,5,1);
}
}
RefreshPromptInfo();//刷新
break;
case VK_RIGHT:
if (GetAsyncKeyState(VK_SCROLL) &0x8000)
{
px=px+5;
a=this-> GetDlgItem(IDC_PIC);
...
这个目前找到的逻辑错误,先看看是不是这里的问题
#2
"if (GetAsyncKeyState(VK_SCROLL)&&0x8000)”
这里是要:求与,不是求并,有可能是这个地方写错了吧~~~
这里是要:求与,不是求并,有可能是这个地方写错了吧~~~
#3
不行啊 运行了 位图还是不能动
#4
你不应该检测scroll lock键的动作
应该检测scroll lock的状态
应该检测scroll lock的状态
#5
GetAsyncKeyState(VK_SCROLL)不就是检测scroll lock的状态吗?还有其他的什么方法?我刚接触mfc 还请大侠多多指教!
#6
你误会了
GetAsyncKeyState(VK_SCROLL)检测的也是按键的状态
也就是说你按着scroll lock键时再按上下左右键就会起作用
你可以试一下
但是你想检测的是scroll lock知识灯的状态
而不是这个按键的动作
对吧
GetAsyncKeyState(VK_SCROLL)检测的也是按键的状态
也就是说你按着scroll lock键时再按上下左右键就会起作用
你可以试一下
但是你想检测的是scroll lock知识灯的状态
而不是这个按键的动作
对吧
#7
if(GetKeyState(VK_SCROLL) < 0)
{
// Press Down
}
{
// Press Down
}
#8
嘿嘿 对 你说的很对 当按下scroll lock键不放才能实现我想要的功能 明白了 要检测指示灯的状态
GetKeyState(VK_SCROLL) & 1
功能已经完成了 谢谢各位的指导~非常地!
GetKeyState(VK_SCROLL) & 1
功能已经完成了 谢谢各位的指导~非常地!
#1
switch(wParam)
{
case VK_LEFT:
if (GetAsyncKeyState(VK_SCROLL) &0x8000)
{
px=px-5;
a=this-> GetDlgItem(IDC_PIC);
a-> SetWindowPos(NULL,px,rect.top,8,5,1);
if((px+rect.Width())<0)
{
a-> SetWindowPos(NULL,nFullWidth-rect.Width()/2,rect.top,8,5,1);
}
else if(px>nFullWidth)
{
a-> SetWindowPos(NULL,0,rect.top,8,5,1);
}
}
RefreshPromptInfo();//刷新
break;
case VK_RIGHT:
if (GetAsyncKeyState(VK_SCROLL) &0x8000)
{
px=px+5;
a=this-> GetDlgItem(IDC_PIC);
...
这个目前找到的逻辑错误,先看看是不是这里的问题
#2
"if (GetAsyncKeyState(VK_SCROLL)&&0x8000)”
这里是要:求与,不是求并,有可能是这个地方写错了吧~~~
这里是要:求与,不是求并,有可能是这个地方写错了吧~~~
#3
不行啊 运行了 位图还是不能动
#4
你不应该检测scroll lock键的动作
应该检测scroll lock的状态
应该检测scroll lock的状态
#5
GetAsyncKeyState(VK_SCROLL)不就是检测scroll lock的状态吗?还有其他的什么方法?我刚接触mfc 还请大侠多多指教!
#6
你误会了
GetAsyncKeyState(VK_SCROLL)检测的也是按键的状态
也就是说你按着scroll lock键时再按上下左右键就会起作用
你可以试一下
但是你想检测的是scroll lock知识灯的状态
而不是这个按键的动作
对吧
GetAsyncKeyState(VK_SCROLL)检测的也是按键的状态
也就是说你按着scroll lock键时再按上下左右键就会起作用
你可以试一下
但是你想检测的是scroll lock知识灯的状态
而不是这个按键的动作
对吧
#7
if(GetKeyState(VK_SCROLL) < 0)
{
// Press Down
}
{
// Press Down
}
#8
嘿嘿 对 你说的很对 当按下scroll lock键不放才能实现我想要的功能 明白了 要检测指示灯的状态
GetKeyState(VK_SCROLL) & 1
功能已经完成了 谢谢各位的指导~非常地!
GetKeyState(VK_SCROLL) & 1
功能已经完成了 谢谢各位的指导~非常地!