zoukankan      html  css  js  c++  java
  • MFC学习笔记1 基本控件的使用

    一。模态和非模态对话框

    1.右键资源视图的Dialog,选择插入Dialog,默认ID为IDD_DIALOG1

     2.在界面上右键创建类,将生成.h和.cpp从而进行管理。自定义的两个对话框类分别为CDlgExec和CDlgShow

     3.双击主窗口的button控件,或者在button控件的属性中选择BN_CLICKED事件,进入按钮点击事件的处理函数。

    4.在主窗口的cpp中添加CDlgExec.h和CDlgShow.h,并在相应的消息处理函数中写入代码。

    //模态对话框弹出
    void CMFCDialogDlg::OnBnClickedButton1()
    {
        // TODO: 在此添加控件通知处理程序代码
        //弹出模态对话框 阻塞
        CDlgExec dlg; //模态对话框自动阻塞
        dlg.DoModal();
    }
    1 //非模态对话框
    2 void CMFCDialogDlg::OnBnClickedButton2()
    3 {
    4     // TODO: 在此添加控件通知处理程序代码
    5     CDlgShow* dlg = new CDlgShow;  //非模态对话框在创建后自动释放,需要定义在堆区
    6     dlg->Create(IDD_SHOW);
    7     dlg->ShowWindow(SW_SHOWNORMAL);
    8 }

    5.点击按钮出现模态和非模态对话框

     

    二。Static Text控件

    1.拖入Static Text控件,可以修改其ID和默认显示文字

     

     2.对控件添加变量,可以对显示内容进行修改。变量类型为“控件”。变量名为m_text。(变量类型也可以为Value类型,但是在同步变量和控件内容时需要UpdateData)

     

    3.获取和设置Static_text控件的内容

    1 //获取控件内容
    2 void CMFCDialogDlg::OnBnClickedButton4() //按钮处理函数
    3 {
    4     // TODO: 在此添加控件通知处理程序代码
    5     CString str; //控件内容保存在str中
    6     m_text.GetWindowTextW(str);
    7     MessageBox(str);
    8 }
    1 //设置控件内容
    2 void CMFCDialogDlg::OnBnClickedButton3()
    3 {
    4     // TODO: 在此添加控件通知处理程序代码
    5     m_text.SetWindowTextW(TEXT("123456")); //修改控件内容
    6 }

    4.在Static Text中添加位图 bmp,在初始化函数BOOL CMFCDialogDlg::OnInitDialog()中添加代码

     1     //用static_Text显示图片
     2     //设置静态控件窗口风格为位图居中显示
     3     m_pic.ModifyStyle(0xf, SS_BITMAP | SS_CENTERIMAGE);
     4     //通过路径获取bitmap句柄
     5 #define HBMP(filepath,width,height) (HBITMAP)LoadImage(AfxGetInstanceHandle(),filepath,IMAGE_BITMAP,width,height,LR_LOADFROMFILE|LR_CREATEDIBSECTION)
     6     //宽高设置按照控件大小
     7     CRect rect;
     8     m_pic.GetWindowRect(rect);
     9 //静态控件设置bitmap
    10     m_pic.SetBitmap(HBMP(TEXT("./simisent.bmp"), rect.Width(), rect.Height()));

     三。Edit Control

    1。可以修改Edit Control的属性。

    Horizontal/Vertical Scroll=True修改设置滚动条

    Multiline=True可以设置多行

     2。为控件添加变量可以得到/改变控件内容。添加“值”类型变量,为CString类型,变量名为m_edit4, 第二个控件为m_edit5

     3.为了将第一个控件的内容复制到第二个控件,可以设置“复制”按钮的单击处理函数为

    1 void CMFCDialogDlg::OnBnClickedButton10()
    2 {
    3     // TODO: 在此添加控件通知处理程序代码
    4     //将控件同步到变量中
    5     UpdateData(TRUE); //将控件内容同步到变量(m_edit4)中
    6     m_edit5 = m_edit4; //复制变量内容
    7     UpdateData(FALSE); //将变量(m_edit5)内容同步到控件中
    8 }

     2.在使用CEdit控件时,可以设置编辑框自动显示最后一行。

    m_edit.LineScroll(m_edit.GetLineCount() - 1, 0);

    四。Combox

    1.可以设置Combox的属性,

    Data添加内容,用分号隔开。

    Sort=False,不按英文字母排序

    Type=下拉列表 ,不可修改控件内容

    2. 在OnInitDialog中初始化 Combox

            //添加选项
            m_cbx.AddString(TEXT("唐僧"));
            m_cbx.AddString(TEXT("孙悟空"));
            m_cbx.AddString(TEXT("猪八戒"));
            m_cbx.AddString(TEXT("沙僧"));
            
            //设置默认选项为索引0
            m_cbx.SetCurSel(0);
    
            //在索引2位置插入
            m_cbx.InsertString(2, TEXT("替换选项"));
    
            //删除索引2
            m_cbx.DeleteString(2);
    
            //获取1号索引的内容
            /*CString str;
            m_cbx.GetLBText(1, str);
            MessageBox(str);*/

     3.添加控件的CBN_SELCHANGE事件,在切换选项时可以触发处理函数

    五。List Control

    1.设置属性View=report,添加控件变量m_list,“控件”类型。

    2.添加表头,在OnInitDialog()中添加代码

    1         //列表控件使用
    2         CString str[] = {TEXT("姓名"),TEXT("性别"), TEXT("年龄")}; //表头的三个属性
    3         m_list.GetWindowRect(rect); //获取列表矩形大小
    4         for (int i = 1; i < 4; i++)
    5         { 
    6             //设置表头
    7             m_list.InsertColumn(i, str[i-1],LVCFMT_CENTER,rect.Width()/3);
    8         }

    3. 添加表格内容,在OnInitDialog()中添加代码

                     //设置正文
            //m_list.InsertItem(0, TEXT("张三")); //插入第0行,第一列
            //给Item插入其他列
        //m_list.SetItemText(0, 1, TEXT("男")); //插入第0行,第二列
    
            //10行3列
            for (int i = 0; i < 10; i++)
            {
                int j = 0;
                CString name;
                name.Format(TEXT("张三_%d"), i + 1);
                m_list.InsertItem(i,name);
    
                m_list.SetItemText(i, ++j, TEXT(""));
                m_list.SetItemText(i, ++j, TEXT("20"));
            }            

    4.设置额外属性。整行选中,网格线

    1 m_list.SetExtendedStyle(m_list.GetExtendedStyle()|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);

    六。Tree Control

    1.修改控件属性,Has Buttons,Has Lines,Lines At Root为True,添加Tree Control变量m_tree,“控件”类型

    2.在OnInitDialog()中添加控件内容和结构

    •  添加图标

      右键资源视图的Icon添加资源,导入ico文件。

      

            HICON icons[4];//图标数组
            icons[0] = AfxGetApp()->LoadIconW(IDI_ICON1);
            icons[1] = AfxGetApp()->LoadIconW(IDI_ICON2);
            icons[2] = AfxGetApp()->LoadIconW(IDI_ICON3);
            icons[3] = AfxGetApp()->LoadIconW(IDI_ICON4);
            CImageList* list = new CImageList;
            //创建图标集合
            list->Create(30, 30, ILC_COLOR32, 4, 4);
            //添加具体图片
            for (int i = 0; i < 4; i++)
            {
                list->Add(icons[i]);
            }
    m_tree.SetImageList(list,TVSIL_NORMAL);//设置m_tree的图片列表为CImageList*类型的list
    •  设置节点 
    HTREEITEM root=m_tree.InsertItem(TEXT("根节点"), 0, 0, NULL); //根节点root,InserTtem可以选择名称,图标编号
            HTREEITEM parent=m_tree.InsertItem(TEXT("父节点"), 1, 1, root);
            HTREEITEM sub1 = m_tree.InsertItem(TEXT("子节点"), 2, 2, parent);
            HTREEITEM sub2 = m_tree.InsertItem(TEXT("子节点"), 3, 3, parent);
            m_tree.SelectItem(root); //设置选择

    3.添加控件的TVN_SELCHANGED事件,在选择节点时可以触发处理函数。

    七。单选框/复选框

    • 单选框

    1.拖入RadioButton,并按Ctrl+D顺序排列。其中,将2 的Group设为True,6的Group设为True,可以将其分为2组。

     2.在OnInitDialog(),可以进行设置默认选择按钮。

    1     //第一个按钮,最后一个按钮,默认选中的按钮
    2     CheckRadioButton(IDC_RADIO1, IDC_RADIO2, IDC_RADIO1);

    3.使用IsDlgButtonChecked,来判断单选框是否被选中。给Button设置处理函数,输出被选中的单选框

     1 void CMFCApplication5Dlg::OnBnClickedButton2()
     2 {
     3     // TODO: 在此添加控件通知处理程序代码
     4     //如果第一个被按下
     5     CString str;
     6     if (IsDlgButtonChecked(IDC_RADIO1))
     7     {
     8         str = TEXT("");
     9     }
    10     if (IsDlgButtonChecked(IDC_RADIO2))
    11     {
    12         str = TEXT("");
    13     }
    14     MessageBox(str);
    15 }

    • 复选框

    1.为复选框添加变量

     2.在OnInitDialog中初始化复选框

    1     m_check.SetWindowTextW(TEXT("测试1"));
    2     m_check.SetCheck(1);

     3.在按钮中添加事件处理函数

     1 void CMFCApplication5Dlg::OnBnClickedButton1()
     2 {
     3     // TODO: 在此添加控件通知处理程序代码
     4     CString str;
     5     if(IsDlgButtonChecked(IDC_CHECK1))
     6     {
     7         str += TEXT("测试1
    ");
     8     }
     9     if (IsDlgButtonChecked(IDC_CHECK2))
    10     {
    11         str += TEXT("测试2
    ");
    12     }
    13     if (IsDlgButtonChecked(IDC_CHECK3))
    14     {
    15         str += TEXT("测试3
    ");
    16     }
    17     if (IsDlgButtonChecked(IDC_CHECK4))
    18     {
    19         str += TEXT("测试4
    ");
    20     }
    21     MessageBox(str);
    22 }

     

    八。滑块

    一。添加滑块控件,并添加变量m_scrollBar,并在OnInitDialog中初始化。m_pos为edit_control控件的变量

    1     //设置滑块范围
    2     m_scrollBar.SetScrollRange(1, 100);
    3     //设置位置
    4     m_scrollBar.SetScrollPos(m_pos);

    2.在主窗口类->属性中添加标准消息HScroll。

     1 void MFCDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
     2 {
     3     // TODO: 在此添加消息处理程序代码和/或调用默认值
     4     if (pScrollBar == &m_scrollBar)  //判断是哪一个滑块
     5     {
     6         int tmpPos;
     7         switch (nSBCode)
     8         {
     9         case SB_THUMBPOSITION: //滑块位置
    10         {
    11             m_scrollBar.SetScrollPos(nPos);
    12             m_pos = nPos;
    13             UpdateData(FALSE);
    14             break;
    15         }
    16         case SB_LINELEFT: //向左的箭头
    17         {
    18             //获取滑块位置
    19             tmpPos = m_scrollBar.GetScrollPos() - 5;
    20             if (tmpPos < 0)
    21             {
    22                 tmpPos = 0;
    23             }
    24             m_scrollBar.SetScrollPos(tmpPos);
    25             m_pos = tmpPos;
    26             UpdateData(false);
    27             break;
    28         }
    29         case SB_LINERIGHT:
    30         {
    31             //获取滑块位置
    32             tmpPos = m_scrollBar.GetScrollPos() + 5;
    33             if (tmpPos >= 100)
    34             {
    35                 tmpPos = 100;
    36             }
    37             m_scrollBar.SetScrollPos(tmpPos);
    38             m_pos = tmpPos;
    39             UpdateData(false);
    40             break;
    41         }
    42         case SB_PAGELEFT: //当前位置和左箭头之间的区域
    43         {
    44             //获取滑块位置
    45             tmpPos = m_scrollBar.GetScrollPos() - 10;
    46             if (tmpPos <= 0)
    47             {
    48                 tmpPos = 0;
    49             }
    50             m_scrollBar.SetScrollPos(tmpPos);
    51             m_pos = tmpPos;
    52             UpdateData(false);
    53             break;
    54         }
    55         case SB_PAGERIGHT:
    56         {
    57             //获取滑块位置
    58             tmpPos = m_scrollBar.GetScrollPos() + 10;
    59             if (tmpPos >= 100)
    60             {
    61                 tmpPos = 100;
    62             }
    63             m_scrollBar.SetScrollPos(tmpPos);
    64             m_pos = tmpPos;
    65             UpdateData(false);
    66             break;
    67         }
    68         }
    69     }
    70     CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);
    71 }
  • 相关阅读:
    笔试题总结
    ubuntu 14.04 vim install youcompleteme
    c语言位域
    strcmp函数的使用
    Spring多数据源的配置和使用
    根据出生日期计算年龄的sql各种数据库写法
    BZOJ3165 : [Heoi2013]Segment
    BZOJ2725 : [Violet 6]故乡的梦
    BZOJ2851 : 极限满月
    BZOJ2837 : 小强的形状
  • 原文地址:https://www.cnblogs.com/sclu/p/11551834.html
Copyright © 2011-2022 走看看