mfc 对EdictControl控件操作(显示消息&获取消息&全选/取消全选编辑框内容&追加内容)

您所在的位置:网站首页 mfc编辑框光标末尾 mfc 对EdictControl控件操作(显示消息&获取消息&全选/取消全选编辑框内容&追加内容)

mfc 对EdictControl控件操作(显示消息&获取消息&全选/取消全选编辑框内容&追加内容)

2024-03-01 06:31| 来源: 网络整理| 查看: 265

目录

1. 显示消息&获取消息

2. 全选/取消全选编辑框内容

3. 追加内容

1. 显示消息&获取消息

要想对Edict控件操作可以通过:

方法1:FindWindow(类名,窗口标题名【就是dialog的Caption】)获得句柄hDlg,然后调用函数SetDlgItemText(HWND hDlg,int nIDDlgItem,LPCWSTR lpString);将相关信息输出到EdictControl控件中。

方法2:EdictControl控件增加变量,之后就可以通过该变量对该控件进行操作,而不需要通过获得句柄后操作,简单方便很多。

这里要注意一下~添加成员变量有两种类别,一种是Control,一种是Value。不同类别对应操作不一样,下面先讲解Control类别的成员变量。

Control类别的成员变量

当添加Control类别的成员变量时,只有一种变量类型选择,即CEdict类型。本文新增的变量名为m_tbTest。通过调用其成员函数完成向EdictControl控件输出信息。

m_tbTest.SetWindowText(TEXT("hello")); Value类别的成员变量

此处选择CString变量类型,变量名字为m_strTest。通过调用下面代码实现向EdictControl控件输出消息。

m_strTest = TEXT("hello"); UpdateData(FALSE);

PS:UpdateData(FALSE)——》表示将消息显示到EdictControl控件中

        UpdateData(TRUE)  ——》表示将EdictControl控件消息存储到m_strTest变量中,即从EdictControl控件中获取消息。  

2. 全选/取消全选编辑框内容

Step1:在CXxxDlg类中添加一个成员函数BOOL PreTansLateMessage(MSG* pMsg)

Step2:该函数定义如下:

BOOL CXxxDlg::PreTranslateMessage(MSG* pMsg) { if(pMsg->message == WM_KEYDOWN) { BOOL b = GetKeyState(VK_CONTROL) & 0X80; if(b && (pMsg->wParam=='a'||pMsg->wParam=='A')) { // 表示全选 SendDlgItemMessage(IDC_EDIT_Xxx, EM_SETSEL, 0, -1); // 表示取消全选 // SendDlgItemMessage(IDC_EDIT_Xxx, EM_SETSEL, -1,0); return TRUE; } } return CWnd::PreTranslateMessage(pMsg); }

1、只有穿过消息队列的消息才受PreTranslateMessage()影响,采用SendMessage()或其他类似的方式向窗口直接发送的而不经过消息队列的消息根本不会理睬PreTranslateMessage()的存在。 2、“拦截子窗口的消息”应该在子窗口的PreTranslateMessage函数中进行拦截。

其实现机制为拦截了用户按下Crtl+a键盘消息后向EdictControl空间发送EM_SETSEL消息,实现EdictControl控件光标选择了全部和取消全选。其实质应该是调用setSel函数:

SetSel(int nStartChar, int nEndChar, BOOL bNoScroll); /* 参数说明: nStartChar表示起始的字符位置 nEndChar表示结束的字符位置 bNoScroll为TRUE表示在选中的时候不会滚动滚动条,为FALSE表示会随光标位置改变而滚动滚动条。 */

该函数当nStartChar=-1时,nEndChar取任何值,光标都是在字符串的末尾。

当nStartChar=0,nEndChar取为-1时,表示选中第1个到最后一个字符。

3. 追加内容

在EdictControl控件上追加内容。 

CEdit* pEdit = GetDlgItem(IDC_EDIT_Xxx); ASSERT(pEdit && pEdit->GetSafeHwnd()); pEdit->SetSel(-1); pEdit->ReplaceSel(_T("Hello, World!"));

 其思路是将光标设为字符串最后,然后调用ReplaceSel函数将字符串追加。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3