MFC控件(一)

 

静态文本控件

设置控件文本:

1、使用属性窗口设置。

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

(注意:控件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;

}

编辑框多行显示文本:

1、Styles->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

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

可通过按钮类CButton的SetCheck方法来实现:

void SetCheck(int nCheck);

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

BST_UNCHECKED:未选中

BST_CHECHED:选中

BST_INDETERMINATE:不确定(只按钮具有BS_3STATE和BS_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

复选框控件ID:IDC_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、单选按钮ID:IDC_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:设置属性Styles为Icon

为按钮控件关联变量: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)

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

列表框控件添加变量:

CListBox m_List1

CListBox m_List2

按钮变量:

CButton m_In

CButton m_Out

文本框控件变量:

CString m_Item

1、初始化时,将按钮In、Out状态设为不可用

m_In.EnableWindow(false);

m_Out.EnableWindow(false);

2、Add按钮单击事件:

void CListBoxDemoDlg::OnAdd()

{

    // TODO: Add your control notification handler code here

    UpdateData(true);

    if(m_Item.IsEmpty())

    {

       MessageBox("项目不能为空!");

    }

    m_List1.AddString(m_Item);

    m_Item = "";

    UpdateData(false);

}

3、Out按钮单击事件

void CListBoxDemoDlg::OnOut()

{

    // TODO: Add your control notification handler code here

    int count = m_List1.GetSelCount();

    if(!count)

       return;

    int* Items = new int[count];

    m_List1.GetSelItems(count, Items);

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

    {

       CString strItem;

       m_List1.GetText(Items[i],strItem);

       m_List2.AddString(strItem);

    }

    for(i = count-1; i>=0; i--)

    {

       m_List1.DeleteString(Items[i]);

    }

    delete[] Items;

 

    if(m_List1.GetSelCount())

       m_Out.EnableWindow(true);

    else

       m_Out.EnableWindow(false);

}

4、In按钮单击事件

void CListBoxDemoDlg::OnIn()

{

    // TODO: Add your control notification handler code here

    int count = m_List2.GetSelCount();

    if(!count)

       return;

    int* Items = new int[count];

    m_List2.GetSelItems(count,Items);

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

    {

       CString szItem;

       m_List2.GetText(Items[i],szItem);

       m_List1.AddString(szItem);

    }

    for(i = count-1; i>=0; i--)

    {

       m_List2.DeleteString(Items[i]);

    }

    delete[] Items;

 

    if(m_List2.GetSelCount())

       m_In.EnableWindow(true);

    else

       m_In.EnableWindow(false);

}

6、为列表框添加LBN_SELCHANGE响应函数

(有选中项目和无选中项目时,分别判断按钮状态)

void CListBoxDemoDlg::OnSelchangeList1()

{

    // TODO: Add your control notification handler code here

    if(m_List1.GetSelCount())

       m_Out.EnableWindow(true);

    else

       m_Out.EnableWindow(false);

}

void CListBoxDemoDlg::OnSelchangeList2()

{

    // TODO: Add your control notification handler code here

    if(m_List2.GetSelCount())

       m_In.EnableWindow(true);

    else

       m_In.EnableWindow(false);

}

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值