MFC对话框控件的属性、方法、消息

MFC 同时被 2 个专栏收录
12 篇文章 0 订阅
27 篇文章 1 订阅

一、静态控件 Static
1.属性:
Align text 横向对齐方式,有左对齐、居中对齐和右对齐三种,默认为左对齐
Center vertically 将文本垂直居中,为布尔型,默认为假
Notify 控件被单击时是否通过父窗口,布尔型,默认为假
Sunken 使控件看上去有下凹的感觉,布尔型,默认为假
Border 边框,布尔型,默认为假
2.常用方法
SetBitmap 指定在静态控件中显示的位图
GetBitmap 获取用SetBitmap设置的位图的句柄
SetIcon 指定在静态控件中要显示的图标资源
GetIcon 获取用SetIcon设置的图标的句柄
3.常用消息
忽略
二、编辑框
1.属性
Align text 左对齐 右对齐 居中对齐 ,默认左对齐
Multiline 编辑框是否多行
Number 只能输入数字
Auto HScroll 输入到窗口右边界后自动产生横向滚动条
Password 密码属性,设置后输入内容显示*
Want return 指定当用户在多行编辑框控件中按Enter键时插入一个回车符,否则用户按下的回车符会被解释为选择了对话框中的默认命令按钮,该属性对单行编辑框控件不起作用
Read-only 只读
Uppercase 输入字符全转换位大写
2.方法
GetSel 获取编辑框中当前选择的起始字符和终止字符位置
ReplaceSet 用指定文本替换编辑框的值
SetSel 选择编辑框中的一个字符范围
GetModify 确定编辑框中内容是否被修改
SetModify 设置或清除编辑框的修改标志
SetReadOnly 设置编辑框控件的只读标志
GetPasswordChar 获取用户输入文本时在编辑框控件内显示的口令字符
GetRect 获取编辑框控件的矩形
LimitText 限制用户输入编辑框控件的文本长度
SetPasswordChar 设置或删除当用户输入文本时在编辑框控件中显示的口令字符
Undo 取消上一次编辑框控件操作
Clear 消除编辑框控件内的当前选择
Copy 将编辑框控件中的当前选中内容以CF_TEXT格式复制到剪贴板中
Paste 将数据从剪贴板复制到编辑框控件中当前光标位置处
GetLineCount 获取多行编辑框控件的行数
GetLine 从编辑框控件内获取一行文本
3.常用消息
EN_CHANGE 修改编辑框并显示文本后,发生消息
EN_HSCROLL 单击编辑框的水平滚动条,在更新前发送
EN_MAXTEXT 编辑框不具有ES_AUTOHSCROLL样式时,插入字符超出文本宽度,或插入总行数超出文本框高度会发送。
EN_SETFOCUS 当编辑框接受输入焦点时发送
EN_UPDATE 与CHANGE的区别是这个消息是发生在修改文本后显示文本之前发生.
EN_VSCROLL 单击垂直滚动条,更新显示之前发生
三、按钮
1.属性
2.方法
GetState 获取按钮控件的检查状态,高亮状态和焦点状态
SetState 设置按钮的高亮状态
GetCheck 获取按钮的检查状态
SetCheck 设置按钮的检查状态
GetButtonStyle 获取有关按钮控件风格的信息
SetButtonStyle 设置按钮的风格
GetBitmap 获取由SetBitmap设置的位图的句柄
SetBitmap 设置要在按钮上显示的位图
3.消息
BN_CLICKED 按钮被单击
BN_PUSHED 按钮被按下
BN_DISABLE 按钮不可用
BN_SETFOCUS 按钮获得键盘输入焦点
四、列表
1.属性
Selection 指定列表框的选择类型,Single单选、Multiple多选、Extended扩展多选、None不选
Sort 项目按字母顺序自动排序
Multi-column 是否在列表框显示多列
Vertical scroll 创建一个垂直滚动条
Horizontal scroll 创建一个水平滚动条
Border 设置边框
Notify 当用户操作列表时,向父窗口发生通知消息
2.方法
GetCount 获取列表中字符串的数目
GetItemDataPtr 获取一个指向列表项的指针
GetSel 获取一个列表项的选择状态
SetColumnWidth 设置一个多列列表框的宽度
*GetCurSel 获取列表框中当前所选择的索引
SetCurSel 设置某个列表项的选中状态
AddString 在列表项中增加一列表项
DeleteString 从列表框中删除指定的列表项
InsertString 在列表框中指定位置插入列表项
ResetContent 消除所有列表项
FindString 只查找某列表项
SelectString 查找并选择单列表框中的一个列表项
3.消息
LBN_SETFOCUS 列表框接受到输入焦点
LBN_KILLFOCUS 失去输入焦点
LBN_ERRSPACE 存储溢出
*LBN_DBLCLK 双击列表项
*LBN_SELCHANGE 改变选择
LBN_SELCANCEL 取消选择
*:最常用
其中不可复选的列表框可用GetCurSel()来获取当前双击的列表框条目的索引值,对于允许多选的列表框则用GetCaretIndex()来获取
五、组合框
1.属性
2.方法
GetCount 获取组合框中项目的数目
GetCurSel 获取当前选项下标
GetDroppedState 获取列表框是否可见
GetEditSel 获取文本框中所选文本的开始和末尾字符的位置
GetLBText 获取列表框中指定行的字符串
LimitText 指定用户可输入文本长度
Paste 将CF_TEXT格式数据从剪贴板复制到文本框中光标的位置
SetCurSel 在组合框列表中选择一项
SetEditSel 在文本框中选择文本
ShowDropDown 显示或隐藏列表框部分
3.消息
ON_CBN_CLOSEUP 关闭组合框列表
ON_CBN_DBLCLK 双击组合框列表中项目
ON_CBN_DROPDOWN 显示列表框
ON_CBN_EDITCHANGE 文本框中文本内容被改动
ON_CBN_EDITUPDATE 文本框内容更新显示
ON_CBN_ERRSPACE 组合框不能为某个特殊请求分配足够的内存
ON_CBN_SELENDCANCEL 用户的选择被取消
ON_CBN_SELENDOK 用户选择了一个项目并且通过Enter键或按下鼠标而隐藏组合框
ON_CBN_KILLFOCUS 组合框失去焦点
ON_CBN_SELCHANGE 选择发生变化
ON_CBN_SETFOCUS 组合框获得输入焦点
六、滚动条
1.属性
2.方法
SetScrollRange 滚动范围(最小,最大)
GetScrollRange 查询滚动范围
SetScrollPos 将滚动块移动到指定位置
GetScrollPos 获得滚动块当前位置
3.消息
WM_HSCROLL、WM_VSCROLL
afx_msg void OnHScroll(UINT nSBCode,UINT nPos,CScrollBar * pScrollBar);
afx_msg void OnVScroll(UINT nSBCode,UINT nPos,CScrollBar * pScrollBar);
必须重载这2个函数才有作用。
nSBCode是消息通知码,nPos是滚动块的位置,只有在nSBCode为SB_THUMBPOSITION或SB_THUMBTRACK时,该参数才有意义。
SB_BOTTOM/SB_RIGHT 滚动到底端(右端)
SB_TOP/SB_LEFT 滚动到顶端(左端)
SB_LINEDOWN/SB_LINERIGHT 向下(向右)滚动一行(列)
SB_LINEUP/SB_LINELEFT 向上(向左)滚动一行(行)
SB_PAGEDOWN/SB_PAGERIGHT 向下(向右)滚动一页
SB_PAGEUP/SB_PAGELEFT 向上(向左)滚动一页
SB_THUMBPOSITION 滚动框被拖动到指定位置,并松开鼠标
SB_THUMBTRACK 滚动框被移动,可利用该消息来跟踪对滚动块的拖动
SB_ENDSCROLL 滚动结束
实例:完成一个用3个滚动条设置RGB,然后单色填充图像。
先创建一个Dialog,名叫CMyScrollDlg
添加3个滚动条,Control类型,增加3个m_nRed,m_nGreen,m_nBlue(int)用于显示滚动条消息和设置RGB的三个值.
CScrollBar m_ScrollBarBlue;
CScrollBar m_ScrollBarGreen;
CScrollBar m_ScrollBarRed;
在DoDataExChange里面设置.
加一个图像控件ID 为IDC_PICTURE
在CMyScrollDlg中增加WM_HSCROLL消息响应函数,

void CMyScrollDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
    // TODO: Add your message handler code here and/or call default
    int nCurrentPos=pScrollBar->GetScrollPos();//获取消息响应前的滚动条位置
    switch(nSBCode)
    {
    case SB_THUMBTRACK:
    case SB_THUMBPOSITION:
        pScrollBar->SetScrollPos(nPos);//滚动条移动到nPos位置
        break;
    case SB_LINELEFT://点左箭头,实际是向左滚动一行
        pScrollBar->SetScrollPos(nCurrentPos-1);
        break;
    case SB_LINERIGHT://点右箭头,实际是向右滚动一行
        pScrollBar->SetScrollPos(nCurrentPos+1);
        break;
    case SB_PAGELEFT://点击滚动块的左方区域,实际是向左滚动一页
        pScrollBar->SetScrollPos(nCurrentPos-10);
        break;
    case SB_PAGERIGHT://点击滚动块的右方区域,实际是向右滚动一页
        pScrollBar->SetScrollPos(nCurrentPos+10);
        break;
    }
    CWnd * pWnd=GetDlgItem(IDC_PICTURE);//获取图片框指针
    CRect rect;
    pWnd->GetClientRect(&rect);//获取图片框的矩阵区域信息
    CDC * pdc=pWnd->GetDC();//获取图片的设备环境指针
    m_nRed=m_ScrollBarRed.GetScrollPos();
    m_nGreen=m_ScrollBarGreen.GetScrollPos();
    m_nBlue=m_ScrollBarBlue.GetScrollPos();
    COLORREF Color=RGB(m_nRed,m_nGreen,m_nBlue);
    pdc->FillSolidRect(&rect,Color);
    UpdateData(false);

    CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}

七、微调控件
1.属性
Oricontation 控件放置方向:Vertical垂直、Horizontal水平
Alignment 控件在伙伴窗口的位置安排:Unattached不关联、Right右边
Auto boddy 自动选择一个Table order中的前一个窗口作为控件的伙伴控件
Set boddy integer 使控件设置伙伴控件数值,这个值可是十进制或十六进制
No thousands 不存在每隔3个十进制数字的地方加上千分隔符
Wrap 若控件的增加或减小超过了范围,使数值可以“循环”
Arrow Keys 当按下向上和向下方向键时,控件可以增加或减少

2.方法
SetRange 设置控件的上下限范围
GetRange 获得控件的上下限范围
SetPos 设置当前位置值
GetPos 获得当前位置值
SetBoddy 动态设置关联控件
GetBoddy 获得关联控件窗口的指针

3.消息
微调空间的操作通常只影响与之关联的控件,CSpinButtonCtrl类封装了它的消息处理函数,当单击微调按钮时候发送UDN_DELTAPOS消息,当内存不足时发送NM_OUTOFMEMORY消息,利用ClassWizard添加

八、滑块控件
1.属性
Orientation 控件放置方向:V垂直,H水平
Point 设置刻度标尺的位置,Both表示滑块是一个矩形块,Top/Left表示标尺位于滑竿上方或者左边,Bottom/Right表示下和右
Tick marks 显示刻度线
Auto ticks 每个增量位置处都有刻度线,增量的大小自动根据其范围确定
Border 边框
Enable selection 用户选择的范围高亮显示
2.方法
SetRange 设置控件的范围
GetRange 获得控件的范围
SetPos 设置当前位置值 (滑块)
GetPos 获取当前位置值 (滑块)
SetSelection 设置选择范围
SetTic 设置一个刻度线的位置
SetTicFreq 设置刻度线的疏密程序
ClearTics 清除全部刻度线
3.消息
和滚动条消息类似:WM_VSCROLL(垂直滑动块消息),WM_HSCROLL(水平),建立的时候选择对话框的ID,不能选滑块的ID,数据参数获取发出滚动消息控件的ID标识,以区分不同控件的滚动消息。

九、进度条
1.属性
Border 设置边框
Vertical 垂直进度条
Smooth 使用不间断的蓝色条填充控件窗口
2.方法
SetRange 设置控件的范围
GetRange 获取控件的范围
SetPos 设置当前位置值
GetPos 获取当前位置值
SetStep 设置步长
StepIt 使进度增加一个步长
3.消息
实例:编写一基于对话框的应用程序,使用微调控件、滑块和进度条,模拟一个播放器
对话框成员:

    CProgressCtrl   m_Process;
    CSliderCtrl m_Slider;
    CSpinButtonCtrl m_Spin;
    int     m_Edit;

自上到下分别是:进度条、滑动条、微调控件、编辑框控件
对话框初始化函数:
m_Spin.SetRange(1,20);
m_Spin.SetPos(1);
m_Edit=1;
m_Slider.SetRange(0,10);
m_Slider.SetPos(3);
m_Slider.SetTicFreq(1);
m_Process.SetRange(0,100);
m_Process.SetPos(0);
m_Process.SetStep(10);
UpdateData(false);

OnOK函数:

void CMyProcessDlg::OnOK() 
{
    // TODO: Add extra validation here
    CString strMessage;
    UpdateData(false);
    strMessage.Format("所选 %d 频道,音量为%d",m_Edit,m_Slider.GetPos());
    MessageBox(strMessage);

    for(int i=0;i<10;i++)
    {
        m_Process.StepIt();//使滚动条按步长增加,这里设置是10个单位为一步长
        Sleep(500);//延时0.5秒
    }
    MessageBox("播放完毕");
    CDialog::OnOK();
}

点击微调控件上下箭头产生的消息响应函数:
创建方法-Ctlr+w->Object IDs:IDC_SPIN1->Messages:UDN_DELTAPOS.

void CMyProcessDlg::OnDeltaposSpin1(NMHDR* pNMHDR, LRESULT* pResult) 
{
    NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;
    // TODO: Add your control notification handler code here


    int currentSpinPos=m_Spin.GetPos();

    if(pNMUpDown->iDelta==1)//上   
    {
        UpdateData(true);
        --m_Edit;
        m_Spin.SetPos(m_Edit);
        if(m_Edit<1)
        {
            m_Edit=1;
            m_Spin.SetPos(1);

        }
        UpdateData(false);
    }
    else if(pNMUpDown->iDelta==-1)//下
    {
        UpdateData(true);
        ++m_Edit;
        m_Spin.SetPos(m_Edit);
        if(m_Edit>20)
        {
            m_Edit=20;
            m_Spin.SetPos(20);
        }
        UpdateData(false);
    }
    *pResult = 0;
}
  • 1
    点赞
  • 0
    评论
  • 7
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值