ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

实现编辑框的全选和取消全选

2022-04-24 13:33:27  阅读:146  来源: 互联网

标签:GetAsyncKeyState 取消 pMsg 全选 bSelectAll pEdit 编辑框


对于一个编辑框,实现它的全选和取消全选(前提:该编辑框获得焦点)

新建一个dialog based MFC application, 命名为“d1”,界面如下:

 

 为对话框类添加一个成员变量:bool m_bSelectAll;用于控制全选状态。另外重载对话框类的PreTranslateMessage事件,添加如下代码:

BOOL CD1Dlg::PreTranslateMessage(MSG* pMsg) 
{
    if((GetAsyncKeyState(VK_CONTROL) & 0x8000) && (GetAsyncKeyState('A') & 0x8000) && pMsg->hwnd == m_pEdit->m_hWnd)
    {
        if(m_bSelectAll)
        {
            m_pEdit->SetSel(-1);            // 取消全选
        }
        else
        {
            m_pEdit->SetSel(0, -1);            // 全选
        }
        m_bSelectAll = !m_bSelectAll;
        return TRUE;
    }
    
    return CDialog::PreTranslateMessage(pMsg);
}

这样,当编辑框获得焦点时,如果再按下Ctrl+A,编辑框的内容就会被“全选”或“取消全选”。

 

但是上面以m_bSelectAll来作为判断是否“已经处于全选”状态有个问题,那就是当全选时,用户点击编辑框而取消了全选,但这时,m_bSelectAll却还处于全选状态,也就是说这个标志(m_bSelectAll)与实际的全选状态不一致。所以采用了另外的方法来验证是否处于全选状态(就是选中内容的长度与编辑框内容长度是否一致),代码如下:

BOOL CD1Dlg::PreTranslateMessage(MSG* pMsg) 
{
    if(pMsg->hwnd == m_pEdit->m_hWnd && (GetAsyncKeyState(VK_CONTROL) & 0x8000) && (GetAsyncKeyState(_T('A')) & 0x8000))
    {
        CString txt;
        int start, end;
        
        m_pEdit->GetWindowText(txt);
        m_pEdit->GetSel(start, end);
        if(txt.GetLength() == end - start)    // 处于全选状态
        {
            m_pEdit->SetSel(-1);            // 取消全选
        }
        else
        {
            m_pEdit->SetSel(0, -1);            // 全选
        }
        return TRUE;
    }
    
    return CDialog::PreTranslateMessage(pMsg);
}

说明:GetAsyncKeyState()只检查一个键是否被按下,而不区分大小写!

标签:GetAsyncKeyState,取消,pMsg,全选,bSelectAll,pEdit,编辑框
来源: https://www.cnblogs.com/jijm123/p/16185365.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有