zoukankan      html  css  js  c++  java
  • 第8章 对话框(二)

    参考: https://blog.csdn.net/u014162133/article/details/46573873

    https://blog.csdn.net/u012377333/article/details/40791033 

    1、如何改变按纽的字体?在对话框的属性中改变字体的属性即可

    2、逃跑按纽的实现方法一:

      (1) 从CButton派生一个类,CWeixinBtn

      (2) 将IDC_EDIT1关联成员变量m_btn1,类型为CWeixinBtn,注意要包含头文件。

      (3) 在CWeixinBtn中加一个指针成员变量CWeixinBtn *pWeixinBtn,然后将其地址初始化。

      (4) 在新类中增加鼠标移动的消息处理。

    m_btn1.m_pbtn=&m_btn2;  
    m_btn2.m_pbtn=&m_btn1; 
    void CButtonDlg::OnMouseMove(UINT nFlags, CPoint point)   
    {      
        ShowWindow(SW_HIDE);  
        m_pbtn->ShowWindow(SW_SHOW);  
      
        CButton::OnMouseMove(nFlags, point);  
    }

    3、逃跑按纽的实现方法二:使用SetWindowPos

    void CDlgButton::OnMouseMove(UINT nFlags, CPoint point)   
    {      
        static CRect crectold,crectnew;  
      
        if(crectold.IsRectNull())  
        {  
            GetWindowRect(&crectold);  
      
            crectnew.left=crectold.left-100;  
            crectnew.top=crectold.top+100;  
            crectnew.right=crectold.right-100;  
            crectnew.bottom=crectold.bottom+100;  
      
        }  
        ScreenToClient(&crectold);  
        SetWindowPos(NULL,crectold.left,crectold.top+100,crectold.right,crectold.bottom+100,SWP_SHOWWINDOW|SWP_NOSIZE );  
        //ShowWindow(SW_SHOW);  
          
        /*CString cstring; 
        cstring.Format("x=%d",crectold.left); 
        MessageBox(cstring);*/  
      
              
          
        CButton::OnMouseMove(nFlags, point);  
    }

    只是初步测试,由于时间关系,自己改吧。 

    4、memset()的用法! memset(m_bLike,0,sizeof(m_bLike));将所指定长度设置为0

              ZeroMemory(m_bLike, sizeof(m_bLike));同上效果

    5、属性表单和向导的创建

      (1) 插入属性页资源。Insert->new Resource->Dialog。

      (2) 当选择Classwizard菜单时,系统提示是否为创建新的类,我们将其从CPropertyPage派生!这样可以为方便为其增加消息响应函数。

      (3) 插入新的从CPropertySheet派生的类,在类中增加3个CPropertyPage的实例。

      (4) 在view中增加菜单项,当点击时显示属性表单,出现中文乱码,修改CPropertyPage属性为中文,另外将其字体设为宋体。

      (5) 在CPropertyPage中设置SetWizardButtons可将其属性改为上一步、完成。

      (6) 为IDC_RADIO1关联成员变量,需要先设置Group属性才行。另外别忘记调用UpdateData()。

      (7) 为CPropertyPage增加虚函数,OnWizardNext,如果用户点击下一步时,不想让他进入下一步,则返回-1。

      (8) 将用户的选择输出到屏幕上,此时可以在View中增加几个成员变量,用来接收用户选择的数据。

    6、解决中文乱码的问题:先设置propertypage的字体为Chinese,然后修改字体为宋体或其他

    7、

    (1)新建一个MFC单文档模式

    (2)在资源那里添加

    创建三个属性页.

    (3)然后拉控件

    (4)为每个Proppage添加一个类

    (5) 查MSDN得知,要用CPropertySheet调用AddPage

    (6)在其构造函数中添加

    CPropSheet::CPropSheet(UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage)  
        :CPropertySheet(nIDCaption, pParentWnd, iSelectPage)  
    {  
        AddPage(&m_proc1);  
        AddPage(&m_proc2);  
        AddPage(&m_proc3);  
    }  
      
    CPropSheet::CPropSheet(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage)  
        :CPropertySheet(pszCaption, pParentWnd, iSelectPage)  
    {  
        AddPage(&m_proc1);  
        AddPage(&m_proc2);  
        AddPage(&m_proc3);  
    }

    (7) 菜单添加一个选项

    void CProccView::OnProc()   
    {
        //MessageBox("hello");  
      
        CPropSheet cpst("属性列表");  
        cpst.DoModal();  
    }

    这样就可以显示了

    To create a wizard-type dialog box, follow the same steps you would follow to create a standard property sheet, but call SetWizardMode before you call DoModal.
    void CProccView::OnProc()   
    {
        //MessageBox("hello");  
      
        CPropSheet cpst("属性列表");  
        cpst.SetWizardMode( );  
        cpst.DoModal();  
    }

    向导的按钮有问题,第一页是没有上一页的:

    属性页添加到属性表单,属性表单就是属性页的父窗体

    BOOL CProc1::OnSetActive()   
    {      
         ((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_NEXT);//CPropertySheet相当于CPropertyPage的父窗体  
      
        return CPropertyPage::OnSetActive();  
    }
    BOOL CProp3::OnSetActive()   
    {
        ((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_BACK|PSWIZB_FINISH);  
        return CPropertyPage::OnSetActive();  
    }

    第一个单选按钮在GROUP打钩,则后面(直到再次遇到一个GROUP打钩的)都为同一组:

    单选关联一个数值:

    为CListBoX赋值,WM_INITDILOG

    BOOL CProc1::OnInitDialog()   
    {  
        CPropertyPage::OnInitDialog();  
          
        // TODO: Add extra initialization here  
          
        CString cst1="北京";  
        CString cst2="上海";  
        CString cst3="天津";  
        CString cst4="南京";  
        CString cst5="广州";  
      
        ((CListBox*)GetDlgItem(IDC_LIST1))->AddString(cst1);  
        ((CListBox*)GetDlgItem(IDC_LIST1))->AddString(cst2);  
        ((CListBox*)GetDlgItem(IDC_LIST1))->AddString(cst3);  
        ((CListBox*)GetDlgItem(IDC_LIST1))->AddString(cst4);  
        ((CListBox*)GetDlgItem(IDC_LIST1))->AddString(cst5);  
      
        return TRUE;  // return TRUE unless you set the focus to a control  
                      // EXCEPTION: OCX Property Pages should return FALSE  
    }
    LRESULT CProc1::OnWizardNext()   
    {  
        // TODO: Add your specialized code here and/or call the base class  
          
        UpdateData();//参数默认为TRUE,取值的时候,参数为TRUE,要赋值的时候,参数为FALSE  
        if(m_zhiye==-1)  
        {  
            MessageBox("请选择你的职业");  
            return -1;  
        }  
      
        if(m_gongzuodidian=="")  
        {  
            MessageBox("请选择你的工作地点");  
            return -1;  
        }  
          
        return CPropertyPage::OnWizardNext();  
    }

    LRESULT CProc2::OnWizardNext()   
    {  
        UpdateData();  
        if(m_zuqiu||m_lanqiu||m_paiqiu||m_youyong)  
        {  
            return CPropertyPage::OnWizardNext();  
        }  
        else  
        {  
            MessageBox("请选择你的兴趣爱好");  
        }      
    }

    初始化CCombox

    BOOL CProp3::OnInitDialog()   
    {  
        CPropertyPage::OnInitDialog();  
          
        // TODO: Add extra initialization here  
          
        CString str1="1000元以下";  
        CString str2="1000-2000元";  
        CString str3="2000-3000元";  
        CString str4="3000-5000元";  
        CString str5="5000元以上";  
      
        ((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString(str1);  
        ((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString(str2);  
        ((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString(str3);  
        ((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString(str4);  
        ((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString(str5);  
      
      
        return TRUE;  // return TRUE unless you set the focus to a control  
                      // EXCEPTION: OCX Property Pages should return FALSE  
    }

    把SORT的勾去掉,使得它按照我们添加进去的顺序排序

    数值关联:

    VIEW中添加成员变量,用以接收数据

    private:  
        int zhiye;  
        CString gongzuodidian;  
        BOOL xingqu[4];  
        CString xinzishuiping;  
    };
    void CProccView::OnProc()   
    {
        //MessageBox("hello");  
      
        CPropSheet cpst("属性列表");  
        cpst.SetWizardMode( );  
        //cpst.DoModal();  
      
        if(ID_WIZFINISH==cpst.DoModal())  
        {  
            zhiye=cpst.m_proc1.m_zhiye;  
            gongzuodidian=cpst.m_proc1.m_gongzuodidian;  
      
            xingqu[0]=cpst.m_proc2.m_zuqiu;  
            xingqu[1]=cpst.m_proc2.m_lanqiu;  
            xingqu[2]=cpst.m_proc2.m_paiqiu;  
            xingqu[3]=cpst.m_proc2.m_youyong;  
      
            xinzishuiping=cpst.m_proc3.cstrxinshui;  
                 Invalidate();  
               }  
    }
    void CProccView::OnDraw(CDC* pDC)  
    {  
        CProccDoc* pDoc = GetDocument();  
        ASSERT_VALID(pDoc);  
        // TODO: add draw code for native data here  
      
        CFont cfont;  
        cfont.CreatePointFont(300,"宋体");  
        CFont *oldfont=pDC->SelectObject(&cfont);  
        TEXTMETRIC tm;  
        pDC->GetTextMetrics(&tm);  
        CString temp="你的职业是:";  
        if(zhiye==0)  
        {  
            temp+="程序员";  
        }  
        if(zhiye==1)  
        {  
            temp+="系统工程师";  
        }  
        if(zhiye==2)  
        {  
            temp+="项目经理";  
        }  
        pDC->TextOut(0,0,temp);  
      
      
        temp="你的工作地点是:";  
        temp+=gongzuodidian;  
        pDC->TextOut(0,tm.tmHeight,temp);  
      
        temp="你的兴趣爱好是:";  
        if(xingqu[0])  
        {  
            temp+="足球 ";  
        }  
        if(xingqu[1])  
        {  
            temp+="篮球 ";  
        }  
        if(xingqu[2])  
        {  
            temp+="排球 ";  
        }  
        if(xingqu[3])  
        {  
            temp+="游泳 ";  
        }  
        pDC->TextOut(0,tm.tmHeight*2,temp);  
      
        temp="你的薪资水平是";  
        temp+=xinzishuiping;  
        pDC->TextOut(0,tm.tmHeight*3,temp);  
      
        pDC->SelectObject(oldfont);  
    }

    自此,这个程序完成了

  • 相关阅读:
    扒几个 3D 模型备用
    向 3D 世界迈出一小步
    为什么说使用 Linux 系统学习 OpenGL 更方便
    Windows 下的 Linux环境
    windows git 的扩展用法——其他linux命令
    Linux 环境变量
    powershell(或者windows terminal)中使用git
    QT无边框窗体——拦截windows消息实现
    QT工具——开发技巧与其他工具
    QT工具——国际化工具
  • 原文地址:https://www.cnblogs.com/happykoukou/p/9213696.html
Copyright © 2011-2022 走看看