分享

vc中更改对话框大小

 浮 生 2008-12-10
vc中更改对话框大小
moshi 发表于 2006-9-15 17:16:46

vc编程接触很久,但更改对话框大小最近才有点眉目.以前编的MFC程序,窗口大小都是固定的,很死板.前段时间编一个模拟定时器,尝试了更改对话框大小,也不是很难.只要掌握了窍门,对话框大小随你改变.

最近又因为项目的问题,要改变对话框大小.遇到了一个问题就是一个属性框CPropertySheet,里面又有自己从CPropertyPage派生的类.类里又调用了别人写的基于对话框的对象.所以就出现了嵌套改变对话框的问题.还好通过网上找资料,已经解决.

首先要使对话框可以更改大小,要改对话框的属性.在对话框资源上右键-->properties->style 属性页里的border选为resizing.这时当对话框运行时,把鼠标放在边缘上就会出现调节大小的鼠标样式.这时当拉伸对话框时,大小就会变.因为没有写相应的处理函数.若对话框里有控件,控件并不会随对话框大小的改变而做相应的调整.

当对话框变为可调时,每当对话框大小改变时,都会触发OnSIze函数,如果没有这个函数,可以通过Winzard添加wm_size事件即可.如果要更改对话框变化时控件的位置,就要在OnSize函数里做相应的处理.可以通过GetClientRect获得当前对话框的客户区大小.最左上方是(0,0)点.如果要更改某个控件的大小,如果控件有相应的Control对象,直接调用Control对象的MoveWindwo函数即可,参数就是你想让控件去的位置.如果没有控件Control对象可以通过GetDlgItem(id),获得控件句柄,然后调用MoveWindow函数.比较麻烦的是计算相应的位置.

有时后对话框上有自己定义的一些从CWnd派生来的对象,这时首先要写这个对象的OnSize函数.当调用这个对象MoveWindow方法就会触发定义好的OnSize函数.

举一个CPopertySheet的例子

几个对象
 CPropertySheet m_sheet;

 CLogPropertyPage m_LogSystem;  //System Log;
 
 CLogPropertyPage m_LogClientOne; // Log about ClientOne;
 
 CLogPropertyPage m_LogClientTwo; //Log about ClientTwo;

 CLogPropertyPage m_LogTimer;//Log about timer ;


m_sheet.AddPage(&m_LogSystem);
 m_sheet.AddPage(&m_LogTimer);
 m_sheet.AddPage(&m_LogClientOne);
 m_sheet.AddPage(&m_LogClientTwo); 
 m_sheet.Create(this, WS_CHILD | WS_VISIBLE, WS_EX_CONTROLPARENT);

 RECT rect;
 this->GetWindowRect(&rect);
 int width =rect.right-rect.left;
 int height = rect.bottom - rect.top;
 m_sheet.MoveWindow(0,125,width,height);

OnSize函数里

m_sheet.MoveWindow( margin,ctrlheight+margin*2,  rt.Width()-margin*2,   rt.Height()-ctrlheight-margin*2  );
   CTabCtrl*   ptab   =m_sheet.GetTabControl();   
   ptab->MoveWindow( 0,0, rt.Width()-margin*2, rt.Height()-ctrlheight-margin*2);   
      第二句话就会调用m_LogSystem的OnSize函数.

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多