创建控件容器

有时我们需要有一种容器,将一些控件如按钮编辑框等放在这个容器中,则只须移动这个容器,就容器内的控件就会跟着移动,当容器被隐藏时,容器内的控件也跟着隐藏.
 实现方法是由CDialog类派生出一个容器类,将控件放入其中,再将这个容器加入到窗口中.
 具体实现方法如下:
 首先新建一个workspace,再新建一个对话框资源,ID设置为IDD_DIALOG_PANEL,将其OK和Cancel按钮删掉,就得到一个空白的对话框,这就是一会儿要用到的容器,你可以根据需要在其中加入各种容器,记得将Style标签的Style设置为Child,Border设置为None.
 然后运行ClassWizard,会自动提示你新建一个对话框资源对应的类。不妨命名为Panel,继承自CDialog。
 在TestPanelDlg.h中加入:
 CDialog* m_pPanel;
 CRect m_rectPanel;
 m_rectPanel主要是用于确定m_Panel的位置。
 在TestPanle.cpp中加入:
 #include "Panel.h"
 在你想创建容器的地方加入如下代码:
 CRect rectMainToLefttop; //主窗口相对于屏幕左上角的位置
 GetWindowRect(&rectMainToLefttop);

 int nCaption = ::GetSystemMetrics(SM_CYCAPTION); //标题栏的高度
 int nXEdge = ::GetSystemMetrics(SM_CXEDGE); //横向边距
 int nYEdge = ::GetSystemMetrics(SM_CYEDGE); //纵向边距
 
 CRect rectPanelToLefttop; //容器相对于屏幕左上角的位置
 GetDlgItem(IDC_STATIC_POSITION )->GetWindowRect(&rectPanelToLefttop);

 //计算主窗口有效区域(你从资源编辑器中看到的蓝色虚线框)相对于屏幕左上角的位置
 rectMainToLefttop.top=rectMainToLefttop.top+nCaption+nYEdge;
 rectMainToLefttop.left=rectMainToLefttop.left+2*nXEdge;
 
 //计算容器相对于主窗口有效区域左上角的位置
 m_rectPanel.top=rectPanelToLefttop.top-rectMainToLefttop.top;
 m_rectPanel.left=rectPanelToLefttop.left-rectMainToLefttop.left;
 m_rectPanel.bottom=rectPanelToLefttop.bottom-rectMainToLefttop.top;
 m_rectPanel.right=rectPanelToLefttop.right-rectMainToLefttop.left; 

 //动态创建容器及其内容,并将其显示在指定位置
 m_pPanel = new Panel;
 m_pPanel->Create(IDD_DIALOG_PANEL, this);
 m_pPanel->ShowWindow(SW_SHOW);
 m_pPanel->MoveWindow(m_rectPanel);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值