我给一个编辑框设置了个整型变量m_display,
想要在编辑框用键盘输入整数,并赋于这个变量,
程序如下:
*::OnKeyDown(*,*,*)
{
if(nChar==n) //或if(nChar=='n'),n表示0,1,2,……9;
{
m_display=m_display*10+n;
}
………………
*::OnKeyDown(*,*,*);
}这样不行,编译无错,但变量没改变,问题在哪?
想要在编辑框用键盘输入整数,并赋于这个变量,
程序如下:
*::OnKeyDown(*,*,*)
{
if(nChar==n) //或if(nChar=='n'),n表示0,1,2,……9;
{
m_display=m_display*10+n;
}
………………
*::OnKeyDown(*,*,*);
}这样不行,编译无错,但变量没改变,问题在哪?
hook原理!
但是问题是编辑框的变量m_display并没有被赋值,
我设计了第二个编辑框及其整型变量 m_display1;
在上面的 *::OnKeyDown(*,*,*) 后面接:
m_display1=m_display;
UpdateData(FALSE);
键盘按后第二个编辑框并没显示数字。
还有,钩子函数?什么?
先添加PreTranslateMessage()(响应WM_CHAR)也是同样的效果,因为本例只捕捉键盘)
BOOL CMydilog::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if (pMsg->message == WM_KEYDOWN)
{
if(pMsg->wParam=='M')//直接用上面的虚码代替就可以响应所指键
MessageBox("hello");//如果按下M键弹出消息.比如想当按下小键盘1时
//弹出就用VK_NUMPAD1代替'M'
}
return CDialog::PreTranslateMessage(pMsg);
}(二)组合键的用法:(本例响应Ctrl+X键)
BOOL CMydilog::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if (pMsg->message == WM_KEYDOWN)
{
switch (pMsg->wParam)
{
case VK_ESCAPE:
SetFocus ();
return TRUE;
case 'X':
if(::GetKeyState(VK_CONTROL) < 0)//如果是Shift+X这里就
//改成VK_SHIFT
MessageBox("hello");
return TRUE;
}
}
return CDialog::PreTranslateMessage(pMsg);
}