BOOL CDMSEdit::PreTranslateMessage( MSG* pMsg )
{
/**
* 编辑框快捷键操作
*/
if(pMsg-> message==WM_KEYDOWN )
{
if( ( GetKeyState( VK_CONTROL ) & 0xFF00 ) ==0xFF00 )
{
/**
* 全选
*/
if( pMsg-> wParam == 'A' || pMsg-> wParam == 'a')
{
this-> SetSel( 0, -1 );
...这一段是没有问题的,当ctrl键按下的时候,判断pMsg-> wParam 是不是等于 'A',没有问题
主要是想判断ctrl+c.ctrl+a之类的操作
但是,把检测放到WM_CHAR消息中的时候,
当按下ctrl+a,pMsg-> wParam的值是1
Ctrl+C,pMsg-> wParam值是3,我惶惑了
{
/**
* 编辑框快捷键操作
*/
if(pMsg-> message==WM_KEYDOWN )
{
if( ( GetKeyState( VK_CONTROL ) & 0xFF00 ) ==0xFF00 )
{
/**
* 全选
*/
if( pMsg-> wParam == 'A' || pMsg-> wParam == 'a')
{
this-> SetSel( 0, -1 );
...这一段是没有问题的,当ctrl键按下的时候,判断pMsg-> wParam 是不是等于 'A',没有问题
主要是想判断ctrl+c.ctrl+a之类的操作
但是,把检测放到WM_CHAR消息中的时候,
当按下ctrl+a,pMsg-> wParam的值是1
Ctrl+C,pMsg-> wParam值是3,我惶惑了
在wm_char中pMsg-> wParam是1
A对应的是1
B对应的是2
依此类推,那我也不想写
if (nChar==1 || nChar == 3)
这样,难道没给出宏/枚举之类的东西吗
但如果是 WM_KEYDOWN 的话,无论按 a 与 A ,wParam 都是 65
你可以用
if ( ( pMsg->wParam >= '0'
&& pMsg->wParam <= '9' )
|| ( pMsg->wParam >= VK_NUMPAD0
&& pMsg->wParam <= VK_NUMPAD9 )
|| ( pMsg->wParam == VK_RETURN ))
这种通过x<y<z的形式来简化下。
( GetKeyState( VK_CONTROL ) & 0xFF00 ) ==0xFF00
按control的话,的确是你说的那样看来要判断组合键就要用WM_KEYDOWN,而不是WM_CHAR才行.
WM_KEYDOWN里啥也没做
在WM_CHAR里做了一些事,但是为了禁止输入字符,所以,像这样
if(数字)
{
消息传递下去
}else
{
啥也别做
}
这样就造成了ctrl+c失效,为了解决这个问题,当然得判断ctrl+c了