05. 基本控件(上)

基本控件(上)

  • 基本的控制组件,通过控件可以提高效率
    1. 任何vc内部的windows基础控件都有一个固定的控件类可以与之建立控件型关联变量
    2. 有一些控件类是多种控件公用的,比如“CButton”类,按钮控件,单选按钮,复选框都是出自于这个 类,都是这个类派生出来的。
    3. 有些控件不但可以建立控件型关联变量,还可以建立数值型关联变量。

静态文本

  • Static Text
  • 用来在指定的位置显示特定的字符串,一般用来标识附近另一个控件的内容。
  • 显示在静态文本控件中的字符串一般不再改变
  • 在需要的时候也可以通过调用相应的函数来进行设置。通过CStatic类来进行修改,由CStatic类来支持静 态控件

静态文本示例

  1. 创建一个MFC程序,选择“基于对话框”。
  2. 修改对话框属性。拖入一个“Static Text”。修改为“网址”。再拖入第二个"static text"修改为“www.bai du.com”。来实现当点击第二个静态文本时,自动打开“www.baidu.com”这个网站。修改好ID以未区 别。
  3. 通过“类向导”,选择添加“MFC类”。在"MFC添加类向导”中自定义类名:CMyStatic。
  4. 在“CMyStatic”类中添加成员函数声明及定义
void SetLink(BOOL isLink);//设置超链接
void CMyStatic::SetLink(BOOL isLink) // 设置超链接
{
if (isLink)
{
//调用这个函数修改窗口的风格
ModifyStyle(0, //指定修改时要删除的窗口风格
SS_NOTIFY);//指定修改时将要增加的窗口风格
}
else
ModifyStyle(SS_NOTIFY, 0);
}

  1. 为这个类添加一个左键消息的处理程序。
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  1. 实现函数体。
void CMyStatic::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CString strLink;
GetWindowText(strLink);//得到窗口上的文本,设置进参数中
ShellExecute(NULL, _T("open"), strLink, NULL, NULL, SW_NORMAL);//open strLink
里面的字符串
CStatic::OnLButtonDown(nFlags, point);
}
  1. 在主类生成对象。
  2. 为网址“添加变量”。
  3. 修改变量类型,如下所示:
//CStatic m_linkStatic;
CMyStatic m_linkStatic;
  1. 在初始化函数中
m_linkStatic.SetLink(true);//调用超链接
  1. 运行结果。如想改变该静态文本的颜色。添加“WM_CTLCOLOR”消息
if (IDC_STATIC_LINK == pWnd->GetDlgCtrlID())
{
    pDC->SetTextColor(RGB(255, 0, 0));//dc中设置文本颜色为之前设定的表示颜色的变量
    pDC->SetBkMode(TRANSPARENT);//dc中设置文本的背景模式为透明
}
  1. 还想改变这个静态文本的字体,则定义一个表示字体的类成员变量CFont m_newFont。
  2. 在初始化函数中初始化
CFont* font;
font = m_linkStatic.GetFont();//获取CFont对象
LOGFONT lf;
font->GetLogFont(&lf);//获取LOGFONT结构体
lf.lfHeight = 26; //修改字体大小
lf.lfItalic = TRUE; //倾斜
lf.lfUnderline = true;//下划线
lf.lfWeight = 400; //修改字体的粗细
m_newFont.CreateFontIndirectW(&lf);//创建一个新的字体
m_linkStatic.SetFont(&m_newFont);//通过关联的静态文本变量去设置新的字体

最后运行。

单选按钮

  • 顾名思义:单选按钮只能选取一个。
  • 通过单选按钮让用户选择其中一个控件,另外的控件就为非选择。

单选按钮示例

  1. 1、拖入“静态文本”,修改名字为:“性别”。再拖入两个单选按钮“Radio Button”,一个修改为“男”,一个 为“女”。修改这两个单选按钮的ID。再在右侧拖入一个“Button”,修改为:“选择”,修改ID
  2. 运行两个按钮都是非选中状态,设置一个默认选项
  3. 初始化函数中加入:
((CButton*)GetDlgItem(IDC_MAN))->SetCheck(BST_CHECKED);//默认选择男

运行代码,默认选择了“男”。

  1. 要想获得用户选择的单选是谁,通过用户点击“选择”这个button来得到一个消息盒子。

    添加如下代码:

    switch (GetCheckedRadioButton(IDC_MAN, IDC_WOMAN))//得到选择的单选按钮
    {
    case IDC_MAN:
    MessageBox(_T("你选择的性别为:男"), _T("提示"), MB_OK | MB_ICONQUESTION);
    break;
    case IDC_WOMAN:
    MessageBox(_T("你选择的性别为:女"), _T("提示"), MB_OK | MB_ICONQUESTION);
    break;
    }
    
    
  2. 实现多组单选按钮。继续拖入3个“Radio Button”,修改名字。修改ID。还是通过按钮来进行操作。

switch (GetCheckedRadioButton(IDC_SMALL, IDC_BIG))
{
case IDC_SMALL:
MessageBox(_T("你选择的学历为:小学"), _T("提示"), MB_OK | MB_ICONQUESTION);
break;
case IDC_MEDIUM:
MessageBox(_T("你选择的学历为:高中"), _T("提示"), MB_OK | MB_ICONQUESTION);
break;
case IDC_BIG:
MessageBox(_T("你选择的学历为:大学"), _T("提示"), MB_OK | MB_ICONQUESTION);
break;
}

复选按钮

  • check box
  • MFC中复选按钮CheckBox的基类是CButton。
  • 在复选按钮中有三种状态:
    1. 复选按钮没有被选中
    2. 复选按钮被选中
    3. 表示不确定(三态)

复选按钮示例

  1. 拖入三个“check box”,修改名字为:“吃饭”,“喝酒”,“打牌”。
  2. 为“选择”按钮添加处理程序:
//表示check box的3种状态的描述
CButton* pBtn = (CButton*)GetDlgItem(IDC_CHECK1);
int state = pBtn->GetCheck();
switch (state)
{
case 0:
MessageBox(_T("没有选中吃饭"));
break;
case 1:
MessageBox(_T("选中吃饭"));
break;
case 2:
MessageBox(_T("不确定选中吃饭"));
break;
default:
break;
}
//只是表示check box被选中
if (IsDlgButtonChecked(IDC_CHECK2))
MessageBox(_T("喝酒"));

编辑框

  • 之前用过编辑框,在对话框中给出一个文本编辑框,供用户输入文字。

编辑框示例

  1. 拖入三个编辑框“edit”。

  2. 继续拖动一个edit,通过在这个edit中用文字显示出用户选择的选项。。 修改这个编辑框的属性:“Read Only”改为true。 修改“Multiline”为true。 修改“Vertical Scroll”为true。

  3. 为这4个edit绑定变量。

  4. 拖入按钮,进入按钮的处理函数。

    UpdateData(true);
    if (m_strName.IsEmpty())//姓名不能为空
    {
    MessageBox(_T("姓名不能为空值"),_T("错误"),MB_OK | MB_ICONERROR);
    GetDlgItem(IDC_EDIT_NAME)->SetFocus();//设置当前edit为输入焦点
    return;
    }
    if (m_strMZ.IsEmpty())//民族不能为空
    {
    MessageBox(_T("民族不能为空值"), _T("错误"), MB_OK | MB_ICONERROR);
    GetDlgItem(IDC_EDIT_MZ)->SetFocus();
    return;
    }
    if (m_iAge > 200)
    {
    MessageBox(_T("年龄输入有误"), _T("错误"), MB_OK | MB_ICONERROR);
    m_iAge = 0;//年龄重置为0
    UpdateData(false);//把绑定变量数据更新到对话框
    GetDlgItem(IDC_EDIT_AGE)->SetFocus();
    return;
    }
    m_strShowText += "姓名:";
    m_strShowText += m_strName;
    m_strShowText += "\r\n";
    m_strShowText += "性别:";
    switch (GetCheckedRadioButton(IDC_MAN, IDC_WOMAN))
    {
    case IDC_MAN:
    m_strShowText += "男";
    break;
    case IDC_WOMAN:
    m_strShowText += "女";
    break;
    }
    m_strShowText += "\r\n";
    m_strShowText += "民族:";
    m_strShowText += m_strMZ;
    m_strShowText += "\r\n";
    m_strShowText += "年龄:";
    TCHAR tempArr[16] = {};
    _stprintf_s(tempArr, _T("%d"), m_iAge);//把整数按格式化输出到字符串
    m_strShowText += tempArr;
    m_strShowText += "\r\n";
    m_strShowText += "学历:";
    switch (GetCheckedRadioButton(IDC_SMALL, IDC_BIG))
    {
    case IDC_SMALL:
    m_strShowText += "小学";
    break;
    case IDC_MEDIUM:
    m_strShowText += "高中";
    break;
    case IDC_BIG:
    m_strShowText += "大学";
    break;
    default:
    m_strShowText += "无";
    }
    m_strShowText += "\r\n";
    UpdateData(false);
    

按钮

按钮示例

  1. 单击鼠标修改文本内容,也可以通过属性栏进行编辑。

  2. 通过“类向导”添加BUTTON的控件变量,从而在对话框类中使用button的接口。

  3. 常用接口:

    CWnd::SetWindowText 设置控件内容
    CWnd::GetWindowText 获取控件内容
    CWnd::EnableWindow 设置控件是否变灰
  4. 代码示例:

    //获取按钮的内容
    CString str;
    m_button.GetWindowText(str);
    MessageBox(str);
    //设置按钮内容
    m_button.SetWindowText(TEXT("^_^"));
    //设置按钮状态为灰色
    m_button.EnableWindow(FALSE);
    m_button.EnableWindow(TRUE);
    
    
  5. 按钮的响应,双击按钮控件后跳转至cpp,且自动生成响应函数:

    //按钮BN_CLICKED事件处理函数
    void CMFCApplication2Dlg::OnBnClickedButton1()
    {
    // TODO: 在此添加控件通知处理程序代码
    }
    
posted @ 2022-06-18 20:26  Quirkygbl  阅读(67)  评论(0编辑  收藏  举报