下载本文示例代码
我们在信息输入的时候,可能有很大的信息量,而这些信息又不是必须的,这时我们就需要给信息输入人员一个选择的接口。例如一个人事部门的职工信息录入系统就有这样的问题,其中的姓名、性别、年龄、政治面目、职务、学历、部门和联系电话是必须输入的信息,而婚姻状况、毕业学校、籍贯和健康状况是可输可不输的信息且大多数情况下不需要录入,如何为信息录入人员提供一个方便的输入接口,下面我们就针对这个问题提供一个我认为比较好的方法。 第一步:在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);elsepWndCtl->EnableWindow(FALSE);//得到第二个矩形框pWndCtl = pWndCtl->GetWindow (GW_HWNDNEXT);}} void CExpandDlgDlg::OnMore() {static BOOL bExpand = TRUE;ExpandDialog (IDC_DIVIDER, bExpand);bExpand = !bExpand;} 按照上面的步骤生成我们的可执行文件后运行,点击对话框上的〔More〕我们可以发现对话框扩展,点击〔Less〕后,我们发现对话框收缩,希望可以给你带来方便。
我们在信息输入的时候,可能有很大的信息量,而这些信息又不是必须的,这时我们就需要给信息输入人员一个选择的接口。例如一个人事部门的职工信息录入系统就有这样的问题,其中的姓名、性别、年龄、政治面目、职务、学历、部门和联系电话是必须输入的信息,而婚姻状况、毕业学校、籍贯和健康状况是可输可不输的信息且大多数情况下不需要录入,如何为信息录入人员提供一个方便的输入接口,下面我们就针对这个问题提供一个我认为比较好的方法。 第一步:在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);elsepWndCtl->EnableWindow(FALSE);//得到第二个矩形框pWndCtl = pWndCtl->GetWindow (GW_HWNDNEXT);}} void CExpandDlgDlg::OnMore() {static BOOL bExpand = TRUE;ExpandDialog (IDC_DIVIDER, bExpand);bExpand = !bExpand;} 按照上面的步骤生成我们的可执行文件后运行,点击对话框上的〔More〕我们可以发现对话框扩展,点击〔Less〕后,我们发现对话框收缩,希望可以给你带来方便。
下载本文示例代码
VC 对话框的任意扩展VC 对话框的任意扩展VC 对话框的任意扩展VC 对话框的任意扩展VC 对话框的任意扩展VC 对话框的任意扩展VC 对话框的任意扩展VC 对话框的任意扩展VC 对话框的任意扩展VC 对话框的任意扩展VC 对话框的任意扩展VC 对话框的任意扩展VC 对话框的任意扩展VC 对话框的任意扩展VC 对话框的任意扩展