|
MFC中编辑控件的初始化或者文本内容的获取一般都是通过 CWnd 的成员函数来完成,比如 GetWindowText,SetWindowText,GetDlgItemText,SetDlgItemText等。比较简单的方法是把控件与对话框的成员变量进行关联。其他的方法就是利用SDK编程 SendMessage 函数发送消息 WM_GETTEXT,WM_SETTEXT来进行的。
一、利用Cwnd成员函数GetWindowText和SetWindowText
" int GetWindowText( LPTSTR lpszStringBuf,int nMaxCount) const;
void GetWindowText( CString& rString ) const;
void SetWindowText( LPCTSTR lpszString ); |
GetWindowText有两个版本,一个是两个参数另外一个是一个参数。
第一个版本第一个参数时LPTSTR指针,第二个是字符串长度。
第二个版本中参数为CString。
SetWindowText只有一个参数,形参虽然是LPCTSTR但是貌似实参既可以是LPCTSTR或者是CString。
MSDN是这样说的:Points to a CString object or null-terminated string to be used as the new title or control text.
" wchar_t w_txt[32];
Cstring cstr_txt;
GetDlgItem(IDC_EDIT1)->GetWindowText(w_txt,32);
GetDlgItem(IDC_EDIT1)->GetWindowText(cstr_txt);
GetDlgItem(IDC_EDIT1)->SetWindowText(cstr_txt);
GetDlgItem(IDC_EDIT1)->SetWindowText(w_txt); |
二、利用CWnd成员函数GetDlgItemText和SetDlgItemText
GetDlgItemText也有两个版本,他们用法基本和GetWindowText、SetWindowText差不多。
" int GetDlgItemText( int nID,LPTSTR lpStr,int nMaxCount ) const;
int GetDlgItemText( int nID,CString& rString ) const;
void SetDlgItemText(int nID, LPCTSTR lpszString ); |
三、利用CWnd成员函数SetDlgItemInt
void SetDlgItemInt( int nID, UINT nValue,BOOL bSigned = TRUE );
nID为控件ID标识
nValue为整型值
bSigned用于指明整型值是有符号还是没有符号,TRUE(默认值)标识nValue有符号,FALSE表示没有符号。
" UINT GetDlgItemInt( int nID, BOOL* lpTrans = NULL, BOOL bSigned = TRUE ) const; |
返回值为nID控件的整型值
nID为控件ID标识
lpTrans 用户监测错误
bSigned 指明是否带符号
四、控件与成员变量相关联
将编辑控件与对话框类的成员变量相关联,然后通过这些成员变量来检索和设宜编辑框的文本,这是最简单的访问控件的方式。
这个一般通过类向导来完成,也可以手工添加代码。
1)在对话框的头文件中增加成员变量,类型可以是int、double、float、CString等
2)在对话框构造函数中对成员变量进行初始化。
3)在 DoDataExchange 函数中实现对话框控件与类成员变量进行关联。DDX关联控件ID与成员变量,DDV可以设置变量接受的范围。
" void CPenWidthsDlg:oDataExchange(CDataExchange* pDX)
{
CDialog:oDataExchange(pDX);
DDX_Text(pDX, IDC_THIN_PEN_WIDTH, m_nThinWidth);// m_nThinWidth 为 int 变量
DDV_MinMaxInt(pDX, m_nThinWidth, 1, 20);
DDX_Text(pDX, IDC_THICK_PEN_WIDTH, m_nThickWidth);
DDV_MinMaxInt(pDX, m_nThickWidth, 1, 20);
} |
提示:
MFC提供了多种以DDX_为前级的函数,这些函数分别用于不同控件的数据交换。
DDX——Dialog Data Exchange ,对话框数据交换;
DDV——Dialog Data Validation ,对话框数据校验。
4)DoDataExchange是通过调用UpdateData来执行的。通过调用后者来初始化对话框控件或从对话框获取数据. 也就是说,为了让数据交换生效,就必须去调用DoDataExchange 函数. 但程序代码不是直接调用这
个函数,而是需要去调用UpdateData 这个函数。
" BOOL UpdateData(BOOL bSaveAndValidate = TRUE ); |
参数bSaveAndValidate为TRUE是获取对话控制值,为FALSE用变量值初始化对话框。
|
|