MFC控件(一)

    技术2022-05-17  56

    静态文本控件

    设置控件文本:

    1、使用属性窗口设置。

    2、动态设置控件文本:调用CStaticSetWindowText()方法

    (注意:控件ID不能是默认的IDC_STATIC,需修改,不修改不能在类向导中显示,则不能为静态文本控件关联变量)

    响应鼠标单击事件:

    1、更改静态文本ID,不可为默认。

    2、将静态文本控件Styles设置为:Notify

    3、通过类向导添加鼠标单击事件。

    示例:实现了单击静态文本控件,就可进行网站的超链接。

    静态文本控件关联变量:CStatic m_Url;

    添加鼠标单击事件:

    void CCH7Dlg::OnUrl()

    {

    CString szUrl;

    m_Url.GetWindowText(szUrl);

    ShellExecute( NULL,"open",szUrl,NULL,NULL,1);

    }

    编辑框控件EditBox

    编辑框控件可以用于文字的录入,也可用于显示文本,可对编辑框中文本进行复制。剪切、粘贴、删除等。

    获取和设置编辑框文本:GetWindowText

    CEdit<-CWnd,GetWindowText()CWnd提供的)

    void GetWindowText(CString& String)const;

    String:用于记录编辑框控件中文本。

    示例:

    CString szText;

    m_Content.GetWindowText(szText);

    设置编辑框控件文本:SetWindowText(同样来自CWnd类)

    void SetWindowText(LPCTSTR lpszString);

    lpszString:设置的文本字符串。

    示例:

    m_Content.SetWindowText(“Hello”);

    设置字体

    void SetFont(CFont* pFont, BOOL bRedraw = TRUE);

    pFont:字体对象指针,表示设置的编辑框控件字体。

    bRedraw:是否重绘编辑框。TRUE重绘,FALSE不重绘,默认为TRUE

    pFont不能是一临时对象,必须是全局的,或者是一个对话框类成员对象)

    示例:

    CFont m_EditFont;(类成员变量)

     

    m_EditFont.CreateFont(...);

    m_Content.SetFont(&m_EditFont);

    设置文本颜色:

    编辑框字体对象中没有提供设置文本颜色的属性,要设置文本颜色,可处理WM_CTLCOLOR消息。

    HBRUSH C*Dlg::OnCtlColor(CDC* pDC,CWnd* pWnd, UINT nCtlColor)

    {

        HBRUSH hbr = CDialog::OnCtlColor(pDC,pWnd,nCtlColor);

        if(nCtlColor == CTLCOLOR_EDIT)

        {

           pDC->SetTextColor(RGB(255,0,0));//设置设备上下文文本颜色为红色

        }

    return hbr;

    }

    编辑框多行显示文本:

    1Styles->Auto HScroll

    2、通过代码设置:需要使用”/r/n”

    eg: m_Content.SetWindowText(“we are all together!/r/nyou can always remember”);

    组合框CombBox

    添加数据

    1、通过属性窗口:(按ctrl+Enter换行)

    2、通过代码:

    通过类向导为组合框控件关联变量:

    CComboBox m_ComboBoc;

    在对话框初始化部分添加代码:

    m_ComboBox.AddString(“语文”);

    m_ComboBox.AddString(“数学”);

    m_ComboBox.AddString(“英语”);

    注:(组合框Sort属性:若选择,会自动排序,导致输入顺序和显示顺序不同)

    获取组合框中数据:

    1、获取选中数据

    CString szText;

    m_ComboBox.GetWindowText(szText);

    2、获取某一项数据

    m_ComboBox.GetLBText(2,szText);

    设置组合框默认显示数据:

    对话框初始化时:

    m_ComboBox.SetCuiSel(0);//将第一项设为默认数据

    列表框ListBox

    添加文本:

    1、使用类向导为列表框控件关联变量:

    CListBox m_List;

    2、使用AddString方法添加数据

    m_List.AddString(“语文”);

    m_List.AddString(“数学”);

    m_List.AddString(“英语”);

    注:列表框也有Sort属性。

    3、还可在指定位置添加数据

    m_List.InserString(1,”物理”);//在第二行添加数据

    为列表框数据添加复选功能:

    示例:

     

    (要选择“有字符串”选项,这样在文本前会添加复选框)

    2、对话框初始化时:

    m_DataList.AddString(“语文”);

    m_DataList.AddString(“数学”);

    m_DataList.AddString("英语");

    m_DataList.AddString("物理");

    m_DataList.AddString("化学");

    3、按钮单击事件:

    void CCheckListDlg::OnConfirm()

    {

        int nItemCount = m_DataList.GetCount();

        CString szItemData,szContent;

        for( int i = 0; i<nItemCount; i++)

        {

           if(m_DataList.GetCheck(i) == BST_CHECKED)

           {

               m_DataList.GetText(i,szItemData);

               szContent += szItemData + "/r/n";

           }

        }

        if(!szContent.IsEmpty())

        {

           MessageBox(szContent,"your choices are:");

        }

    }

    如何同时选则多个项目:将列表框属性设为多选即可

    复选框控件:CheckBox

    设置和取消复选框选中状态

    可通过按钮类CButtonSetCheck方法来实现:

    void SetCheck(int nCheck);

    nCheck:表按钮的设置状态,值如下:

    BST_UNCHECKED:未选中

    BST_CHECHED:选中

    BST_INDETERMINATE:不确定(只按钮具有BS_3STATEBS_AUTO3STATE风格时可用)

    示例:

    m_Badmin.SetCheck(BST_CHECKED);//将按钮设置为选中状态

    获得复选框状态:

    int GetCheck() const;

    示例:

    int nState = m_Badmin.GetCheck();

    if(nState == BST_CHECKED)

    {

        MessageBox(“you chosed badmintion”,”notice”);

    else

    {

        MessageBox(“you didn’t choose badmintion”,”notice”);

    }

    示例:使用复选框统计个人爱好

     

    1、创建基于对话框工程:Habit

    复选框控件IDIDC_PINGPANG,IDC_ZUQIU,IDC_LANQIU,IDC_YUMAO

    按钮:IDC_TONGJI

    2、添加按钮单击事件

    void CHabitDlg::OnTongji()

    {

        CString szHabitList,szHabit;

        szHabitList = "";

        for(int i = IDC_PINGPANG; i<IDC_YUMAO + 1; i++)

        {

           CButton* pBtn = static_cast<CButton*>(GetDlgItem(i));

           if(pBtn != NULL)

           {

               if(pBtn->GetCheck() == BST_CHECKED)

               {

                  pBtn->GetWindowText(szHabit);

                  szHabitList += szHabit + "/r/n";

               }

           }

        }

        MessageBox(szHabitList,"your habits are:");

    }

    注:

    该例通过ID来进行遍历。

    static_cast < type-id > ( expression )   

    该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。做上行转换:把派生类指针转化为基类指针,是安全的

    单选按钮控件:RadioButton

    为单选按钮设置分组:通过Group属性的设置

    获取单选按钮选中状态:

    示例:

     

    1、单选按钮IDIDC_YOU  IDC_LIANG  IDC_ZHONG   IDC_CHA,设置组属性

    2、添加按钮单击事件:OnConfirm

    void CSelSingleDlg::OnConfirm()

    {

        CString szChoice;

        for(int i = IDC_YOU; i<IDC_CHA + 1; i++)//ID遍历

        {

           CButton* pBtn = static_cast<CButton*>(GetDlgItem(i));

           if(pBtn != NULL)

           {

               if(pBtn->GetCheck() == BST_CHECKED)

               {

                  pBtn->GetWindowText(szChoice);

                  MessageBox("等级:" + szChoice,"提示");

                  break;

               }

           }

        }

    }

    按钮控件

    示例:图标按钮,并添加提示:

    1、基于对话框工程:Icon

    按钮控件IDC_Btn:设置属性StylesIcon

    为按钮控件关联变量:CButton  m_Btn;

    2、添加Icon资源:IDI_ICONBTN

    3、对话框初始化时:

    m_Btn.SetIcon(LoadIcon(AfxGetResourceHandle(),

    MAKEINTRESOURCE(IDI_ICONBTN)));

    (SetIcon方法需要一Icon资源作为参数,为获取Icon,调用LoadIcon方法)

    4、为图标按钮添加提示功能:

    对话框类中增加成员变量:CToolTipCtrl  m_ToolTip;

    5、对话框初始化时:

    m_ToolTip.Create(this);

    m_ToolTip.AddTool(&m_Btn,”MessageBoc”);

    (AddTool方法参数:HWnd*,提示信息)

    图像控件:

    使用属性窗口显示位图:

    添加位图控件->导入位图->设置位图属性为Bitmap->将控件和位图关联。

    动态加载位图:

    示例:

     

    按钮单击事件:

    void CSmartLoadBmpDlg::OnLoadbmp()

    {

        CFileDialog flDlg(TRUE, NULL, NULL, OFN_HIDEREADONLY |

     OFN_OVERWRITEPROMPT, "位图|*.bmp||");

        if (flDlg.DoModal()==IDOK)

        {

           CString szBmpName;

           szBmpName = flDlg.GetPathName();

           HBITMAP hOldBmp =

    m_Bmp.SetBitmap((HBITMAP)LoadImage(NULL, szBmpName,

    IMAGE_BITMAP,0, 0, LR_LOADFROMFILE));

           DeleteObject(hOldBmp);

        }  

    }

     

    1

    按钮控件:单击事件 OnConfirm()

    列表框控件:CListBox m_DataList;

    (然后在C*Dlg头文件中改为:CCheckListBox  m_DataList)

    列表框控件属性设置如下:

     


    最新回复(0)