我在listctrl的onkeydown()函数中,想区分shift+delete键和delete键,当按shift+delete键时直接删除,按delete键删除到回收站,但是按shift+delete键时,在onkeydown(UINT nChar, UINT nRepCnt, UINT nFlags)函数中nchar一直为shift值;只有单独按delete键时,nchar才为VK_DELETE,请问该如何处理??
void CPbListCtrl::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
// GetKeyState(nChar);
switch (nChar)
{
case VK_DELETE:
OnPbDelete();
break;
         case VK_SHIFT:
               break; }

CRegListCtrl::OnKeyDown(nChar, nRepCnt, nFlags);
}

解决方案 »

  1.   

    void CPbListCtrl::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
    {
    // GetKeyState(nChar);
    switch (nChar)
    {
    case VK_DELETE:
    if (::GetKeyState(VK_SHIFT) < 0)
    OnShiftDelete();
    else
    OnPbDelete();
    break;
    }

    CRegListCtrl::OnKeyDown(nChar, nRepCnt, nFlags);
    }
      

  2.   

    to roger:
         只要按shift+delete键,nChar的值一直为shift,根本不能进入case VK_DELETE:中,该如何处理??
      

  3.   

    不知道你怎么按“shift+delete键”?
    仔细看我的程序,是不处理case VK_SHIFT!即使先按shift键产生了WM_KEYDOWN又如何?
    只要处理 VK_DELETE,然后再判断shift是否被按下!!!