vc中edit控件使用总结
- 格式:doc
- 大小:26.50 KB
- 文档页数:2
VC6.0常用控件使用方法 26、List Box---------------列表框控件--类CListBox(1)插入项m_list.AddString(string);(2)设置当前选择项m_list.SetCurSel(项索引);(3)获取当前选择项int nIndex = m_list.GetCurSel();m_list.GetText(nIndex, string);(4)删除一项m_list.DeleteString(项索引);(5)删除所有项m_list.ResetContent();(6)获取总项数m_list.GetCount()(7)List Box的选项前面加复选框(Check Box)a.风格声明时用类CCheckListBox代替CListBox,即CCheckListBox m_list;而不是CListBox m_list;属性对话框->Styles->Owner draw设为Fixed属性对话框->Styles->勾选Has stringsb.设置选择void SetCheck( int nIndex, int nCheck );ParametersnIndexIndex of the item whose check box is to be set.nCheckState of the check box: 0 for clear, 1 for checked, and 2 for indeterminate.c.获取选择int GetCheck( int nIndex );ParametersnIndexIndex of the item whose check status is to be retrieved.Return ValueZero if the item is not checked, 1 if it is checked, and 2 if it is indeterminate.7、List Control----------列表框扩展控件--类CListCtrl(1)样式:属性对话框框->Styles->Format有4,分别是Icon/Small Icon/List/Report;(2)Report格式设置扩展风格DWORD dwStyle = m_list.GetExtendedStyle();dwStyle |= LVS_EX_FULLROWSELECT; // 选中某行使整行高亮(只适用与report风格的listctrl)dwStyle |= LVS_EX_GRIDLINES; // 网格线(只适用与report风格的listctrl)m_list.SetExtendedStyle(dwStyle);(3)Report格式插入列m_list.InsertColumn(1, "列一", LVCFMT_RIGHT, 150);m_list.InsertColumn(2, "列二", LVCFMT_LEFT, 100);m_list.InsertColumn(3, "列三", LVCFMT_LEFT, 100);m_list.InsertColumn(4, "列四", LVCFMT_LEFT, 200);m_list.InsertColumn(5, "ID", LVCFMT_CENTER, 0);(4)Report格式插入一行数据int nIndex = m_list.GetItemCount();m_list.InsertItem(nIndex, s1);m_list.SetItemText(nIndex, 1, s2);m_list.SetItemText(nIndex, 2, s3);m_list.SetItemText(nIndex, 3, s4);m_list.SetItemText(nIndex, 4, s5);(5)Report格式删除所有行m_list.DeleteAllItems();(6)Report格式获取某行某列数据CString sID = m_list.GetItemText(行索引,列索引);(7)Report格式删除选择行,多选时可用循环。
常⽤组件的使⽤(2)-TEdit单⾏⽂本编辑组件TEdit组件提供了⽤户与程序的交互界⾯,主要⽤于数据的显⽰与输⼊。
1、AutoSelect属性:当该组件获得焦点时,是否选中该组件中的所有⽂本,该属性只能在单⾏⽂本中使⽤。
2、BorderStyle属性:可调整组建的客户区域突出效果,默认bsSingle(有单线边框),bsNone(⽆边框,平⾯)。
3、CanUndo属性:决定⽤户修改⽂本后能否⾃动通过调⽤Undo ⽅法回退,也就是撤回操作(Ctrl+Z)。
4、CharCase属性:⽤于确定组件中⽂本的⼤⼩写,可将组件中的内容强制转换为特定的⼤⼩写。
5、MaxLength属性:限制⽤户输⼊的字符数,为 0 ,表⽰没有指定任何限制(例如输⼊电话号码)。
6、PasswordChar属性:输⼊的内容显⽰为特殊字符(密⽂),如果为空(ANSI字符为0),编辑组件将显⽰正常⽂本,该属性只是影响外观,Text属性会反应输⼊的实际值。
7、ReadOnly属性:⽤于是否可改变编辑组件中的⽂本,为True时不可修改但允许选择并复制到剪贴板。
反之,可编辑内容。
8、SelStart属性:读取该属性的值,可确定第 1 个被选字符的起始位置,0 指向第1 个字符,如果没有所选⽂本,则该属性指向光标位置,设置这个属性删除当前选择并将光标位置指向字符的前⾯。
如果要选择⼀定范围的⽂本,则⾸先设置该属性指向光标,然后设置SelLength 属性扩⼤选择范围。
(简⽽⾔之就是读取⼀段⽂本,然后去欸的那个所选字符的起始位置)9、SelLength属性:该属性⽤于指定所选⽂本的字符长度,设置后可将从SelStart 开始前的SelLength 个字符选中,设置其值⼤于从SelStart 开始到⽂本结束的字符数,将使字符串被全部选中。
此时读取该属性返回实际所选取的字符数,⽽不是设置其值。
⽰例:选中指定长度的⽂本beginEdit3.SetFocus;Edit3.SelStart:= StrToInt(Edit1.Text);Edit3.SelLength:= StrToInt(Edit2.Text);end;⽰例:验证输⼊⽂本的合法性//利⽤OnChange事件验证输⼊到⽂本框中的⽂本的合法性,如果使⽤⾮数字输⼊就会弹框提⽰procedure TForm1.Edit1Change(Sender: TObject);varStr: string;beginStr:= '';Str:= Edit1.Text;if Length(Str)> 0thenif not (Str[Length(Str)] in ['0'..'9',#8]) thenbeginApplication.MessageBox('请输⼊数字!','博客园',MB_OKCANCEL + MB_ICONINFORMATION);Edit1.text:= LeftStr(Str,Length(Str)- 1);//截取字符串Str左侧*个字符。
SLickEdit使用技巧整理1、快速进入命令行按Esc可在编辑界面和命令行之间相互切换。
2、设置双击关闭文件Tools-Options-Editing-Editor Windows,找到Tab double-click action,点击后面,选择Close file。
3、让所有文件显示行号Tool-Option-Languages-Application Language-C/C++-View,把Line numbers选中4、设置单击打开折叠代码Tool-Keyboard and Mouse-Advanced,找到Selective Display, Expand/Collapse,设置为Expand on single click。
5、Project窗口鼠标指向文件不浮出该文件路径Tools-Options-Appearance-Toolbars-Options,不选Show tool tips。
6、在编辑界面添加多个光标,用于赋值与多行按住Ctrl按键在相应位置点击鼠标左键。
按住Ctrl同时按下鼠标左键拖动鼠标或者双击鼠标左键可以多行选中(仅选中文字,与按住鼠标左键拖动分开)7、选中一竖行代码或者数据按住鼠标右键拖动,便可以实现选中竖行,此时可以删除竖行内容,特别注意,如果是将竖行的数据复制然后粘贴,需要安装Shift选中,因为按住Shift可以出现多个光标,粘贴时才会自动换行,否则的话就是插入。
8、大小写转换大写转小写:Ctrl+U,对应命令upcase-selection,小写转大写:Ctrl+Shift+U,对应命令lowcase-selection9、在C/C++中高亮当前光标处对应的Symbol,所有调用和定义的地方都会高亮Tools-->Options-->languages-->Application Languages-->C/C++ -->Context Tagging勾选Highlighting and Completion 项中的Highlight matching symbols under cursor10、如何在Proview中变量只显示定义,不显示声明在Proview窗口点击右键,Scope-不选中Extern。
c++buildertedit控件设置文本摘要:1.C++Builder 中的TEdit 控件2.TEdit 控件的文本设置3.如何在C++Builder 中使用TEdit 控件设置文本正文:【1.C++Builder 中的TEdit 控件】C++Builder 是一个强大的C++集成开发环境(IDE),它提供了许多可视化组件,使得开发者可以轻松地创建图形用户界面(GUI) 应用程序。
在C++Builder 中,TEdit 控件是一种常用的文本编辑控件,可以让用户在应用程序中输入和编辑文本。
【2.TEdit 控件的文本设置】在C++Builder 中,可以使用TEdit 控件的Text 属性来设置控件中显示的文本。
Text 属性可以用于设置初始文本,也可以用于在运行时修改文本。
【3.如何在C++Builder 中使用TEdit 控件设置文本】以下是在C++Builder 中使用TEdit 控件设置文本的步骤:1.打开C++Builder,并创建一个新的VCL 应用程序项目。
2.在“对象库”中,找到“Edit”控件(或称为“TEdit”控件),然后将其拖放到窗体上。
3.在窗体上添加一个按钮,以便在单击按钮时修改TEdit 控件中的文本。
4.双击按钮,在按钮的Click 事件处理程序中添加以下代码:```// 获取TEdit 控件的指针TEdit *edit = (TEdit *)FindObject("TEdit1");// 修改TEdit 控件中的文本edit->Text = "这是新的文本";```5.运行应用程序,可以看到TEdit 控件中显示的文本为“这是新的文本”。
6.若要设置TEdit 控件的初始文本,请在设计时将Text 属性设置为所需的文本,或者在代码中使用以下方法:```// 获取TEdit 控件的指针TEdit *edit = (TEdit *)FindObject("TEdit1");// 修改TEdit 控件的初始文本edit->Text = "这是初始文本";```通过以上步骤,您可以在C++Builder 中使用TEdit 控件设置文本。
VC无闪烁刷屏技术的实现---经验总结之防止窗口闪烁的方法也许我们都碰到过这种情况,当你想重画某个窗口的时候,或你需要每隔一段时间要进行重画窗口,窗口会不停的闪烁。
那么如何消除闪烁呢?借鉴了别人的经验,自己也总结一下,现将总结的几种方法介绍一下,供大家参考。
1、将Invalidate()替换为InvalidateRect()。
因为Invalidate()会导致整个窗口的图象重画,需要的时间比较长,而InvalidateRect()仅仅重画Rect区域内的内容,所需时间会少一些。
所以替换之后在很大程度上会减少闪烁。
如果你确实需要改善闪烁的情况,计算一个Rect所用的时间比起重画那些不需要重画的内容所需要的时间要少得多。
2、不要让系统擦除你的窗口。
系统在需要重画窗口的时候会帮你用指定的背景色来擦除窗口。
可是,也许需要重画的区域也许非常小。
或者,在你重画这些东西之间还要经过大量的计算才能开始。
这个时候你可以禁止系统擦掉原来的图象。
直到你已经计算好了所有的数据,自己把那些需要擦掉的部分用背景色覆盖掉(如:dc.FillRect(rect,&brush);rect是需要擦除的区域,brush是带背景色的刷子),再画上新的图形。
要禁止系统擦除你的窗口,可以重载OnEraseBkgnd()函数,让其直接返回TRUE就可以了。
如BOOL CMyWin::OnEraseBkgnd(CDC* pDC){return TRUE;//return CWnd::OnEraseBkgnd(pDC);//把系统原来的这条语句注释掉。
}3、有效的进行擦除。
擦除背景的时候,不要该擦不该擦的地方都擦。
比如,你在一个窗口上放了一个很大的Edit框,几乎占了整个窗口,那么你频繁的擦除整个窗口背景将导致Edit不停重画形成剧烈的闪烁。
事实上你可以CRgn创建一个需要擦除的区域,只擦除这一部分。
如GetClientRect(rectClient);rgn1.CreateRectRgnIndirect(rectClient);rgn2.CreateRectRgnIndirect(m_rectEdit);if(bineRgn(&rgn1,&rgn2,RGN_XOR) == ERROR)//处理后的rgn1只包括了Edit框之外的客户区域,这样,Edit将不会被我的背景覆盖而导致重画。
edit指令的用法
"edit"指令是一个常见的命令行指令,用于编辑文本文件。
它通常在终端或命令提示符下使用,具体使用方法如下:
1. 打开终端或命令提示符。
2. 输入"edit"命令,后面跟上要编辑的文件名和扩展名(例如:edit myfile.txt)。
3. 按下回车键,系统会打开指定的文本文件,并将光标置于文件的开头位置。
4. 按下键盘上的方向键和其他编辑键来移动光标、插入、删除和修改文本内容。
常见的编辑键包括:箭头键、删除键、退格键、插入键等。
5. 编辑完成后,按下Ctrl + S组合键保存文件。
然后按下Ctrl + X组合键退出编辑器。
需要注意的是,"edit"指令在不同的操作系统和终端程序中可能有所不同,以上是一般的使用方法。
在某些系统中,也可以使用其他编辑器程序来替代"edit"指令,例如"vi"、"nano"等。
请根据实际情况选择适合您的编辑器。
cedit用法什么是cedit?cedit是一个文本编辑器,主要用于编写和编辑代码文件。
它提供了一些高级功能,使开发者能够更高效地编写代码。
cedit的特点1.语法高亮:cedit支持多种编程语言的语法高亮显示,能够帮助开发者更好地理解和阅读代码。
2.自动完成:cedit可以根据已输入的内容自动补全代码,减少开发者的输入量,并提供了智能提示功能,帮助开发者快速找到需要的函数或方法。
3.多窗口模式:cedit支持同时打开多个文件,并以标签页形式展示,方便开发者在不同文件之间进行切换。
4.代码折叠:cedit可以根据代码结构进行折叠和展开操作,使得长篇大论的代码变得更加简洁可读。
5.书签功能:cedit允许开发者在代码中设置书签,并通过快捷键进行跳转,方便查看和修改关键部分的代码。
6.搜索替换:cedit提供了强大的搜索替换功能,支持正则表达式,并且可以同时替换多处匹配项。
7.宏录制与回放:cedit允许开发者录制和回放宏,以减少重复性的工作,提高编写代码的效率。
8.版本控制集成:cedit可以与版本控制系统(如Git)集成,方便开发者进行代码的版本管理和协同开发。
cedit的安装和配置1.下载cedit:你可以从官方网站()下载适用于你的操作系统的cedit安装包。
2.安装cedit:双击安装包,并按照提示完成安装过程。
在安装过程中,你可以选择是否创建桌面快捷方式等选项。
3.配置cedit:打开cedit后,点击“设置”菜单,进入设置页面。
在这里,你可以自定义各种编辑器的行为和外观,例如字体、颜色主题等。
4.插件扩展:cedit支持通过插件扩展其功能。
你可以在官方网站上找到各种插件,并按照说明进行安装和配置。
cedit的基本操作1.新建文件:点击“文件”菜单中的“新建”选项或使用快捷键Ctrl+N来新建一个空白文件。
2.打开文件:点击“文件”菜单中的“打开”选项或使用快捷键Ctrl+O来打开一个已存在的文件。
Spin控件和Edit控件合用,实现Edit控件中数字的增减Spin控件和Edit控件合用,实现Edit控件中数字的增加或减少。
(1)整数的增减:CEdit *prow=(CEdit *)GetDlgItem(IDC_EDIT_ROWS);m_spinRows.SetBuddy(prow);m_spinRows.SetRange(1,100);m_spinRows.SetBase(1);m_spinRows.SetPos(2);CSpinButtonCtrl m_spinRows;//已在先前定义定义在Spin控件的属性信息中,styles中选中一、二项,即A自动伙伴、Setbuddy integer.(2)在上面的例子中使用Spin控件时,可能碰到的一个问题时,Spin控件的上下箭头默认只能调整整数数值,无法以小数的方式进行调整。
要能够以小数方式,比如每次次0.1的步长增加或减少数值,需要我们编程实现。
当用户单击Spin 控件的上下箭头时,对话框会接收到WM_VSCROLL消息,我们在这个消息响应函数中设置编辑框的值就可以了:void CCommonControlDlg::OnVScroll(UINT nSBCode,UINT nPos,CScrollBar *pScrollBar){if(SB_ENDSCROLL==nSBCode)return;if(pScrollBar->GetDlgCtrlID()==IDC_SPIN){CSpinButtonCtrl* pSpin=(CSpinButtonCtrl)pScrollBar;CString strValue;strValue.Format("%3.1f",(double)pSpin->GetPos()/10);pSpin->GetBuddy()->SetWindowText(strValue);}CDialog::OnVScroll(nSBCode,nPos,pScrollBar);}VC学习笔记6:旋转控件(Spin)的使用当单击旋转控件上的按钮时,相应的编辑控件值会增大或减小。
CEdit&CRichEdit使用技巧注:m_edit1代表ID为IDC_EDIT1的CEdit控件的control类型的变量m_richedit1代表ID为IDC_RICHEDIT1的CRichEditCtrl控件的control类型的变量1.设置edit只读属性方法一:m_edit1.SetReadOnly(TRUE);方法二:::SendMessage(m_edit1.m_hWnd,EM_SETREADONLY,TRUE,0);2.判断edit中光标状态并得到选中内容(richedit同样适用)int nStart,nEnd;CString strTemp;m_edit1.GetSel(nStart,nEnd);if(nStart==nEnd){strTemp.Format(_T("光标在%d"),nStart);AfxMessageBox(strTemp);}else{//得到edit选中的内容m_edit1.GetWindowText(strTemp);strTemp=strTemp.Mid(nSta rt)-strTemp.Mid(nEnd);AfxMessageBox(strTemp);}注:GetSel后,如果nStart和nEnd,表明光标处于某个位置(直观来看就是光标在闪动);如果nStart和nEnd不相等,表明用户在edit中选中了一段内容。
3.在edit最后添加字符串CString str;m_edit1.SetSel(-1,-1);m_edit1.ReplaceSel(str);4.随输入自动滚动到最后一行(richedit同样适用)方法一:(摘自msdn)//The pointer to my edit.extern CEdit*pmyEdit;int nFirstVisible=pmyEdit->GetF irstVisibleLine();//Scroll the edit control so that the first visible line//is the first line of text.if(nFirstVisible>0){pmyEdit->LineScroll(-nFirstVisible,0);}方法二:m_richedit.PostMessage(WM_VSCROLL,SB_BOTTOM,0);5.如何限制edit输入指定字符可以从CEdit派生一个类,添加WM_CHAR消息映射。
Edit Control控件最常见的用法,一般有有以下几种:1、显示默认的字符串;2、接受用户输入的字符串。
3、作为密码框接受用户输入的字符串。
Edit Control对应的MFC类为CEdit类。
而CEdit是继承自CWnd类的,所以也继承了来自CWnd类的GetWindowText()和SetWindowText()。
其实从这两个函数的名字大家都可以看出来是做什么用的了。
我们来一步一步实现Edit Control控件的这三种最常见的用法。
首先,先建立一个项目,在VC++中选择MFC,选择MFC应用程序,并选择基于对话框的。
项目完全打开后,我们可以看到默认生成的对话框,我们从工具箱拉一个Edit Control到对话框上。
使用Ctrl+左键双击,创建一个和Edit Control 控件的一个变量,也即一个CEdit类的对象。
此处为m_edit.接下来我们可以在对话框的CXXXDlg::OnInitDialog()中添加代码。
此处XXX是项目名称。
在此函数中添加:m_edit.SetWindowText(_T("welcome to edit"));然后我们调试程序,就可以看到对话框上面放置的Edit Control中显示了上述字符串的内容。
其实这个函数很简单,只是一个需要设置的字符串。
我们来看下关于这个函数的具体内容:CWnd::SetWindowTextvoid SetWindowText( LPCTSTR lpszString );参数:lpsz String指向一个CString对象或以null结尾的字符串,将被用作新的标题或控件文本。
说明:这个函数将窗口的标题设为指定的文本。
如果窗口为一个控件,则将设置控件内的文本。
这个函数使一条WM_SETTEXT消息被发送到这个窗口。
而我们要得到Edit Control控件中输入的内容的话,我们需要一个触发。
此处我们以点击确定键为触发。
Spin控件和Edit控件合用,实现Edit控件中数字的增减Spin控件和Edit控件合用,实现Edit控件中数字的增加或减少。
(1)整数的增减:CEdit *prow=(CEdit *)GetDlgItem(IDC_EDIT_ROWS);m_spinRows.SetBuddy(prow);m_spinRows.SetRange(1,100);m_spinRows.SetBase(1);m_spinRows.SetPos(2);CSpinButtonCtrl m_spinRows;//已在先前定义定义在Spin控件的属性信息中,styles中选中一、二项,即A自动伙伴、Setbuddy integer.(2)在上面的例子中使用Spin控件时,可能碰到的一个问题时,Spin控件的上下箭头默认只能调整整数数值,无法以小数的方式进行调整。
要能够以小数方式,比如每次次0.1的步长增加或减少数值,需要我们编程实现。
当用户单击Spin 控件的上下箭头时,对话框会接收到WM_VSCROLL消息,我们在这个消息响应函数中设置编辑框的值就可以了:void CCommonControlDlg::OnVScroll(UINT nSBCode,UINT nPos,CScrollBar *pScrollBar){if(SB_ENDSCROLL==nSBCode)return;if(pScrollBar->GetDlgCtrlID()==IDC_SPIN){CSpinButtonCtrl* pSpin=(CSpinButtonCtrl)pScrollBar;CString strValue;strValue.Format("%3.1f",(double)pSpin->GetPos()/10);pSpin->GetBuddy()->SetWindowText(strValue);}CDialog::OnVScroll(nSBCode,nPos,pScrollBar);}VC学习笔记6:旋转控件(Spin)的使用当单击旋转控件上的按钮时,相应的编辑控件值会增大或减小。
edit控件常见用法- Edit控件常见用法:1. 编辑文本Edit控件最基本的用法就是用来编辑文本。
用户可以在Edit控件中输入、删除、修改文本内容,实现对文本的编辑操作。
2. 显示文本除了编辑文本,Edit控件也可以用来显示文本。
通过设置控件的只读属性,可以让用户在Edit控件中查看文本内容,但不能修改。
3. 输入限制为了保证输入的准确性,Edit控件可以设置输入限制。
比如,可以限制输入的字符类型(数字、字母等),或者限制输入的长度。
4. 格式化输入有些情况下,需要对用户输入的内容进行格式化处理。
比如,输入电话号码时需要自动在合适的位置添加分隔符,输入日期时需要自动添加格式等。
这时,可以通过Edit控件的格式化功能来实现。
5. 密码输入有些情况下,需要用户输入密码。
为了保护用户的隐私,Edit控件可以设置为密码模式,隐藏输入的字符。
这样,用户输入的内容就不会被其他人偷窥到。
6. 自动完成Edit控件还可以提供自动完成功能。
比如,在输入邮件地址时,可以自动匹配已有的地址,方便用户选择。
7. 多行编辑有些情况下,需要用户输入多行文本。
这时,可以使用Edit控件的多行编辑功能。
用户可以在控件中输入多行文本,实现对多行文本的编辑操作。
8. 撤销和重做Edit控件还提供了撤销和重做功能,方便用户在编辑过程中进行撤销和恢复操作。
9. 剪切、复制和粘贴为了方便用户进行编辑操作,Edit控件还提供了剪切、复制和粘贴功能。
用户可以选择需要操作的文本,然后进行相应的操作。
10. 搜索和替换Edit控件还可以提供搜索和替换功能。
用户可以在文本中搜索指定的内容,然后进行替换操作。
以上就是Edit控件常见的用法。
通过合理的使用,可以让Edit 控件更好地满足用户的需求,提高应用程序的用户体验。
用VC++6.0编程的时候,文本编辑控件Edit Box是一个经常用到的控件。
如果你是用它输入一些简单的文字、数字等信息,直接拿来用就可以了,但如果你用它制作大文本的编辑软件,就会觉得不好控制,许多功能无法实现,即便用CEditView,也只会生成一个类似于记事本的东西,再想加入些自己编写的功能也很困难。
下面我以CEdit为基类定义了一个CEditBox类,加入了许多文本编辑时经常要用到的接口函数,用它来控制Edit Box控件就很容易制作出具有较强文本编辑功能的编辑软件了。
在这个扩展类中主要增加了以下功能:①增加控件的容量,使它能容纳大文本;②可设置编辑控件文字颜色、背景色和字体;③对控件内的文本和选择文本的访问;④直接装入文件到控件和保存控件内容到文件;⑤自定义的右键菜单;⑥多重ReDo/UnDo功能。
这些功能基本上都是独立的,实际使用时可根据需要选用所需功能。
准备工作:用ClassWizard在工程中加入一个新类,基类选为CEdit,类名设置为CEditBox。
一、设置控件的容量:EditBox控件默认情况下只能装入64K的文本,如果超出,多出部分会被自动截掉。
利用CEdit类的SetLimitText()函数可重新设置控件容量。
函数原型为:void SetLimitText(UINT nMax);参数为nMax为控件可接收的文本最大字节数。
设置方法:用ClassWizard在CEditBox类中添加消息函数PreSubclassWindow(),把设置文本容量的语句放在里面即可。
因为nMax为无符号整型,-1是把它设置为可以取到的最大值。
你也可以根据需要设置控件的容量。
注意:在不同操作系统下,控件可设置的最大容量也不同。
如果是Windows98,这个值就是64K,无法再增大了,而在Windows2000和WindowsXP下这个值要大得多,才可以起到增加控件容量的目的。
二、设置编辑控件的前景色、背景色和字体:在CEditBox的头文件中加入以下变量定义:在CEditBox的构造函数中设置它们的初值:在CEditBox的析构函数中回收创建的字体资源:这里只设置了前景色和背景色的默认值,如果想设置默认字体,可在上面的PreSubclassWindow()函数中进行设置:这里使用了比较简单的CreatePointFont()函数创建字体,它只需给出字体尺寸和字体名。
CRichEdit控件操作使用CRichEdit控件操作相关< 转载>一般性问题1. 代码编译通过了,运行后RichEdit控件不显示,在InitInstance中添加BOOL CWinApp::InitInstance (){…AfxInitRichEdit(); - RichEdit 1.0或 AfxInitRichEdit2(); - RichEdit 2.0…}2. 升级默认的RichEdit版本,默认的版本有BUG,在InitInstance中添加BOOL CWinApp::InitInstance (){…LoadLibrary("RICHED20.DLL");…FreeLibrary();}如果是CRichEditView基类的话,可用如下消息机制:BOOL CRichEditView::PreCreateWindow(CREATESTRUCT& cs) {if (LoadLibraryA("RICHED20.DLL") == NULL){AfxMessageBox(_T("Fail to load /"riched20.dll/"."),MB_OK |MB_ICONERROR);PostMessage(WM_QUIT,0,0);return FALSE;}m_strClass = RICHEDIT_CLASSA;return CRichEditView::PreCreateWindow(cs);}3. 在RichEdit控件的输入框中最后追加一行CRichEditCtrl.SetSel(-1, -1);CRichEditCtrl.ReplaceSel((LPCTSTR)str);4. 限制RichEdit控件的字数CRichEditCtrl.LimitText(long nChars)5. 设置RichEdit控件的换行切换如果是CRichEditView基类的话,可用如下消息机制:BOOL CRichEditView::OnInitialUpdate(){…m_nWordWrap = WrapNone;WrapChanged();…}如果是在Dialog,可使用SetTargetDevice,并在RichEdit的属性里面加上want returnCRichEditCtrl.SetTargetDevice(m_dcTarget, GetPrintWidth());WrapChanged实际上也是调用CRichEditCtrl.SetTargetDevice(NULL, 0); //m_nWordWrap == WrapToWindowCRichEditCtrl.SetTargetDevice(NULL, 1); //m_nWordWrap == WrapNoneCRichEditCtrl.SetTargetDevice(NULL, 2);// m_nWordWrap == WrapToTargetDevice6. 设置RichEdit控件不带格式的数据粘贴CRichEditCtrl.PasteSpecial(CF_TEXT);7. 设置RichEdit控件的滚动条自动随输入滚动到最后一行int nFirstVisible = CRichEditCtrl.GetFirstVisibleLine();if (nFirstVisible > 0){CRichEditCtrl.LineScroll(-nFirstVisible, 0);}或CRichEditCtrl.PostMessage(WM_VSCROLL, SB_BOTTOM, 0);8.设置RichEdit控件的撤销输入次数(只能用在RICHED20以上)SendMessage(EM_SETTEXTMODE, TM_MULTILEVELUNDO, 0);SendMessage(EM_SETUNDOLIMIT, 100, 0);TM_MULTILEVELUNDO 支持多取消(默认值),可通过EM_SETUNDOLIMIT设置最大次数9.设置RichEdit控件的OnChange事件EM_SETEVENTMASK 设置 ENM_CHANGElong lMask = GetEventMask();lMask |= ENM_CHANGE;lMask &= ~ENM_PROTECTED;SetEventMask(lMask);10.设置RichEdit控件的只读属性CRichEditCtrl::SetReadOnly(BOOL bReadOnly = TRUE );通过设置PROTECTED实现选中的文本只读,参见如下文章:函数应用1. 设置RichEdit控件的显示字体CHARFORMAT cf;ZeroMemory(&cf, sizeof(CHARFORMAT));cf.cbSize = sizeof(CHARFORMAT);cf.dwMask|=CFM_BOLD;cf.dwEffects|=CFE_BOLD; //粗体,取消用cf.dwEffects&=~CFE_BOLD;cf.dwMask|=CFM_ITALIC;cf.dwEffects|=CFE_ITALIC; //斜体,取消用cf.dwEffects&=~CFE_ITALIC;cf.dwMask|=CFM_UNDERLINE;cf.dwEffects|=CFE_UNDERLINE; //斜体,取消用cf.dwEffects&=~CFE_UNDERLINE;cf.dwMask|=CFM_COLOR;cf.crTextColor = RGB(255,0,0); //设置颜色cf.dwMask|=CFM_SIZE;cf.yHeight =200; //设置高度cf.dwMask|=CFM_FACE;strcpy(cf.szFaceName ,_T("隶书")); //设置字体CRichEditCtrl.SetSelectionCharFormat(cf);2.设置RichEdit控件的显示字体的行间距(只能用在RICHED20以上)PARAFORMAT2 pf;pf.cbSize = sizeof(PARAFORMAT2);pf.dwMask = PFM_NUMBERING | PFM_OFFSET;pf.wNumbering = PFN_BULLET; //注意PFM_NUMBERINGpf.dxOffset = 10;VERIFY(SetParaFormat(pf));常用的dwMask有如下列表:PFM_NUMBERING 成员 wNumbering 才起作用1 项目符号,默认用PFN_BULLET.2 使用阿拉伯数字 (1, 2, 3, ...).3 使用小写字母 (a, b, c, ...).4 使用大写字母 (A, B, C, ...).5 使用小写罗马数字 (i, ii, iii, ...).6 使用大写罗马数字 (I, II, III, ...).7 自定义,字符见成员 wNumberingStart.PFM_OFFSET 成员 dxOffset 才起作用,缩进,单位twipsPFM_STARTINDENT 成员 dxStartIndent 才起作用,首行缩进PFM_SPACEAFTER 成员 dySpaceAfter 才起作用,段间距PFM_LINESPACING 成员 dyLineSpacing 才起作用,行间距3.设置RichEdit控件的透明背景(只能用在RICHED20以上)long style = ::GetWindowLong(GetSafeHwnd(), GWL_EXSTYLE);style &= WS_EX_TRANSPARENT;::SetWindowLong(GetSafeHwnd(), GWL_EXSTYLE, style);或 CreateEx(),然后把WS_EX_TRANSPARENT样式加上4.获取或者写入RichEdit控件的内容GetWindowText使用EM_GETTEXTEXGETTEXTEX gt;gt.cb = 200;gt.flags = GT_DEFAULT;gt.codepage = CP_ACP ;gt.lpDefaultChar = NULL;gt.lpUsedDefChar = NULL;SendMessage(EM_GETTEXTEX,(WPARAM)>,(LPARAM)text);StreamOut(主要用于RTF等格式输出)static DWORD CALLBACK;MyStreamOutCallback(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb){CFile* pFile = (CFile*) dwCookie;pFile->Write(pbBuff, cb);*pcb = cb;return 0;}CFile cFile(TEXT("myfile.rtf"), CFile::modeCreate|CFile::modeWrite);EDITSTREAM es;es.dwCookie = (DWORD) &cFile; //设置用例参数,以便回调函数调用es.pfnCallback = MyStreamOutCallback;pmyRichEditCtrl->StreamOut(SF_RTF, es);读入可以此类推,SetWindowText, EM_SETTEXTEX, StreamIn5.查找RichEdit控件中的字符串FINDTEXTEX ft;ft.chrg.cpMin = 0;ft.chrg.cpMax = -1;ft.lpstrText = "|";long lPos = FindText(0, &ft);如果要继续查找,修改cpMin,如int nCount = 0;do{long lPos = GetRichEditCtrl().FindText(0, &ft);if( -1 == lPos) break;ft.chrg.cpMin = lPos + strlen(ft.lpstrT ext);++nCount;}while(TRUE);6. 以Html格式保存RichEdit控件中的内容临时做法可先转为RTF格式,再通过RTF-to-HTML Converter,参考如下文章:8. 重载OnProtected函数以得到RichEdit对应的消息,如粘贴等void CRichEditorView::OnProtected(NMHDR* pNMHDR, LRESULT* pResult){ENPROTECTED* pEP = (ENPROTECTED*)pNMHDR;switch (pEP->msg){case WM_KEYDOWN: //按键,判断pEP->wParamcase WM_PASTE: //粘贴case WM_CUT: //剪切case EM_SETCHARFORMAT:default:break;};*pResult = FALSE;}聊天常用1. 设置RichEdit控件的链接功能(只能用在RICHED20以上)LoadLibrary(_T("Riched20.dll"));创建RichEdit2.0控件CreateEx(0, _T("RichEdit20A"), NULL, WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_TABSTOP|ES_READONLY|ES_WANTRETURN|ES_MULTILINE, rect.left, rect.top, cx, cy, pParentWnd->m_hWnd, (HMENU)nID, NULL);设置选中的文字为链接显示CHARFORMAT2 cf2;ZeroMemory(&cf2, sizeof(CHARFORMAT2));//cf2.cbSize = sizeof(CHARFORMAT2);cf2.dwMask = CFM_LINK;cf2.dwEffects |= CFE_LINK;m_cRichEdit.SendMessage(EM_SETCHARFORMAT,SCF_SELECTION, (LPARAM)&cf2);支持链接的点击响应m_cRichEdit.SetEventMask(ENM_LINK);响应链接的点击EN_LINKBEGIN_MESSAGE_MAP(CMyRichEdit, CRichEditCtrl)ON_NOTIFY_REFLECT(EN_LINK, OnURL)END_MESSAGE_MAP()......void CMyRichEdit::OnURLClick(NMHDR *pNmhdr, LRESULT *pResult){TCHAR LinkChar[512];ENLINK *pLink = (ENLINK *)pNmhdr;if (pLink->msg == WM_LBUTTONUP){SetSel(penLink->chrg); //这是链接的文字范围long Res = GetSelT ext((char *)LinkChar); //这是链接文字…}}自动识别链接UINT nMask = SendDlgItemMessage(IDC_RICHEDIT_MESSAGE,EM_GETEVENTMASK, 0, 0);SendDlgItemMessage(IDC_RICHEDIT_MESSAGE,EM_SETEVENTMASK, 0, nMask | NM_LINK);SendDlgItemMessage(IDC_RICHEDIT_MESSAGE,EM_AUTOURLDETECT, TRUE, 0);BOOL OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult){NMHDR* pNmHdr = (NMHDR *)lParam;if(pNmHdr->idFrom == IDC_RICHEDIT_MESSAGE && pNmHdr->code == EN_LINK){ENLINK *pLink = (ENLINK *)lParam;if (pLink->msg == WM_LBUTTONDOWN){SendDlgItemMessage(IDC_RICHEDIT_MESSAGE,EM_EXSETSEL, 0, (LPARAM)&(pLink->chrg));ShellExecute(GetSafeHwnd(), "open", m_wndREMessage.GetSelText(), 0, 0, SW_SHOWNORMAL);}}return CDialog::OnNotify(wParam, lParam, pResult);}2.在RichEdit中插入位图参考如下文章:自定义在RichEdit中插入对象的图标3.在RichEdit显示GIF动画常用的是通过QQ的imageole.dll(也有用Gif89.dll的)在richedit控件中插入动态GIF(Native C++版)4.IRichEditOleCallback的使用5.类似MSN信息发送框的制作(上)内容包含:实现右键菜单,图片插入,读取/写入RTF格式字符串6.自定义RichEdit控件内容包含:鼠标右键消息,消息映射,字体变换转载】MFC中的CEdit与CRichEdit使用技巧2008-03-14 15:41VC中在对话框上使用Rich Edit控件前一定要用AfxInitRichEdit()初始化RichEdit环境.--------------------------------------------------------------------------------1.设置edit只读属性方法一:m_edit1.SetReadOnly(TRUE);方法二:::SendMessage(m_edit1.m_hWnd, EM_SETREADONLY, TRUE, 0);--------------------------------------------------------------------------------2.判断edit中光标状态并得到选中内容(richedit同样适用)int nStart, nEnd;CString strTemp;m_edit1.GetSel(nStart, nEnd);if(nStart == nEnd){strTemp.Format(_T("光标在%d"), nStart);AfxMessageBox(strTemp);}else{//得到edit选中的内容m_edit1.GetWindowText(strTemp);strTemp = strTemp.Mid(nStart) - strTemp.Mid(nEnd);AfxMessageBox(strTemp);}注:GetSel后,如果nStart和nEnd,表明光标处于某个位置(直观来看就是光标在闪动);如果nStart和nEnd不相等,表明用户在edit中选中了一段内容。
VC编辑框实现自动换行在自动换行设置的时候,要在EDIT控件的属性中选中"multiline"的属性和Auto_HScroll、Vertical scroll。
经过多次测试,总结出VC编辑框(EDIT)的自动换行与自动滚屏的方法。
方法一:(当EDIT映射到一CString时)m_String = m_String + sNewString + "\r\n"//自动换行(其中m_String是EDIT筐所关联的CString对象)UpdateData(false);此法只能做到自动换行,不会自动滚屏到最后一行。
方法二:(当EDIT映射到一EDIT时)m_Edit.SetSel(-1, -1); //自动滚屏(其中m_Edit是EDIT筐所关联的EDIT控制对象)m_Edit.ReplaceSel(sNewString+"\r\n"); //自动换行此法可以做到自动换行,并自动滚屏到最后一行。
以上,m_String、m_Edit.分别为给编辑框添加的成员变量;sNewString 为要显示的字符串使用上面两种方法是要注意,他们只使用于静态的换行,如果要想实现动态换行,也就是说使用编辑框输入的时候,如果输入的字符串超过了编辑框的宽度,这时候就换行,则要使用第三种方法方法三:m_EventEdit是与编辑框关联的控件变量,m_EventString是与编辑框关联的字符串变量CRect EditRect(0,0,0,0),FontRect(0,0,0,0);int EditWidth=0;int FontWidth=0;m_EventEdit.GetRect(&EditRect);EditWidth=EditRect.Width();CClientDC dc(this);NONCLIENTMETRICS ncm;ncm.cbSize = sizeof(NONCLIENTMETRICS);SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(ncm), &ncm, 0);CFont font;font.CreateFontIndirect(&ncm.lfMessageFont);// 将字体选进DCCFont* pOldFont = dc.SelectObject(&font);// 计算文本大小UpdateData(TRUE);dc.DrawText(m_EventString, FontRect, DT_CALCRECT);// 回复旧字体-这是必须的dc.SelectObject(pOldFont);FontWidth=FontRect.Width();//如果字符串宽度大于编辑框宽度,则换行if(FontWidth>=EditWidth){m_EventString+="\r\n";// Add soft line-break breaks.m_EventEdit.FmtLines(TRUE);// Dump the text of the edit control.afxDump << m_EventString;// Remove soft line-break breaks.m_EventEdit.FmtLines(FALSE);}来自: /guxue365/blog/item。
vc中edit控件使用总结
edit控件通过类向导以生成两种类成员变量,一种是cstring类型,一种是cedit类型。
在程序中使用时如果只是简单的获取 edit控件内容,或设置简单的内容建议使用cstring类型成员变量。
示例:
CString m_strEdit;
//获得edit框内容
UpdateData(true);
此时m_strEdit就是edit框内容的字符串变量。
//要更新edit的话只要对m_strEdit进行赋值然后
UpdataData(false);//即可
如果是一些对edit框的复杂操作建议用cedit类型。
示例:
CEdit m_ctrlEdit;
//将光标移到开头
m_ctrlEdit.SetSel(0,0);
//将光标移到末尾
m_ctrlEdit.SetSel(-1);
//选中所有内容
m_ctrlEdit.SetSel(0,-1);
//写入值
m_ctrlEdit.ReplaceSel("替换内容");
//得到当前edit框中的所有字符数
int iStart,iCount;//iCount 为字符数
m_ctrlEdit.SetSel(0,-1);
m_ctrlEdit.GetSel(iStart,iCount);
还一种可以直接用控件的id值来进行操作
示例:
((CEdit*)GetDlgItem(IDC_EDIT)
他类似于上边的m_ctrlEdit
这样写的好处是可以在消息传递中使用,便于不同窗口间传递edit内容
例如:下面的消息响应函数中
SetEditContent(WPARAM wPARAM, LPARAM lPARAM)
IDC_EDIT可以通过wPARAM传递近来,而字符传内容可以直接通过lPARAM传递近来
CString Msg="要传递的消息";
::SendMessage(m_hParent,WM_SENDMSG_EDIT,(WPARAM) IDC_EDIT,
(LPARAM)(LPSTR)(LPCTSTR)Msg)
如:
((CEdit*)GetDlgItem(wPARAM))->SetSel(-1);
((CEdit*)GetDlgItem(wPARAM))->ReplaceSel((LPCSTR)lPARAM);
VC编辑框(EDIT)的自动换行与自动滚屏
经过多次测试,总结出VC编辑框(EDIT)的自动换行与自动滚屏的方法。
方法一:(当EDIT映射到一CString时)
m_String = m_String + sNewString + "\r\n" //自动换行
UpdateData(false);
此法只能做到自动换行,不会自动滚屏到最后一行。
方法二:(当EDIT映射到一EDIT时)
m_Edit.SetSel(-1, -1); //自动滚屏
m_Edit.ReplaceSel(sNewString+"\r\n"); //自动换行
UpdateData(true);
此法可以做到自动换行,并自动滚屏到最后一行。
以上,m_String、m_Edit.分别为给编辑框添加的成员变量;sNewString 为要显示的字符串注意二法中UpdataData参数的区别。
我发现修改编辑框的属性:Auto_HScroll等用处不大。