如何在程序中设置按下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);
}
此问题由李海回答。
| |
|
|
| |
|
|