ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

05. 基础控件(上)

2022-06-18 20:31:10  阅读:219  来源: 互联网

标签:控件 05 MB 基础 break 按钮 strShowText IDC


基本控件(上)

  • 基本的控制组件,通过控件可以提高效率
    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: 在此添加控件通知处理程序代码
    }
    

标签:控件,05,MB,基础,break,按钮,strShowText,IDC
来源: https://www.cnblogs.com/WZ-1120232314/p/16389161.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有