SetSel(start,end)作用:
定制EDIT的所选择内容.间接地可以用于定位光标位置.
使用例子:
EXP1:设置光标
CEdit* pEdit=(CEdit*)GetDlgItem(IDC_EDIT1);
pEdit->SetSel(2,2);
pEdit->SetFocus();
EXP2:选择内容
CEdit* pEdit=(CEdit*)GetDlgItem(IDC_EDIT1);
pEdit->SetSel(0,2);//CEdit edit = (CEdit)GetDlgItem(IDC_EDIT1);//因为GetDlgItem返回的是CWnd*类型,但是实际上你的控件是CWnd下的CEdit,如果不转你就无法用这个指针来调用CEdit类所特有的函数接口了
说明:
如果出现光标设置失效的情况,可能是由于以下情况:因为UpdateData()的作用也会重置光标,所以用于设置光标时一定要放在UpdateData()之后.
如果用于选择内容:SetSel(0,-1)表示全选;SetSel(-1,i)表示删除所有.
1.怎么在CEDIT执行回车换行显示的功能?
CEdit控件设置want return 属性 并设置Multiline属性,此时用
CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT1);
pEdit->SetWindowText(“第一/r/n第二/r/n第三”);
将显示3行。
2。作为密码输入控件使用。
m_WndEDIT4.SetPasswordChar(‘*’);
3。CEDIT没有AppendText功能怎么办?
int nLength = m_WndEDIT4.SendMessage(WM_GETTEXTLENGTH);
m_WndEDIT4.SetSel(nLength, nLength);
m_WndEDIT4.ReplaceSel( ” abc ” );
1.如果文本框和变量建立了关联直接
UpdateData(TRUE) //用于获得文本框中的内容;
UpdateData(FALSE) //用于更新文本框的内容并和更新关联的变量
例如:
DDX_Text(pDX, IDC_EDIT1, m_sEdit1);//把变量m_sEdit1与IDC_EDIT1建立联系
//让文本框中显示“Hello”
m_sEdit1 = “Hello”;
UpdateData(FALSE);
//获得文本框的用户输入内容
UpdateData(TRUE);//如果用户写入的是”MingFei”,那么m_sEdit1的值应该是”MingFei”
if (m_sEdit1 == “MingFei”)
{
AfxMessageBox(“OK”);
}
2.
CString str;
GetDlgItemText(IDC_EDIT1, str);//获得文本框中的内容,保存在str中
SetDlgItemText(IDC_EDIT1, str);//向文本框中写入str
3.麻烦点,其实就是第二种方法
CEdit edit=(CEdit)GetDlgItem(IDC_EDIT1);
CString dir;
edit->GetWindowText(dir);
(47) 如何限制编辑框中的准许字符
如果用户在编辑控件中只允许接收数字,可以使用一个标准的编辑控件并指定新的创建标志ES_NUMBERS,它是Windows 95新增加的标志,该标志限制 编辑控件只按收数字字符。如果用户需要复杂的编辑控件,可以使用Microsoft 的屏蔽编辑控件,它是一个很有用的OLE定制控件。
如果希望不使用OLE 定制控件自己处理字符,可以派生一个CEdit类并处理WM_CHAR消息,然后从编辑控件中过滤出特定的字符。首先,使用ClassWizard建立一个 CEdit的派生类,其次,在对话类中指定一个成员变量将编辑控件分类在OnInitdialog 中调用CWnd: : SubclassDlgItem .
//In your dialog class declaration (.H file )
private : CMyEdit m_wndEdit // Instance of your new edit control .
//In you dialog class implementation (.CPP file )
BOOL CSampleDialog : : OnInitDialog ( )
{
…
//Subclass the edit lontrod .
m_wndEdit .SubclassDlgItem (IDC_EDIT,this)
…
}
使用ClassWizard处理WM_CHAR消息,计算nChar参量并决定所执行的操作,用户可以确定是否修改、传送字符。下例说明了如何显示字母字符,如果字符是字母字符,则调用CWnd OnChar,否则不调用OnChar.
//Only display alphabetic dharacters .
void CMyEdit : : OnChar (UINT nChar , UINT nRepCnt , UITN nFlags )
{
//Determine if nChar is an alphabetic character.
if (: : IsCharAlpha ( ( TCHAR) nChar ) )
CEdit : : OnChar (nChar, nRepCnt , nFlags )
}
如果要修改字符,则不能仅仅简单地用修改过的nChar调用CEdit: : OnChar,然后CEdit: : OnChar调用CWnd: : Default获取原来的wParam 和lParam 的值,这样是不行的。要修改一个字符,需要首先修改nChar,然后用修改过的nChar调用CWnd: : DefWindowProc。下例说明了如何将字符转变为大写:
//Make all characters uppercase
void CMyEdit : : OnChar (UINT nChar , UINT nRepCnt , UINT nFlags )
{
//Make sure character is uppercase .
if (: : IsCharAlpha ( .( TCHAR) nChar)
nChar=: : CharUpper(nChar )
//Bypass default OnChar processing and directly call
//default window proc.
DefWindProc (WM_CHAR, nChar , MAKELPARAM (nRepCnt, nFlags ))
}
枚举所有字体
LOGFONT lf;
lf.lfCharSet = DEFAULT_CHARSET; // Initialize the LOGFONT structure
strcpy(lf.lfFaceName,”“);
CClientDC dc (this);
// Enumerate the font families
::EnumFontFamiliesEx((HDC) dc,&lf, (FONTENUMPROC) EnumFontFamProc,(LPARAM) this,0);
//枚举函数
int CALLBACK EnumFontFamProc(LPENUMLOGFONT lpelf,
LPNEWTEXTMETRIC lpntm,DWORD nFontType,long lparam)
{
// Create a pointer to the dialog window
CDay7Dlg* pWnd = (CDay7Dlg*) lparam;
// add the font name to the list box
pWnd ->m_ctlFontList.AddString(lpelf ->elfLogFont.lfFaceName);
// Return 1 to continue font enumeration
return 1;
}
——————————————————————————————————————————————
CEdit类提供了Windows编辑控件中的功能。编辑控件是一个子窗口矩形,用户可以向其中输入文本。
可以通过对话模板或直接从代码中创建一个编辑控件。在两种情形下,首先调用CEdit构造程序构造CEdit对象,再调用Create成员函数创建Windows编辑控件并将其与CEdit对象连接。
构造在CEdit的派生类中可以单步实现。为派生类编写构造程序并从构造程序中调用Create。
CEdit从CWnd继承了重要的功能,要在CEdit对象中设置或获取文本,使用CWnd成员函数SetWindowText和GetWindowText,可以设置和得到编辑控件的全部内容,即使它是一个多行控件。如果编辑控件是多行的,使用CEdit成员函数GetLine,GetSel,GetSel和ReplaceSel来获取和写入控件的部分文本。
如果要处理编辑控件发往其父类(通常是一个CDialog派生类)的通知消息,则向父类中为每一消息添加一个消息映射入口和消息处理成员函数。
各消息映射入口可采用如下形式:
ON_Notification(id,memberFxn)
其中id指定了发送通知的编辑控件的子窗口ID,memberFxn为你写好的处理通知的父成员函数的名字。
父函数形式如下:
afx_msg void memberFxn();
下面是一组可能的消息映射入口,以及在何种情况下向父类发送的描述:
· ON_EN_CHANGE 用户采取的行动可能会改变编辑控件的文本。与EN_UPDATE通知消息不同,该通知是在Windows更新显示之后发送的。
· ON_EN_ERRSPACE 编辑控件不能为特定请求分配足够的空间。
· ON_EN_HSCROLL 用户单击了编辑控件中的水平滚动条,父窗口在屏幕更新之前被通知。
· ON_EN_KILLFOCUS 编辑控件失去输入焦点。
· ON_EN_MAXTEXT 当前输入超过了为编辑控件指定的数目,并作截尾处理。当编辑控件不具有ON_EN_HSCROLL风格且要输入的字符会超过编辑控件的宽度时,发送消息。当编辑控件不具有ON_EN_VSCROLL风格且要输入的字符会超过编辑控件的高度时,也会发送消息。
· ON_EN_SETFOCUS 编辑控件获得焦点。
· ON_EN_UPDATE 编辑控件将要显示变动的文本。在控件对文本格式化之后但在显示文本之前发送消息,以便在必要时改变窗口尺寸。
· ON_EN_VSCROLL 用户单击了编辑控件中的垂直滚动条,父窗口在屏幕更新之前被通知。
如果在对话框内创建CEdit对象,CEdit对象在用户关闭对话框时自动被删除。
如果使用对话框编辑器从对话资源中创建CEdit对象,CEdit对象在用户关闭对话框时自动被删除。
如果在窗口内创建CEdit对象,也需要删除它。如果在栈上创建CEdit对象,它被自动删除。如果使用new函数在堆上创建CEdit对象,在用户中止编辑控件时,必须对其调用delete来删除它。如果在CEdit对象中分配存储空间,覆盖CEdit析构程序来处理分配情况。
#include