这个是我周一在一家公司做的上机题中的一道,当场没做出来。我当时只跟考官说了设计思路,是带回来查了几本资料书之后才完成的。因为有半个学期没用VC开发了……,最近一直都在实践ASP.NET相关的……

建立一个基于对话框的项目,在项目中实现点击“选项一”时切换到上面效果的子对话框(嵌入在主对话框内部的),即滑动滑块时右边编辑框中的数字随之改变 (0至100)。点击“选项二”时切换到另一内嵌的子对话框,效果是当选择某一单选项时,上面的编辑框中显示对应的选项(A或B或C)。

这里要用到四种控件:Tab、Slider、Edit Box、Radio Button。设计过程如下:

1.新建一个MFC AppWizard(exe)工程, 取名为DLG, 选择Dialog based, 然后点Finish(我用的是英文版VC6.0)。

2.删除对话框上默认添加的三个控件。添加Tab Control控件,选定控件,右键点击“Property”在“More
Styles”里勾上Bottom,右键点“ClassWizard”,为其添加CTabCtrl型变量, 变量名为m_tab。

3.在对话框的初始化函数OnInitDialog里面添加如下代码:

   
m_tab.InsertItem(0,"选项一");  //添加“选项一”选项卡

   
m_tab.InsertItem(1,"选项二");  //添加“选项二”选项卡

   
m_tab.InsertItem(2,"选项..."); //添加“选项...”选项卡

4.在对话框资源里面添加三个对话框资源(我使用的是默认的ID),右键点击“Property”设置“style”为Child(三个对话框都这样设置),
“Border”为None。再分别双击这三个对话框,为其添加对应的基于CDialog类的子类:CDLG1,CDLG2,CDLG3。

5.在CDLGDlg类中添加三个成员变量m_dlg1, m_dlg2, m_dlg3, 分别是三个子对话框的实例。代码如下:

CDLG3 m_dlg3;
    
CDLG2 m_dlg2;
    
CDLG1 m_dlg1;

6.在对话框的初始化函数OnInitDialog里面添加如下代码 :

//关联对话框,并且将IDD_DLG_DIALOG控件设为父窗口 IDD_DLG_DIALOG为主对话框的ID
   
m_dlg1.Create(IDD_DIALOG1,GetDlgItem(IDD_DLG_DIALOG));
   
m_dlg2.Create(IDD_DIALOG2,GetDlgItem(IDD_DLG_DIALOG));
   
m_dlg3.Create(IDD_DIALOG3,GetDlgItem(IDD_DLG_DIALOG));

//获得IIDD_DLG_DIALOG客户区大小
    CRect
rs;
    m_tab.GetClientRect(&rs);

//调整子对话框在父窗口中的位置 视子窗口的大小来设置移动的像素
   
rs.top+=30; 
   
rs.bottom-=60; 
   
rs.left+=30; 
   
rs.right-=32;

//设置子对话框尺寸并移动到指定位置
   
m_dlg1.MoveWindow(&rs);
   
m_dlg2.MoveWindow(&rs);
   
m_dlg3.MoveWindow(&rs);

//分别设置隐藏和显示
   
m_dlg1.ShowWindow(true);
   
m_dlg2.ShowWindow(false);
   
m_dlg3.ShowWindow(false);

//设置默认的选项卡
    m_tab.SetCurSel(0);

7.添加Tab Control控件的TCN_SELCHANGE事件响应函数OnSelchangeTabtest(NMHDR*
pNMHDR, LRESULT* pResult) ,函数体代码如下:

int CurSel = m_tab.GetCurSel();
   
switch(CurSel)
   
{
   
case 0:
       
m_dlg1.ShowWindow(true);
       
m_dlg2.ShowWindow(false);
       
m_dlg3.ShowWindow(false);
       
break;
   
case 1:
       
m_dlg1.ShowWindow(false);
       
m_dlg2.ShowWindow(true);
       
m_dlg3.ShowWindow(false);
       
break;

case 2:
       
m_dlg1.ShowWindow(false);
       
m_dlg2.ShowWindow(false);
       
m_dlg3.ShowWindow(true);
       
break;
   
default:;
   
}

8.在IDD_DIALOG1中添加一个Slider控件和一个Edit Box控件。

选中Slider控件,右键点“ClassWizard”,为其添加一个CSliderCrl型变量m_slid。

选中Edit Box控件,在ClassWizard里为其添加一个int型变量m_result,设置最大值为100最小值为0。

选中IDD_DIALOG1,在ClassWizard里为其添加ON_WM_HSCROLL事件响应函数void
CDLG1::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
,函数体代码如下:

int
nID=pScrollBar->GetDlgCtrlID();
     if(nID==IDC_SLIDER1)

{

m_result=m_slid.GetPos();

}

UpdateData(false);

CDialog::OnHScroll(nSBCode,
nPos, pScrollBar);

9.在对话框的初始化函数OnInitDialog里面添加如下代码 :

//滑动条设置
   
m_dlg1.m_slid.SetRange(0,100); 
   
m_dlg1.m_slid.SetPos(m_dlg1.m_result);
   
m_dlg1.m_slid.SetTicFreq(1);

10.选中Edit Box控件右键点“ClassWizard”,为其添加EN_CHANGE事件响应函数void
CDLG1::OnChangeEdit1() ,函数体代码如下:

UpdateData();
    
m_slid.SetPos(m_result);

至此,选项一的功能完成了。选项二的功能实现的方法和选项一是类似的,这里就不说明了。第10步中的事件响应函数实现的是当编辑框里输入0至100的数字时,滑动条滑到相应的位置(这个可能是题目中隐含要求的一个功能)。

11最重要的一点,别忘了把CDLG1.h,CDLG1.cpp,CDLG2.h,CDLG2.cpp,CDLG3.h,CDLG3.cpp添加入工程。

转载VC6.0 子窗口和父窗口的更多相关文章

  1. MFC子窗口和父窗口

    转载声明: 本文转载自:http://www.cnblogs.com/BeyondTechnology/archive/2011/03/25/1995934.html 感谢BeyondTechnolo ...

  2. 转-JS子窗口创建父窗口操作父窗口

    Javascript弹出子窗口  可以通过多种方式实现,下面介绍几种方法 (1) 通过window对象的open()方法,open()方法将会产生一个新的window窗口对象 其用法为: window ...

  3. frameset子窗口获取父窗口失败原因?

    报错信息: arrow.html:44 Uncaught SecurityError: Blocked a frame with origin "null" from access ...

  4. MFC子窗口和父窗口(SetParent,SetOwner)

    一.概念和区别 在windows系统中,每个窗口对象都对应有一个数据结构,形成一个list链表.系统的窗口管理器通过这个list来获取窗口信息和管理每个窗口.这个数据结构中有四个数据用来构建list, ...

  5. Qt 代码: 子窗口调用父窗口(其实就是用指针直接访问)

    之前的 Qt 编程大多只涉及简单的多窗口,并未染指窗口间的传值交互,想来还是“涉世未深”,对 Qt 的理解.应用还需殷勤努力. 这次的问题是这样的,我想要实现一个类似QQ.阿里旺旺的聊天客户端,在弹出 ...

  6. 项目总结03:window.open()方法用于子窗口数据回调至父窗口,即子窗口操作父窗口

    window.open()方法用于子窗口数据回调至父窗口,即子窗口操作父窗口 项目中经常遇到一个业务逻辑:在A窗口中打开B窗口,在B窗口中操作完以后关闭B窗口,同时自动刷新A窗口(或局部更新A窗口)( ...

  7. jeecg项目子窗口获得父窗口元素id

    jeecg项目子窗口获得父窗口元素id, var parentWin = frameElement.api.opener;alert($(parentWin.document).find(" ...

  8. 页面嵌套iframe后,点击里面的链接,然后父窗口跳转(子窗口控制父窗口的链接跳转)

    做app的时候遇到一个问题,一个页面,然后里面嵌套了一个另一个页面,想实现点击里面的链接,然后外面进行跳转,不然的话,里面的页面永远出不来, 后面想了个办法,app的页面都是打开打开,不关闭的,然后由 ...

  9. window.open子窗口获取父窗口的值

    //子窗口获取父窗口id的值 window.opener.document.getElementById("id").value; //子窗口调用父窗口的函数 window.ope ...

随机推荐

  1. 1、hadoop HA分布式集群搭建

    概述 hadoop2中NameNode可以有多个(目前只支持2个).每一个都有相同的职能.一个是active状态的,一个是standby状态的.当集群运行时,只有active状态的NameNode是正 ...

  2. 02 - Unit011:Spring AOP

    Spring AOP 面向切面(儿)编程(横切编程) Spring 核心功能之一 Spring 利用AspectJ 实现. 底层是利用 反射的动态代理机制实现的 其好处: 在不改变原有功能情况下, 为 ...

  3. Shell中单引号、双引号、反引号、反斜杠的区别

    1. 单引号 ( '' ) # grep Susan phonebook Susan Goldberg -- Susan Topple -- 如果我们想查找的是Susan Goldberg,不能直接使 ...

  4. Mysql 备份脚本和window下如何实现自动备份

    @echo offecho.echo      MySQL数据库备份 echo *****************************echo.echo 今天是 %date%echo 时间是 %t ...

  5. python打造文件包含漏洞检测工具

    0x00前言: 做Hack the box的题.感觉那个平台得开个VIp 不然得凉.一天只能重置一次...mmp 做的那题毒药是文件包含漏洞的题,涉及到了某个工具 看的不错就开发了一个. 0x01代码 ...

  6. VisualStudio2012轻松把JSON数据转换到POCO的代码(转)

    VisualStudio2012轻松把JSON数据转换到POCO的代码 在Visual Studio 2012中轻松把JSON数据转换到POCO的代码,首先你需要安装Web Essentials 20 ...

  7. FORALL用法小结

    本文主要翻译.整理了ORACLE官方文档上有关FORALL的部份内容,不妥之处,还希望多和大家交流. 在发送语句到SQL引擎前,FORALL语句告知PL/SQL 引擎批挷定输入集合.尽管FORALL语 ...

  8. IE浏览器中不支持cookie问题

    /** * Cookie plugin * * Copyright (c) 2006 Klaus Hartl (stilbuero.de) * Dual licensed under the MIT ...

  9. @@ERROR和@@ROWCOUNT的用法

    1.         @ERROR 当前一个语句遇到错误,则返回错误号,否则返回0.需要注意的是@ERROR在每一条语句执行后会被立刻重置,因此应该在要验证的语句执行后检查数值或者是将它保存到局部变量 ...

  10. hibernate查询出的实体,set值后,自动更新到数据库

    1.问题症状描述      最近在处理一个新需求问题,代码的大致逻辑是获取一个实体对象,调用该对象的set方法设置其中的某些字段,然后把修改后的实体作为参数供其他地方调用,根据返回值来决定是否更新这个 ...