鱼C论坛

 找回密码
 立即注册
查看: 2701|回复: 4

MFC对话框求助

[复制链接]
发表于 2012-3-25 21:10:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我记得在孙鑫老师的课上有一个例子是关于创建收缩和扩展功能的对话框,但是现在想建一个对话框,一开始的显示状态是收缩状态,之后点击才是扩展状态,不知道如何解决,实在构造对话框时就隐藏一部分对话框还是怎样呢?又是怎么实现呢?请高手指点,谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-3-25 22:42:02 | 显示全部楼层
本帖最后由 再累也要_守住饭 于 2012-3-25 22:48 编辑


bool bExpend;
void CTestDlg::OnBtnExtend()
{
        bExpend = !bExpend;
        CRect rect;                        
        GetWindowRect(rect);  // 获得窗口大小
        
        if (bExpend)
        {
                rect.SetRect(rect.left, rect.top, rect.right + 100, rect.bottom);
                SetDlgItemText(IDC_BTN_EXTEND, _T("<<"));
        }
        else
        {
                rect.SetRect(rect.left, rect.top, rect.right - 100, rect.bottom);
                SetDlgItemText(IDC_BTN_EXTEND, _T(">>"));
        }
        
        // 设置窗口大小
        MoveWindow(rect);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-3-26 10:45:21 | 显示全部楼层

你好!先谢谢你的回答。但是好像你做得也只是课堂上的那个先为扩展状态的窗口,而我说的是窗口一建立就是在收缩状态。我想是不是应该添加一个WM_INITDIAGLOG消息,在显示前就改变窗口大小呢?以下是我编写的代码,还请指教:
BOOL CTestDlg::OnInitDialog()
{
        CDialog::OnInitDialog();
       
        // TODO: Add extra initialization here
        if (m_Isfirst==true)           //m_Isfirst是个BOOL型,是CTestDlg的私有成员变量
        {
        static CRect xlarge;
        static CRect xsmall;
        if (xlarge.IsRectNull())
        {
                CRect separator;
                GetWindowRect(&xlarge);
                GetDlgItem(IDC_SEPARATOR)->GetWindowRect(&separator);

                xsmall.left=xlarge.left;
                xsmall.top=xlarge.top;
                xsmall.bottom=xlarge.bottom;
                xsmall.right=separator.right;
        }
        SetWindowPos(NULL,0,0,xsmall.Width(),xsmall.Height(),SWP_NOMOVE|SWP_NOZORDER);
        }
        else
        {m_Isfirst=false;}

        return TRUE;  // return TRUE unless you set the focus to a control
                      // EXCEPTION: OCX Property Pages should return FALSE
}

按钮的响应函数(收缩和扩展功能)在这就省略不写了,和课堂上的一样的;
但是结果是无论怎么点击,窗口始终是收缩状态,不知为什么??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-3-26 22:53:56 | 显示全部楼层
漂洋~过海 发表于 2012-3-26 10:45
你好!先谢谢你的回答。但是好像你做得也只是课堂上的那个先为扩展状态的窗口,而我说的是窗口一建立就是 ...

其实原理都是一样的,只要你知道如何扩展收缩窗口在初始化的时候直接修改就行了, 不知道是不是你相的那样的,QQ316722233
BOOL CTestExpandDlg::OnInitDialog()
{
      . . . . .
        CRect rect;                        
        GetWindowRect(rect);  // 获得窗口大小
        rect.SetRect(rect.left, rect.top, rect.right - 100, rect.bottom);
        MoveWindow(rect);

        return TRUE;  
}


bool bExpend;
void CTestExpandDlg::OnBtnExpend()
{
  bExpend = !bExpend;
        CRect rect;                        
        GetWindowRect(rect);  // 获得窗口大小
        
        if (bExpend)
        {
                rect.SetRect(rect.left, rect.top, rect.right + 100, rect.bottom);
                SetDlgItemText(IDC_BTN_EXPEND, _T("<<"));
        }
        else
        {
                rect.SetRect(rect.left, rect.top, rect.right - 100, rect.bottom);
                SetDlgItemText(IDC_BTN_EXPEND, _T(">>"));
        }
        
        // 设置窗口大小
        MoveWindow(rect);

}

TestExpand.rar

3.66 KB, 下载次数: 3

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-3-29 22:00:46 | 显示全部楼层
再累也要_守住饭 发表于 2012-3-26 22:53
其实原理都是一样的,只要你知道如何扩展收缩窗口在初始化的时候直接修改就行了, 不知道是不是你相的那样 ...

十分感谢 ,就是这样的,:handshake
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-18 13:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表