各位老大,
现在已知lParam参数的具体意义
尚且不知wParam参数的具体意义
比如说哪一位到哪一位是做什么用的。
高字节从那里开始算起,
代表什么意义,
低字节又是怎样等等
哪位能知道告诉我?
谢谢

解决方案 »

  1.   

    低字节用LOWORD
    高字节用HIWORD
    合并用MAKEWORD
      

  2.   

    You extract them this way in the 32-bit framework:
    HWND hWndCtrl = (HWND)lParam;           //Control handle
    int nCode = HIWORD(wParam);             //Notification code
      

  3.   

    那分界线总是一定的吧。就像lParam的第0~15位代表键重复计数,
    16~23位代表扫描码,等等,
    类似于这样,我只想知道wParam的各位代表什么意义。
      

  4.   

    对了,还有一个问题,
    lParam 和 wParam 不都是32位的消息参数么?
    为什么在一般的函数当中都定义成
    lParam为 LONG型
    而wParam 却定义成UINT型呢?这两种型有什么区别?
      

  5.   

    reTranslateMessage函数顾名思义,就是在消息被翻译之前,做的一些事.我们可以屏蔽一个键或一个命令.
    下面是一些常用消息的相关信息.这些信息放pMsg中.
    WM_KEYDOWN 
    nVirtKey = (int) wParam;  //虚键值,和ascll码有许多相同的地方  
    lKeyData = lParam;        //和硬件有关     
    WM_CHAR 
    chCharCode = (TCHAR) wParam;    
    lKeyData = lParam;              
    WM_COMMAND 
    wNotifyCode = HIWORD(wParam); 
    wID = LOWORD(wParam);         
    hwndCtl = (HWND) lParam;      
    WM_LBUTTONDOWN 
    fwKeys = wParam;        // 
    xPos = LOWORD(lParam);  //  鼠标横坐标
    yPos = HIWORD(lParam);  //  鼠标纵坐标
     fwKeys 
    MK_CONTROL MK_LBUTTON MK_MBUTTON MK_RBUTTON  MK_SHIFT 
    WM_MOUSEMOVE 
    fwKeys = wParam;        
    xPos = LOWORD(lParam);   
    yPos = HIWORD(lParam);  
     
    下面这个例子演示了,PreTranslateMessage的常用用法.
    BOOL CPreTranslateDlg::PreTranslateMessage(MSG* pMsg) 
    {
    if(WM_KEYDOWN == pMsg->message )
    if(0x30 == (int) pMsg->wParam)
    {
    return true;               //禁止在编辑框中输入0(ascll 0x30)
    }                                  if(WM_CHAR == pMsg->message )
    if('A' == (TCHAR) pMsg->wParam)
    {
    return true;               //禁止在编辑框中输入'A'
    }

    if(WM_MOUSEMOVE == pMsg->message)  
    if(MK_CONTROL & pMsg->wParam)  //当ctrl被按下鼠标移动时,显示相关信息
    {
    int xPos = LOWORD(pMsg->lParam);  
    int yPos = HIWORD(pMsg->lParam); 
    CString str ;
    str.Format("鼠标的坐标%d %d",xPos,yPos);
    AfxMessageBox(str);
    } if(WM_COMMAND == pMsg->message)
    if(ID_1 == LOWORD(pMsg->wParam))//禁止菜单项ID_1,注意按钮发送的是BN_CLICKED
    {
    return true;
    }
    return CDialog::PreTranslateMessage(pMsg);
    }
      

  6.   

    是一个DWORD数值(32个bit),因为W32是32位的操作系统,所以除了可以直接传递数值外,另一种常用的方法是传递任何数据结构或类的指针。