我们在信息输入的时候,可能有很大的信息量,而这些信息又不是必须的,这时我们就需要给信息输入人员一个选择的接口。例如一个人事部门的职工信息录入系统就有这样的问题,其中的姓名、性别、年龄、政治面目、职务、学历、部门和联系电话是必须输入的信息,而婚姻状况、毕业学校、籍贯和健康状况是可输可不输的信息且大多数情况下不需要录入,如何为信息录入人员提供一个方便的输入接口,下面我们就针对这个问题提供一个我认为比较好的方法。
第一步:在VC编程环境下建立一个基于对话框的工程,工程名为ExpandDlg,所有的选项都取默认值。
第二步:建立我们都对话框,其中必须要有这样两个控件,一个是PICTURE控件,一个为按钮,其ID值分别为IDC_DIVIDER和IDC_MORE。其它的控件可以任意布局,最终结果就是对话框被IDC_DIVIDER控件分成了两部分,其中下半部分可以根据你的爱好动态显示或不显示,对话框如下图:
第三步:生成按钮IDC_MORE的消息映射函数OnMore,在ExpandDlgDlg.h中定义两个函数如下:
public: void EnableVisibleChildren(); void ExpandDialog (int nResourceID, BOOL bExpand); |
第四步:在ExpandDlgDlg.cpp中定义函数的实现代码如下:
void CExpandDlgDlg::ExpandDialog (int nResourceID, BOOL bExpand) { // 对话框被nResourceID分成上下两部分,如果bExpand的值为TRUE // 对话框被完整显示,否则对话框显示上半部分。 static CRect rcLarge; static CRect rcSmall; CString sExpand; //开始时,对话框只显示上半部分 if (rcLarge.IsRectNull()) { CRect rcLandmark; CWnd* pWndLandmark = GetDlgItem (nResourceID); ASSERT(pWndLandmark); GetWindowRect (rcLarge); pWndLandmark->GetWindowRect (rcLandmark); rcSmall = rcLarge; rcSmall.bottom = rcLandmark.top; } if (bExpand) { //扩展对话框到最大尺寸 SetWindowPos(NULL, 0, 0, rcLarge.Width(), rcLarge.Height(), SWP_NOMOVE | SWP_NOZORDER); sExpand = "<< &Less"; EnableVisibleChildren(); } else { //只显示对话框的上半部分 SetWindowPos(NULL, 0, 0, rcSmall.Width(), rcSmall.Height(), SWP_NOMOVE | SWP_NOZORDER); sExpand = " &More >>"; EnableVisibleChildren(); } SetDlgItemText (IDC_MORE, sExpand); } void CExpandDlgDlg::EnableVisibleChildren() { //去掉没有显示的对话框的控件的功能和快捷键。 //得到第一个窗口 CWnd *pWndCtl = GetWindow (GW_CHILD); CRect rcTest; CRect rcControl; CRect rcShow; //得到对话框的完整矩形框 GetWindowRect(rcShow); while (pWndCtl != NULL) { //得到当前显示的对话框的矩形尺寸 pWndCtl->GetWindowRect (rcControl); if (rcTest.IntersectRect (rcShow, rcControl)) pWndCtl->EnableWindow(TRUE); else pWndCtl->EnableWindow(FALSE); //得到第二个矩形框 pWndCtl = pWndCtl->GetWindow (GW_HWNDNEXT); } } void CExpandDlgDlg::OnMore() { static BOOL bExpand = TRUE; ExpandDialog (IDC_DIVIDER, bExpand); bExpand = !bExpand; } |
按照上面的步骤生成我们的可执行文件后运行,点击对话框上的〔More〕我们可以发现对话框扩展,点击〔Less〕后,我们发现对话框收缩,希望可以给你带来方便。  
说明:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。
|