我们在开发VC程序的时候经常会遇到在一个类A的对象AObject的getUserNameFromDlg方法中访问一个特定对话框上的某一文本框的数值.
通常情况我们可能会如下声明该方法
public CString getUserNameFromDlg(CMyDlg* mMydlg)
{
mMydlg->GetDlgItem(IDC_USERNAME);
........
}
然后我们在CMyDlg的对象myDlg的onClickButton()中如下调用前面的方法
AObject.getUserNameFromDlg(this);
上面的开发思路如果只针对一个对话框而言是没有问题的,但是如果我们想在n个对话框类中(注意这里是对话框类而不是对象)使用getUserNameFromDlg方法,我们是否需要定义n个getUserNameFromDlg方法而这些方法的唯一区别就是参数是N种不一样的对话框类?
答案显然是否定的,因为那样做过于复杂,我们可以采取获取对话框句饼的方式来很好的解决这个问题.
刚才的getUserNameFromDlg可以如下声明
public CString getUserNameFromDlg(HWND dlg)
{
CWnd* pCWndNULL;
pCWnd=CWnd::FromHandle(dlgDemo);
CEdit* medit=(CEdit*)pCWnd->GetDlgItem(IDC_EDIT1);
CString abc="";
medit->GetWindowText(abc);
return abc;
}
而我们在dlg的按纽处理程序里可以这样的简单调用
CCommonUtil cUtil;
cUtil.getUserNameFromDlg(this->m_hWnd);
如此以来我们就可以避免了第一种方法的烦琐.
对话框之间的信息传递是程序业务流程流转的基础,我们应该重点关注其应用,并做熟练使用.