Edit Control 和Edit Box区别?为什么我的VS2010里面没有Edit Box 添加一个Dialog,编辑框不能添加变量?

Edit Control 和Edit Box区别?为什么我的VS2010里面没有Edit Box 添加一个Dialog,编辑框不能添加变量?,第1张

MFC edit control 用法(总结)
MFC里面的EDIT Control控件的用法是怎么样的,1怎么样才能赋值给EDIT Control控件并在EDIT Control控件显示出来;2怎么取得EDIT Control控件的值并传递给一个变量?希望各位大侠帮帮忙!//获得EDITCEdit pBoxOne;pBoxOne = (CEdit) GetDlgItem(IDC_EDIT1);//付值pBoxOne->SetWindowText( _T"FOO" );//取值CString str;pBoxOne->GetWindowText(str);GetDlgItem(IDC_EDIT1)->SetWindowText( _T"FOO" );也可以//取值CString str;GetDlgItem(IDC_EDIT1)->GetWindowText(str);
EditControl是在MFC对话框中最频繁的使用的控件之一
VC++2005提供EditControl的属性和控件事件 *** 作简单方便
1只允许输入数字如果设置EditControl中只能输入数字,在VC60中需要编写一个派生类来达到目的,而在VC++2005下只需要在属性对话框中将Number的属性值设
为True就可以了
2获取EditControl的内容两种方法第一种,利用MFC应用程序向导生成一个基于对话框的应用程序,从资源视图中选择该Dialog窗体,利用右侧的工具箱,向Dialog内添加一个
EditControl项,声明控件变量的类别为Value,变量类型为CString,变量名为m_sEdit_Content
CString m_sEdit_Content;CString s;UpdateData(true);s=m_sEdit_ContentGetString();MessageBox(s,_T("获取编辑框的内容"),MB_OK);sReleaseBuffer();
这样就取得了编辑框的内容
UpdateData(true);这句代码很重要,它的作用是将输入的数据装入EditControl对应的变量m_sEdit_Content中由于MFC应用程序向导默认是使用Unicode库,所以MessageBox中的字符串需要用_T(),否则会出现const char[]转换LPCTSTR错误,如果不使用
Unicode库就不需要_T()
第二种方法声明控件变量的类别为Control,变量类型为CEdit,变量名为m_Edit_Content代码如下(Unicode)CString s;sGetBufferSetLength(1024);m_Edit_ContentGetWindowTextW(sGetBuffer(),sGetLength());MessageBox(s,_T("获取文本框的内容"),MB_OK);sReleaseBuffer();
如果不是Unicode下获取编辑框内容的函数就是GetWindowTextA
3将EditControl中的内容转化为整数
在限制编辑框只能数字之后,要将字符串转化为整数声明控件变量的类别为Value,变量类型为CString,变量名为m_sEdit_ContentCString s;UpdateData(true);s=m_sEdit_ContentGetString();int n=_tstoi(s);sReleaseBuffer();n就是所需要的整数在VC2005下字符串转换成整数需要_tstoi这个函数
4限制编辑框的输入长度声明控件变量的类别为Control,变量类型为CEdit,变量名为m_Edit_Content在对话框初始化的地方写m_Edit_ContentSetLimitText(1);编辑框就只能输入一个字符了
最后:要说的是GetDlgItemText不要轻易用……知道就行,如果真用,你可以试试……
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);//两个字符
说明:
如果出现光标设置失效的情况,可能是由于以下情况:因为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_WndEDIT4SetPasswordChar('');
3。CEDIT没有AppendText功能怎么办?
int nLength = m_WndEDIT4SendMessage(WM_GETTEXTLENGTH);
m_WndEDIT4SetSel(nLength, nLength);
m_WndEDIT4ReplaceSel( " 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;
lflfCharSet = DEFAULT_CHARSET; // Initialize the LOGFONT structure
strcpy(lflfFaceName,"");
CClientDC dc (this);
// Enumerate the font families
::EnumFontFamilie((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_ctlFontListAddString(lpelf ->elfLogFontlfFaceName);
// Return 1 to continue font enumeration
return 1;
}
本文来自CSDN博客,转载请标明出处:>首先右击控件,添加变量
public:
short m_updateInterval;
类别为value
然后选到PropPage中的DoDataExchange函数。
改变函数内容为:
DDP_Text(pDX, IDC_EDIT_INTERVAL, m_updateInterval,_T("Interval"));
DDX_Text(pDX, IDC_EDIT_INTERVAL, m_updateInterval);
DDP_PostProcessing(pDX);
注意每一行的顺序!
第一行是DDP,第二行是DDX,第三行是POST。顺序不能颠倒!(自动生成的代码顺序不对且不全)
这样就完成了控件关联外部属性。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13406094.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-30
下一篇 2023-07-30

发表评论

登录后才能评论

评论列表(0条)

保存