zoukankan      html  css  js  c++  java
  • 转载VC6.0 子窗口和父窗口

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

       

    转载VC6.0 <wbr>子窗口和父窗口

     

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

     

    转载VC6.0 <wbr>子窗口和父窗口

     

        这里要用到四种控件: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里面添加如下代码:


    转载VC6.0 <wbr>子窗口和父窗口    m_tab.InsertItem(0,"选项一");  //添加“选项一”选项卡
    转载VC6.0 <wbr>子窗口和父窗口    m_tab.InsertItem(1,"选项");  //添加“选项二”选项卡
    转载VC6.0 <wbr>子窗口和父窗口    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添加入工程。

  • 相关阅读:
    NACBD
    周总结7
    周总结6
    团队题目——TD课程通
    移动端疫情展示
    周总结5
    每周总结4
    每周总结3
    每周总结2
    求最大子数组
  • 原文地址:https://www.cnblogs.com/zhaoxinshanwei/p/3850739.html
Copyright © 2011-2022 走看看