zoukankan      html  css  js  c++  java
  • 实现编辑框的全选和取消全选

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

    新建一个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()只检查一个键是否被按下,而不区分大小写!

  • 相关阅读:
    PyQT5速成教程-4 Qt Designer实战[上]
    使用Qt Designer进行布局
    PyCharm+QT Designer整合
    Qt Designer 的使用
    Python | 一行命令生成动态二维码
    Python 标准库、第三方库
    Python list列表的常用操作方法
    Python+Selenium 自动化测试获取测试报告内容并发送邮件
    ”Tomcat version 5.5 only supports J2EE 1.2, 1.3, and 1.4 Web modules“解决方案
    linux查找符合条件的文件并删除
  • 原文地址:https://www.cnblogs.com/joeblackzqq/p/1877288.html
Copyright © 2011-2022 走看看