已做出一个计算器,请问怎么才能对小键盘作出响应?

解决方案 »

  1.   

    VK_NUMPAD0  60h    
    VK_NUMPAD1  61h  
    VK_NUMPAD2  62h  
    VK_NUMPAD3  63h  
    VK_NUMPAD4  64h  
    VK_NUMPAD5  65h  
    VK_NUMPAD6  66h  
    VK_NUMPAD7  67h  
    VK_NUMPAD8  68h  
    VK_NUMPAD9  69h  BOOL CMainFrame::PreTranslateMessage(MSG* pMsg) 
    {
    if(pMsg->message == WM_KEYDOWN)
    {
    if(pMsg->lParam == VK_NUMPAD0 )
    {
    MessageBox("VK_NUMPAD0  OK");
    return CFrameWnd::PreTranslateMessage(pMsg);
    }
    }
    return CFrameWnd::PreTranslateMessage(pMsg);
    }
      

  2.   

    if(pMsg->wParam == VK_NUMPAD0 )
      

  3.   

    这是SDK的,我不太懂。我用的是MFC自动生成的窗口,请问MFC有没有相应的类?因为急着用到,所以可能的话请提供一个完整的例子,我另外加分以示感谢:)
      

  4.   

    大键盘和小键盘不一样的,就算用mfc,也是这样相应的!你可以生成对应的消息(WM_KEYDOWN,WM_CHAR)等的响应函数,在里面判断什么键被按下了,然后写代码!
      

  5.   

    我知道了,请问上面的
    VK_NUMPAD0  60h    
    VK_NUMPAD1  61h  
    VK_NUMPAD2  62h  
    VK_NUMPAD3  63h  
    VK_NUMPAD4  64h  
    VK_NUMPAD5  65h  
    VK_NUMPAD6  66h  
    VK_NUMPAD7  67h  
    VK_NUMPAD8  68h  
    VK_NUMPAD9  69h 
    应在哪里定义?
      

  6.   

    选择VK_NUMPAD7  鼠标右键,go to define
      

  7.   

    还有请问NumLock,/,*,-,+,Enter的码是怎样的??
      

  8.   

    找到了
    #define VK_MULTIPLY       0x6A   是*
    #define VK_ADD            0x6B   是+
    #define VK_SUBTRACT       0x6D   是-
    #define VK_DIVIDE         0x6F   是/
    #define VK_DECIMAL        0x6E   是.
    #define VK_NUMLOCK        0x90   是灯
    对不对?
    还有个enter是什么?请指教
      

  9.   

    对了,还有Backspace 和 Space 的是什么?
      

  10.   

    VK_LBUTTON 01 Left mouse button  
    VK_RBUTTON 02 Right mouse button  
    VK_CANCEL 03 Control-break processing  
    VK_MBUTTON 04 Middle mouse button (three-button mouse)  
    —  05–07 Undefined  
    VK_BACK 08 backspace key  
    VK_TAB 09 tab key  
    —  0A–0B Undefined  
    VK_CLEAR 0C clear key  
    VK_RETURN 0D enter key  
    —  0E–0F Undefined  
    VK_SHIFT 10 shift key  
    VK_CONTROL 11 ctrl key  
    VK_MENU 12 alt key  
    VK_PAUSE 13 pause key  
    VK_CAPITAL 14 caps lock key  
    —  15–19 Reserved for Kanji systems  
    —  1A Undefined  
    VK_ESCAPE 1B esc key  
    —  1C–1F Reserved for Kanji systems  
    VK_SPACE 20 spacebar  
    VK_PRIOR 21 page up key  
    VK_NEXT 22 page down key  
    VK_END 23 end key  
    VK_HOME 24 home key  
    VK_LEFT 25 left arrow key  
    VK_UP 26 up arrow key  
    VK_RIGHT 27 right arrow key  
    VK_DOWN 28 down arrow key  
    VK_SELECT 29 select key  
    —  2A Original equipment manufacturer (OEM) specific  
    VK_EXECUTE 2B execute key  
    VK_SNAPSHOT 2C print screen key  
    VK_INSERT 2D ins key  
    VK_DELETE 2E del key  
    VK_HELP 2F help key  
    VK_0 30 0 key  
    VK_1 31 1 key  
    VK_2 32 2 key  
    VK_3 33 3 key  
    VK_4 34 4 key  
    VK_5 35 5 key  
    VK_6 36 6 key  
    VK_7 37 7 key  
    VK_8 38 8 key  
    VK_9 39 9 key  
    —  3A–40 Undefined  
    VK_A 41 a key  
    VK_B 42 b key  
    VK_C 43 c key  
    VK_D 44 d key  
    VK_E 45 e key  
    VK_F 46 f key  
    VK_G 47 g key  
    VK_H 48 h key  
    VK_I 49 i key  
    VK_J 4A j key  
    VK_K 4B k key  
    VK_L 4C l key  
    VK_M 4D m key  
    VK_N 4E n key  
    VK_O 4F o key  
    VK_P 50 p key  
    VK_Q 51 q key  
    VK_R 52 r key  
    VK_S 53 s key  
    VK_T 54 t key  
    VK_U 55 u key  
    VK_V 56 v key  
    VK_W 57 w key  
    VK_X 58 x key  
    VK_Y 59 y key  
    VK_Z 5A z key  
    VK_LWIN 5B Left Windows key (Microsoft Natural Keyboard)  
    VK_RWIN 5C Right Windows key (Microsoft Natural Keyboard)  
    VK_APPS 5D Applications key (Microsoft Natural Keyboard)  
    —  5E–5F Undefined  
    VK_NUMPAD0 60 Numeric keypad 0 key  
    VK_NUMPAD1 61 Numeric keypad 1 key  
    VK_NUMPAD2 62 Numeric keypad 2 key  
    VK_NUMPAD3 63 Numeric keypad 3 key  
    VK_NUMPAD4 64 Numeric keypad 4 key  
    VK_NUMPAD5 65 Numeric keypad 5 key  
    VK_NUMPAD6 66 Numeric keypad 6 key  
    VK_NUMPAD7 67 Numeric keypad 7 key  
    VK_NUMPAD8 68 Numeric keypad 8 key  
    VK_NUMPAD9 69 Numeric keypad 9 key  
    VK_MULTIPLY 6A Multiply key  
    VK_ADD 6B Add key  
    VK_SEPARATOR 6C Separator key  
    VK_SUBTRACT 6D Subtract key  
    VK_DECIMAL 6E Decimal key  
    VK_DIVIDE 6F Divide key  
    VK_F1 70 f1 key  
    VK_F2 71 f2 key  
    VK_F3 72 f3 key  
    VK_F4 73 f4 key  
    VK_F5 74 f5 key  
    VK_F6 75 f6 key  
    VK_F7 76 f7 key  
    VK_F8 77 f8 key  
    VK_F9 78 f9 key  
    VK_F10 79 f10 key  
    VK_F11 7A f11 key  
    VK_F12 7B f12 key  
    VK_F13 7C f13 key  
    VK_F14 7D f14 key  
    VK_F15 7E f15 key  
    VK_F16 7F f16 key  
    VK_F17 80H f17 key  
    VK_F18 81H f18 key  
    VK_F19 82H f19 key  
    VK_F20 83H f20 key  
    VK_F21 84H f21 key  
    VK_F22 85H f22 key  
    VK_F23 86H f23 key  
    VK_F24 87H f24 key  
    —  88–8F Unassigned  
    VK_NUMLOCK 90 num lock key  
    VK_SCROLL 91 scroll lock key  
    —  92–B9 Unassigned  
    —  BA–C0 OEM specific  
    —  C1–DA Unassigned  
    —  DB–E4 OEM specific  
    —  E5 Unassigned  
    —  E6 OEM specific  
    —  E7–E8 Unassigned  
    —  E9–F5 OEM specific  
    VK_ATTN F6 Attn key 
    VK_CRSEL F7 CrSel key 
    VK_EXSEL F8 ExSel key 
    VK_EREOF F9 Erase EOF key 
    VK_PLAY FA Play key 
    VK_ZOOM FB Zoom key 
    VK_NONAME FC Reserved for future use.  
    VK_PA1 FD PA1 key 
    VK_OEM_CLEAR FE Clear key 
      

  11.   

    精神可嘉!!!MSDN里面搜索VK_ ????也行啊
      

  12.   

    我写成下面的样子,一编译就非法操作,WHY?
    BOOL CCalcDlg::PreTranslateMessage(MSG* pMsg) 
    {
        // TODO: Add your specialized code here and/or call the base class
        if(pMsg->message==WM_KEYDOWN)
        {
    switch(WM_KEYDOWN){
    case VK_NUMPAD0:
      On0();break;
    case VK_NUMPAD1:
      On1();break;
    case VK_NUMPAD2:
      On2();break;
    case VK_NUMPAD3:
      On3();break;
    case VK_NUMPAD4:
      On4();break;
    case VK_NUMPAD5:
      On5();break;
    case VK_NUMPAD6:
      On6();break;
    case VK_NUMPAD7:
      On7();break;
    case VK_NUMPAD8:
      On8();break;
    case VK_NUMPAD9:
      On9();break;
    case VK_MULTIPLY:
      OnTim();break;
                      case VK_ADD:
      OnAdd();break;
    case VK_SUBTRACT:
      OnSub();break;
    case VK_DIVIDE:
      OnDiv();break;
    case VK_DECIMAL:
      OnXsd();break;
    case VK_RCONTROL:
      OnClean();break;
    default: break;
    }// end switch
        }  //end if 
        return CCalcDlg::PreTranslateMessage(pMsg);
    }
      

  13.   

    refer to http://www.penbex.com.cn/Developer/programme.asp
      

  14.   

    改为witch(pMsg->wParam)也是一样
      

  15.   

    別告訴我是公司面試作個小應用程序阿....呵...我幫我同學查了個,也是這個問題...不用寫那麼多的VK...查API函數里控制鍵盤輸入的那塊,其中有個可用......具體的我忘了.
      

  16.   

    可能是我声明的地方错了,因为我把定义的部份注释掉之后还是有错。那么请问该放在哪声明?怎样声明?(我原来是声明在自己定义的CCalcDlg类中)
      

  17.   

    debug时步进到if(pMsg->message==WM_KEYDOWN)
    后就跳到return CCalcDlg::PreTranslateMessage(pMsg);
    WHY?
    那个窗口也没有打开,不能输入啊。
    其实这个类的成员是怎么样被调用的啊?请告知@_@
      

  18.   

    我是将BOOL CCalcDlg::PreTranslateMessage(MSG* pMsg) 
    添加到calcdlg.h中的class CCalcDlg : public CDialog的public的最后一行,错了吗?
    怎么会连程序窗口都不能创建的??