實現編輯框的全選和取消全選

來源:互聯網
上載者:User

對於一個編輯框,實現它的全選和取消全選(前提:該編輯框獲得焦點)

建立一個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()只檢查一個鍵是否被按下,而不區分大小寫!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.