BOOL CMainFrame::PreTranslateMessage(MSG* pMsg) 
{
// WPARAM wp;
// TODO: Add your specialized code here and/or call the base class
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message==WM_KEYDOWN)
{
if(pMsg->message==WM_KEYDOWN&&pMsg->wParam==VK_ESCAPE) // 如果按的键为Esc键 
{// 获取主框架窗口的指针 

// 调用主窗口类的自定义函数 EndFullScreen ,便可退出全屏显示状态 
EndFullScreen();

if(pMsg->message==WM_KEYDOWN&&pMsg->wParam==VK_F5) // 全屏
{// 获取主框架窗口的指针 

// 调用主窗口类的自定义函数 EndFullScreen ,便可退出全屏显示状态 
OnFullScreen();

if(pMsg->message==WM_KEYDOWN&&pMsg->wParam==VK_F6) //拍摄图片 
{// 获取主框架窗口的指针 
 
SavetoFile();

if(pMsg->message==WM_KEYDOWN&&pMsg->wParam==97)//数字键1;
{

init();
}
if(pMsg->message==WM_KEYDOWN&&pMsg->wParam==98)//数字键2;
{
CModuletestView *pView=(CModuletestView*)this->GetActiveView();
if(pView){
            pView->bcheck=!pView->bcheck;
bool bcheck=pView->bcheck;
ModifyVideoSize(bcheck);
}



}
if(pMsg->message==WM_KEYDOWN&&pMsg->wParam==96)//数字键0;
{

stop();
}
}
return CFrameWnd::PreTranslateMessage(pMsg);
}
为什么按键Esc,F5,F6都能正确响应而键入数字0,1,2却没有响应。

解决方案 »

  1.   

    数字区的数字键与字母区的数字键的wparam是不一样的
      

  2.   

    看虚拟键值:
    VK_NUMPAD0  60  数字小键盘上的 0 键
    VK_NUMPAD1  61  数字小键盘上的 1 键
    VK_NUMPAD2  62  数字小键盘上的 2 键http://dev.csdn.net/develop/article/22/22730.shtm
      

  3.   

    如果NUM Lock是亮着的就可以,否则,小键盘的数字就变成
    (0~9)=>(45,35,40,34,37,12,39,36,38,33)
    上面是实测结果。
      

  4.   

    pMsg->wParam==97不是数字键1,而是字母a
    0、1、2分别是pMsg->wParam==48、49和50
      

  5.   

    GetAsyncKeyState(144)可以判断Num-Lock是否按下。
      

  6.   

    To morisecue
    pMsg->wParam==97不是数字键1,而是字母a
    不,正是小键盘上的数字,但前提是Num-Lock按下,wParam并非是返回的ASCII码<后者在WM_CHAR>
      

  7.   

    楼主,检查你的程序运行的时候,小键盘的Num Lock灯是否点亮。不然的话,按数字键,相当于按方向键。
      

  8.   

    在wince下VK_0~VK_9的定义值是30~39,你也可以试试,VC下没用过
      

  9.   

    各路英雄,我看不是上面的原因,而是在mainfrm中不会响应键盘的输入,当然esc,enter,f1-f12除外