热情软件屋

 

如何在程序中设置按下Caps Lock 键


编号:QA001753
建立日期: 1999年9月23日 最后修改日期:1999年9月23日
所属类别:

陆正杰:
    操作系统: WINDOWS NT 4.0
    编程工具: VC++ 5.0
    如何在程序中设置按下Caps Lock 键,即使得使用者在某Edit框里输入的字母自动为大写输入后设置该键再按下,即恢复输入小写字母状态。

回答:

    利用下面的代码能够切换Caps Lock 键。
    void SetCapsLock( BOOL bState )
     {
     BYTE keyState[256];
    
     GetKeyboardState((LPBYTE)&keyState);
     if( (bState && !(keyState[VK_CAPITAL] & 1)) ||
     (!bState && (keyState[VK_CAPITAL] & 1)) )
     {
     // Simulate a key press
     keybd_event( VK_CAPITAL,
     0x45,
     KEYEVENTF_EXTENDEDKEY | 0,
     0 );
    
     // Simulate a key release
     keybd_event( VK_CAPITAL,
     0x45,
     KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
     0);
     }
     }
    
    void CDlgDlg::OnSetfocusEdit1()
    {
     SetCapsLock(TRUE);
    
    }
    
    void CDlgDlg::OnKillfocusEdit1()
    {
     SetCapsLock(FALSE);
    }
    不过对于你的问题,我建议采用另一种方法,即每输入一个字母将其自动转换为大写,而不是修改Caps Lock 键:
    BOOL CDlgDlg::PreTranslateMessage(MSG* pMsg)
    {
     if(pMsg->message == WM_CHAR
     && pMsg->hwnd == ::GetDlgItem(m_hWnd, IDC_EDIT1))
     {
     pMsg->wParam = toupper(pMsg->wParam);
     }
    
     return CDialog::PreTranslateMessage(pMsg);
    }

此问题由李海回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio