可伸缩对话框的实现方法.doc_第1页
可伸缩对话框的实现方法.doc_第2页
可伸缩对话框的实现方法.doc_第3页
可伸缩对话框的实现方法.doc_第4页
可伸缩对话框的实现方法.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

在Windows提供的“画图”程序中,点击颜色菜单下的“编辑颜色”菜单项,会出现如下图所示的对话框。这个对话框有点特别当您点击“规定自定义颜色”按钮时,它会自动伸长一截,如图所示:这个功能在我们自己编写的程序中,有时候也会用到的。比如说,我们经常通过对话框来查看/设定一些参数,但这些参数只有一部分是重要的或经常变化的,而另一部分则不那么重要或很少变化的。所以,通常情况下显示“简化版”的对话框用来设置最常用的参数,需要的时候再显示“完整版”的对话框用来设置全部的参数,是一个不错的选择。这样,可以在不损失对话框应有功能的前提下,使得程序界面更为干净整洁。同时,程序会显得更人性化、更智能,更体贴。 那么,如何来实现这种可伸缩的对话框呢?1 实现方法 当然,可能有多种方法来实现它。比如,两个对话框同时存在,但同时只显示一个的方法;比如,初始的对话框就是“简化版”的对话框,然后在需要显示“扩展元素”时,通过动态创建来添加控件的方法。显然,第一种方法会占用较多的资源,还需要解决数据的同步问题;第二种方法在编写代码时会比较繁琐和麻烦。 所以,大家通常采用“犹抱琵琶半遮面”的方法。即利用资源编辑器先将“完整版”的对话框做好,并把“简化版”的部分放在指定的区域(通常是左边或上边)。在需要显示“简化版”的时候,通过SetWindowPos函数来调整窗口(对话框是一种特殊的窗口)的大小,从而只显示指定的部分。2 简单实例 1)利用AppWizard建立一个名为Test的单文档工程,新建一个对话框,将OK、Cancel按钮移到左下方。插入一个新按钮(Caption:收缩,ID:IDC_BTN_DEMO),插入一个图像控件,将其拉成如下图所示的一条直线。在它的属性页中,将其ID改为:IDC_SEPARATOR,打开Style选项卡,选中Sunken,使其呈现为下凹状态。2)建立对话框对应的类CDlgShrink,并添加IDC_BTN_DEMO按钮的响应函数,代码如下:void CDlgShrink:OnBtnDemo() / TODO: Add your control notification handler code here CString str; /获得按钮文本 GetDlgItemText(IDC_BTN_DEMO,str); if(str=); else SetDlgItemText(IDC_BTN_DEMO,GetWindowRect(&rectSeparator); rectSmall.left=rectLarge.left; rectSmall.top=rectLarge.top; rectSmall.right=rectSeparator.right;/替换新值 rectSmall.bottom=rectLarge.bottom; if(str=GetWindowRect(&rectSeparator);rectTemp.right=rectSeparator.right;SetWindowPos(NULL,0,0,rectTemp.Width(),rectTemp.Height(), SWP_NOMOVE|SWP_NOZORDER);return TRUE; / return TRUE unless you set the focus to a control / EXCEPTION: OCX Property Pages should return FALSE 2)将对话框中“”。 重新编译后,第一次显示的对话框如下图所示,符合我们的预期。当我们点击“扩展”按钮时,尽管标题会在“扩展”和“GetWindowRect(&rectSeparator);rectSmall.left=rectLarge.left;rectSmall.top=rectLarge.top;rectSmall.right=rectSeparator.right;rectSmall.bottom=rectLarge.bottom;SetWindowPos(NULL,0,0,rectSmall.Width(),rectSmall.Height(), SWP_NOMOVE|SWP_NOZORDER);return TRUE; / return TRUE unless you set the focus to a control / EXCEPTION: OCX Property Pages should return FALSE3)改写OnBtnDemo函数中的代码:void CDlgShrink:OnBtnDemo()/ TODO: Add your control notification handler code hereCString str;/获得按钮文本GetDlgItemText(IDC_BTN_DEMO,str);if(str=);else SetDlgItemText(IDC_BTN_DEMO,收缩);if(str=收缩) /显示“简化版”对话框 SetWindowPos(NULL,0,0,rectSmall.Width(),rectSmall.Height(), SWP_NOMOVE|SWP_NOZORDER);else SetWindowPos(NULL

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论