VC 关于CEdit基本用法

总结Visual C++中CEdit的一些用法:

1. 获取CEdit中的值
这里写图片描述

a.

int num1,num2,num3;
char ch1[10],ch2[10],ch3[10];

GetDlgItem(IDC_EDIT1)->GetWindowText(ch1,10);
GetDlgItem(IDC_EDIT2)->GetWindowText(ch2,10);

num1=atoi(ch1);
num2=atoi(ch2);
num3=num1+num2;
itoa(num3,ch3,10);

GetDlgItem(IDC_EDIT3)->SetWindowText(ch3);

b.

int num1,num2,num3;
char ch1[10],ch2[10],ch3[10];

GetDlgItemText(IDC_EDIT1,ch1,10);
GetDlgItemText(IDC_EDIT2,ch2,10);

num1=atoi(ch1);
num2=atoi(ch2);
num3=num1+num2;
itoa(num3,ch3,10);

SetDlgItemText(IDC_EDIT3,ch3);

c.

int num1,num2,num3;
num1=GetDlgItemInt(IDC_EDIT1);
num2=GetDlgItemInt(IDC_EDIT2);

num3=num1+num2;
SetDlgItemInt(IDC_EDIT3,num3);

d.

//定义成员变量..变量与控 件关连
/**
//{{AFX_DATA(CTestDlg)
enum { IDD = IDD_DIALOG1 };
int m_num1;
int m_num2;
int m_num3;
//}}AFX_DATA
void CTestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTestDlg)
DDX_Text(pDX, IDC_EDIT1, m_num1);
DDV_MinMaxInt(pDX, m_num1, 0, 100);
DDX_Text(pDX, IDC_EDIT2, m_num2);
DDV_MinMaxInt(pDX, m_num2, 0, 100);
DDX_Text(pDX, IDC_EDIT3, m_num3);
//}}AFX_DATA_MAP
}
**/
UpdateData();
m_num3=m_num1+m_num2;
UpdateData(FALSE);
/*
CWnd::UpdateData
BOOL UpdateData( BOOL bSaveAndValidate = TRUE );
Return Value
Nonzero if the operation is successful; otherwise 0. If bSaveAndValidate is TRUE, then a return value of nonzero means that the data is successfully validated.
Parameters
bSaveAndValidate
Flag that indicates whether dialog box is being initialized (FALSE) or data is being retrieved (TRUE).
Remarks
Call this member function to initialize data in a dialog box, or to retrieve and validate dialog data.
The framework automatically calls UpdateData with bSaveAndValidate set to FALSE when a modal dialog box is created in the default implementation of CDialog::OnInitDialog. The call occurs before the dialog box is visible. The default implementation of CDialog::OnOK calls this member function with bSaveAndValidate set to TRUE to retrieve the data, and if successful, will close the dialog box. (If the Cancel button is clicked in the dialog box, the dialog box is closed without the data being retrieved.)
*/
//UpdateData(TRUE) – 刷新控件的值到对应的变量//程序
//UpdateData(FALSE) – 拷贝变量值到控件显示

e.

//定义控件变量..变量与控件关连
//{{AFX_DATA(CTestDlg)
enum { IDD = IDD_DIALOG1 };
CEdit m_edit3;
CEdit m_edit2;
CEdit m_edit1;
//}}AFX_DATA
void CTestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTestDlg)
DDX_Control(pDX, IDC_EDIT3, m_edit3);
DDX_Control(pDX, IDC_EDIT2, m_edit2);
DDX_Control(pDX, IDC_EDIT1, m_edit1);
//}}AFX_DATA_MAP
}

int num1,num2,num3;
char ch1[10],ch2[10],ch3[10];

m_edit1.GetWindowText(ch1,10);
m_edit2.GetWindowText(ch2,10);

num1=atoi(ch1);
num2=atoi(ch2);
num3=num1+num2;
itoa(num3,ch3,10);

m_edit3.SetWindowText(ch3);

f.

int num1,num2,num3;
char ch1[10],ch2[10],ch3[10];

//::SendMessage(GetDlgItem(IDC_EDIT1)->m_hWnd,WM_GETTEXT,10, (LPARAM)ch1);//方法一
//::SendMessage(m_edit1.m_hWnd,WM_GETTEXT,10, (LPARAM)ch1);//方法二
//GetDlgItem(IDC_EDIT1)->SendMessage(WM_GETTEXT,10, (LPARAM)ch1);//方法三

m_edit1.SendMessage(WM_GETTEXT,10,(LPARAM)ch1);//方法四
m_edit2.SendMessage(WM_GETTEXT,10,(LPARAM)ch2);

num1=atoi(ch1);
num2=atoi(ch2);
num3=num1+num2;
itoa(num3,ch3,10);

m_edit3.SendMessage(WM_SETTEXT,0,(LPARAM)ch3);

g.

int num1,num2,num3;
char ch1[10],ch2[10],ch3[10];

SendDlgItemMessage(IDC_EDIT1,WM_GETTEXT,10,(LPARAM)ch1);
SendDlgItemMessage(IDC_EDIT2,WM_GETTEXT,10,(LPARAM)ch2);

num1=atoi(ch1);
num2=atoi(ch2);
num3=num1+num2;
itoa(num3,ch3,10);

SendDlgItemMessage(IDC_EDIT3,WM_SETTEXT,0,(LPARAM)ch3);
SendDlgItemMessage(IDC_EDIT3,EM_SETSEL,0,-1);

2. 追加文本
向CEdit中追加文本(原来文本不变)已经让滚动条始终在底部

方法一:(效率不高)
CString strTemp;
GetDlgItem(IDC_EDIT_OUTPUT)->GetWindowText(strTemp);
strTemp += strAppendText;
GetDlgItem(IDC_EDIT_OUTPUT)->SetWindowText(strTemp);
GetDlgItem(IDC_EDIT_OUTPUT)->SendMessage(WM_VSCROLL,SB_BOTTOM,0); //滚动到顶部 SB_BOTTOM 滚动到底部

(滚动条每次刷新都会先回到顶部,然后再到底部,如果刷新比较快,容易闪动)

方法二:(效率高)
CEdit m_editOutPut;
int len = m_editOutPut.GetWindowTextLength();
m_editOutPut.SetSel(len,len); //将插入光标放在最后
m_editOutPut.ReplaceSel(strAppendText);
m_editOutPut.ScrollWindow(0,0); //滚动到插入点

(滚动条始终在底部,不闪动)
3. CEdit的消息
编辑控件能够处理的消息类别如下所示。
消息类别发生事件
EN_ CHANGE输入框中的文本串被修改
EN_ ERRSPACE输入的文本串超过了输入框的显示范围
EN_ HSCROLL 按下水平滚动条
EN_KILLFOCUS 输入框失去焦点,也就是焦点转移到其他对象
EN_ MAXTEXT 输入的文本串超过了设定的最大输入长度
EN_ SETFOCUS 输入框获取焦点
EN_ UPDATE 更新显示内容
EN_ VSCROLL按下垂直滚动条
4. CEdit属性
通过Styles标签页的设置,可以得到不同类型的编辑框样式:多行编辑框、密码编辑框,只读编辑框,大小写转换编辑框、数字编辑框等等。
1 .Align text
控制编辑控件中的文本对齐方式。可能的取值有左对齐、居中和右对齐。
2: Muttiline
定义该编辑控件为多行文本编辑。通常情况下,该选项不被选中。
3. Number
限定用户输入的只能是数字。
4. Horizontal scroll
在多行编辑控件中提供一个水平滚动条。默认该选项不被选中。
5. Auto HScroll
当用户在编辑框的最右边输入字符时,文本自动进行滚动。该选项通常被选中。
6. Vertical scroll
在多行编辑控件中提供一个垂直滚动条。默认该选项不被选中。
7. Auto VScroll
在多行编辑控件中,当用户在最后一行按回车键时,文本自动向下滚动。默认该选项不被选中。
8 .Password
当用户在编辑控件中输入字符时,在编辑框中不显示输入的文本,而是相同个数的“*”字符。这一选项在多行编辑控件中不能使用。默认不被选中。
9. No hide selection
当编辑控件失去或重新获得焦点时,该项设置将改变文本的显示方式,使编辑框中选择的文本好像总是处于选中状态。默认该选项不被选中。
10. OEM convert
对用户输入内容进行从Windows字符集到OEM字符集的转化,这样可以使调用AnsiToOem时正常工作。默认不被选中。
11.Want return
应用于多行编辑控件。该选项允许在编辑控件中按Enter键换行,而不影响对话框的默认按钮。
12. Border
为控件创建边界,该选项默认被选中。
13. Uppercase
将所有的输入内容转化为大写字符,默认不被选中。
14. Lowercase
将所有的输入内容转化为小写字符,默认不被选中。
15. Read-only
禁止用户在编辑控件中输入或修改其内容,默认不被选中。与静态文本控件的扩展属性相比,编辑控件的扩展属性只增加了一项Left scroll bar,如果设置了垂直滚动条,这一项决定了滚动条在客户区的左边。它的类型是布尔型,默认情况下不选中。

5. 动态创建CEdit类对象
//this 为parent窗口的指针
//pEdt为类的成员变量,类型为CEdit*,在构造函数中初始化为NULL
// m_EdtCreated为类的成员变量,类型为BOLL,在构造函数中初始化为FALSE

if (!m_EdtCreated){
//为第三个编辑区添加编辑控件
pEdt=new CEdit;
pEdt->Create(ES_MULTILINE|WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER,CRect(0,301,250,800),this,1);

m_EdtCreated=TRUE;
}
6. CEdit限制输入,重新onchar
void MyEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if(nChar <= ‘9’ && nChar >= ‘0’)//数字
CEdit::OnChar(nChar, nRepCnt, nFlags);
if(nChar >=0x4E00 && nChar <= 0x9FFF)//常用字
CEdit::OnChar(nChar, nRepCnt, nFlags);
if(nChar >=0x3400 && nChar <= 0x4dff)//少用字
CEdit::OnChar(nChar, nRepCnt, nFlags);
if(nChar >=0x20000 && nChar <= 0x2A6DF)//少用字,历史上使用
CEdit::OnChar(nChar, nRepCnt, nFlags);
return;
}
7. 选择
int nStart,nEnd;
myedit.Setsel(0,-1); //选定编辑框中所有文本
myedit.Getsel(nStart,nEnd); //获取选定文本的开始与结束位置,并存在nStart,nEnd
myedit.Setsel(nEnd,nEnd); //将插入符移动到指定文本的结束位置
myedit.ReplaceSel(str); //显示新的字符串

8. 锁定更新
//1. 声明临界区,一个全局变量,这样各个线程都可以访问到。
CRITICAL_SECTION cs;

//2. 初始化临界区变量
InitializeCriticalSection(&cs);

//3. 追加 CEdit 内容。CEdit 可以声明为一个全局变量
static void addText(CEdit *edit, CString cstr)
{
EnterCriticalSection( & cs);// 获得锁
CString str;
edit->GetWindowText(str);
edit->SetWindowText(str + _T(“\r\n\r\n”) + cstr);

LeaveCriticalSection( & cs);

}

9. 待更新

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值