首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >让select all(ctrl-a)在CEdit控件上工作

让select all(ctrl-a)在CEdit控件上工作
EN

Stack Overflow用户
提问于 2011-11-22 09:26:51
回答 3查看 1.9K关注 0票数 0

我正在尝试在一个CEdit控件中实现select all(通过ctrl-a)。为此,我创建了一个继承CEdit的类并为WM_KEYDOWN添加了一个处理程序,如下所示:

代码语言:javascript
复制
void CEditExtended::OnKeyDown( UINT nChar, UINT nRepCnt, UINT nFlags )
{   
  if((nChar == 0x41) && (GetKeyState(VK_CONTROL) & 0x8000) != 0))
    SetSel(0, -1);

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

在web上环顾四周,这应该是可行的,但它永远不会同时注册ctrl和a,无论是其中之一。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-22 18:00:27

尝试以下代码:

代码语言:javascript
复制
void CEditExtended::PreTranslateMessage(MSG* pMsg)
{
 if(pMsg->message == WM_KEYUP )
    {
        if ( (LOWORD(pMsg->wParam) & VK_CONTROL) == VK_CONTROL )
        {

         /// blah

        }
    }

    return CEdit::PreTranslateMessage(pMsg);
}
票数 3
EN

Stack Overflow用户

发布于 2018-06-16 03:41:24

若要为窗口中的所有编辑控件实现Ctrl+A,请重写CWnd::PreTranslateMessage以检查键序列以及焦点是否在编辑控件上。如果是,请选择其文本。

代码语言:javascript
复制
BOOL CMyWindow::PreTranslateMessage(MSG* pMsg)
{
    if (pMsg->message == WM_KEYDOWN && pMsg->wParam == 'A' && GetKeyState(VK_CONTROL) < 0) {
        if (auto edit = dynamic_cast<CEdit*>(GetFocus())) {
            edit->SetSel(0, -1, FALSE);
            return TRUE;
        }
    }
    return __super::PreTranslateMessage(pMsg);
}
票数 2
EN

Stack Overflow用户

发布于 2015-11-21 14:53:31

另一种无需扩展CEdit类即可实现CTRL+A的方法。

重写具有编辑控件的对话框的PreTranslateMessage()成员函数。

代码语言:javascript
复制
BOOL CMyDialog::PreTranslateMessage(MSG* pMsg)
{
    if ((pMsg->message == WM_KEYDOWN) && (pMsg->wParam == 'A')
       && GetKeyState(VK_CONTROL) < 0)
    {
        CWnd *pWnd = GetFocus();
        if (pWnd != NULL)
        {
            CString className;

            GetClassName(pWnd->GetSafeHwnd(), className.GetBuffer(80), 80);
            className.ReleaseBuffer();
            if (className.CompareNoCase(_T("edit")) == 0)
            {
                pWnd->SendMessage(EM_SETSEL, 0, -1);
                return TRUE;
            }
        }
    }

    return CDialogEx::PreTranslateMessage(pMsg);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8220872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档