• MFC/QT 学习笔记(四)——MFC基于对话框学习控件(上)


    新建项目->MFC模板->MFC应用程序->应用程序类型:基于对话框->...OK

    解决方案资源管理器->资源文件->xxx.rc->进入:资源视图->Dialog->IDD_DEMO_DIALOG->打开工具箱(在侧面找)

     //0.准备

    删除默认控件:ctrl+Afn+delete

    修改名称 属性 属性 captain

    点击触发事件 属性 控件事件 BN_CLICKED ;右键 添加事件处理程序;双击进入编辑

    插入窗口 右键 添加类

    插入工具 右键 添加变量:控件/值 private

    //1.模态/非模态对话窗口 插入Dialog

    模态:只可对当前窗口操作

    非模态:可对所有窗口操作

    插入窗口 右键 添加类

    //文件名:CAboutDlg.h

    按钮1:模态对话框

    void CdemoDlg::OnBnClickedButton1()
    {
        // TODO: 在此添加控件通知处理程序代码
        //弹出模态对话框,阻塞功能
        CDlgExec dlg;
        dlg.DoModal();
    }

    按钮2:非模态对话框

    void CdemoDlg::OnBnClickedButton2()
    {
        // TODO: 在此添加控件通知处理程序代码
        //弹出非模态对话框,
        //CDlgShow dlg; 会一闪而过,写到 .h 做成员
        //dlg.Create(IDD_SHOW); 创建一次,多次会崩,写到初始化 OnInitDialog
        dlg.ShowWindow(SW_SHOWNORMAL);
    }

    //文件名:CdemoDlg.h

    //给全局
    private
    : CDlgShow dlg;

    //文件名:CdemoDlg.cpp

      //给初始化
      // TODO: 在此添加额外的初始化代码 dlg.Create(IDD_SHOW);

    //2.静态文本 StaticText

    添加变量 以STATIC结尾的ID是不可以添加变量的,需要修改变量,egIDC_TEXTIDC_PIC

    // CAboutDlg.cpp

    //在静态文本内添加 BITMAP(可能是我的bmp图片有问题,没显示成功)

    // TODO: 在此添加额外的初始化代码
        //设置静态控件风格为居中
        m_pic.ModifyStyle(0xf, SS_BITMAP | SS_CENTERIMAGE);
    
        //通过路径获取BITMAP句柄
    #define HBMP(filepath,width,height)(HBITMAP)LoadImage(AfxGetInstanceHandle(),filepath,IMAGE_BITMAP,width,height,LR_LOADFROMFILE|LR_CREATEDIBSECTION)
    
        //获取窗口大小
        CRect rect;
        m_pic.GetWindowRect(rect);
    
        //静态控件设置bitmap
        m_pic.SetBitmap(HBMP(TEXT("./1.bmp"), /*300,250*/rect.Width(), rect.Height()));

    //三个按钮的设置

    void Cdemo2Dlg::OnBnClickedButton1()
    {
        // TODO: 在此添加控件通知处理程序代码
        //让哈哈变成呵呵
        //设置文本内容
        m_text.SetWindowTextW(TEXT("呵呵"));
    }
    
    void Cdemo2Dlg::OnBnClickedButton2()
    {
        // TODO: 在此添加控件通知处理程序代码
        //获取内容
        CString str;
        m_text.GetWindowTextW(str);
        MessageBox(str);
    }
    
    void Cdemo2Dlg::OnBnClickedButton3()
    {
        // TODO: 在此添加控件通知处理程序代码
        //修改按钮上的内容
        m_btn.SetWindowTextW(TEXT("Cowry"));
        //获取内容
        CString str;
        m_btn.GetWindowTextW(str);
        MessageBox(str);
        //设置点击状态,点后灰掉
        m_btn.EnableWindow(FALSE);
    
    }

    //3.编辑框使用 EditControl

    属性:multLine 多行;Want return :true 可多行书写;Scroll 滚动条 纵横

    // CAboutDlg.cpp

        // TODO: 在此添加额外的初始化代码
        //设置第一个编辑框内有文本内容
        m_edit1.SetWindowTextW(TEXT("hello Cowry"));

    //四个按钮的设置

    void Cdemo3Dlg::OnBnClickedButton1()
    {
        // TODO: 在此添加控件通知处理程序代码
        //复制编辑框1的内容到编辑框2
        CString str;
        m_edit1.GetWindowTextW(str);
        m_edit2.SetWindowTextW(str);
    }
    
    void Cdemo3Dlg::OnBnClickedButton2()
    {
        // TODO: 在此添加控件通知处理程序代码
        
        //退出程序
        //exit(0);
    
        //推出当前对话框
        //CDialog::OnOK();
        CDialog::OnCancel();
    
    }void Cdemo3Dlg::OnBnClickedButton3()
    {
        // TODO: 在此添加控件通知处理程序代码
        //利用关联value方式设置和获取内容
        m_text = TEXT("hello");
        //将变量中的内容 同步到控件中
        UpdateData(FALSE);
    }
    
    void Cdemo3Dlg::OnBnClickedButton4()
    {
        // TODO: 在此添加控件通知处理程序代码
        //将控件中的内容 同步到变量中
        UpdateData(TRUE);
        MessageBox(m_text);
    }

    //属性 重写OnOK 注释掉里面代码;为了不输入return后直接退出;

    void Cdemo3Dlg::OnOK()
    {
        // TODO: 在此添加专用代码和/或调用基类
    
        //CDialogEx::OnOK();
    }

    //4.下拉框 ComboBox

    属性:加入数据data :aa;bb;cc;设置不默认排序 sort:false;设置不可编辑 type:下拉列表

    // CAboutDlg.cpp

    // TODO: 在此添加额外的初始化代码
    
        //下拉框添加
        m_cbx.AddString(TEXT("唐僧"));
        m_cbx.AddString(TEXT("孙悟空"));
        m_cbx.AddString(TEXT("猪八戒"));
        m_cbx.AddString(TEXT("沙僧"));
        //设置默认值
        m_cbx.SetCurSel(0);
        //插入
        m_cbx.InsertString(4, TEXT("白龙马"));
        //删除
        m_cbx.DeleteString(3);
        //获取1号索引内容
        //CString str;
        //m_cbx.GetLBText(1,str);
        //MessageBox(str);

    //下拉框改变值时,弹出Box

    void Cdemo4Dlg::OnCbnSelchangeCombo1()
    {
        // TODO: 在此添加控件通知处理程序代码
        //拿到索引位置
        int index=m_cbx.GetCurSel();
        CString str;
        m_cbx.GetLBText(index, str);
        MessageBox(str);
    
    }
  • 相关阅读:
    switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上?
    int和Integer有什么区别?
    访问修饰符public,private,protected,以及不写(默认)时的区别?
    Hashmap如何同步?
    Iterator和ListIterator的区别?
    Java的HashMap是如何工作的?
    MyBatis与Hibernate有哪些不同?
    Spring框架中有哪些不同类型的事件?
    Spring的自动装配?
    Spring如何处理线程并发问题?
  • 原文地址:https://www.cnblogs.com/CowryGao/p/12343876.html
Copyright © 2020-2023  润新知