科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件VC++对话框的任意扩展

VC++对话框的任意扩展

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

我们在信息输入的时候,可能有很大的信息量,而这些信息又不是必须的,这时我们就需要给信息输入人员一个选择的接口

作者:bull77 来源:yesky 2007年11月16日

关键字: VC++ 对话框 扩展

  • 评论
  • 分享微博
  • 分享邮件
我们在信息输入的时候,可能有很大的信息量,而这些信息又不是必须的,这时我们就需要给信息输入人员一个选择的接口。例如一个人事部门的职工信息录入系统就有这样的问题,其中的姓名、性别、年龄、政治面目、职务、学历、部门和联系电话是必须输入的信息,而婚姻状况、毕业学校、籍贯和健康状况是可输可不输的信息且大多数情况下不需要录入,如何为信息录入人员提供一个方便的输入接口,下面我们就针对这个问题提供一个我认为比较好的方法。

  第一步:在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〕后,我们发现对话框收缩,希望可以给你带来方便。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章