我给一个编辑框设置了个整型变量m_display,
想要在编辑框用键盘输入整数,并赋于这个变量,
程序如下:
 *::OnKeyDown(*,*,*)
{
    if(nChar==n)    //或if(nChar=='n'),n表示0,1,2,……9;
    {
        m_display=m_display*10+n;
     }
     ………………
    *::OnKeyDown(*,*,*);
}这样不行,编译无错,但变量没改变,问题在哪?

解决方案 »

  1.   

    http://expert.csdn.net/Expert/topic/2377/2377308.xml?temp=.8657495
    hook原理!
      

  2.   

    我是在编辑框内输入数字的,改之前当然显示了,
    但是问题是编辑框的变量m_display并没有被赋值,
    我设计了第二个编辑框及其整型变量 m_display1;
    在上面的  *::OnKeyDown(*,*,*)  后面接:
    m_display1=m_display;
    UpdateData(FALSE);
    键盘按后第二个编辑框并没显示数字。
    还有,钩子函数?什么?
      

  3.   

    (一)响应单独的按键:
    先添加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);
    }