高级控件应用

4 篇文章 0 订阅

高级编辑控件和旋转按钮

第一节:旋转按钮(CSpinButtonCtrl)

一个旋转按钮由一对方向相反的箭头按钮组成,用户单击其中一个按钮增加或减小数值。一个旋转按钮通常与一个相伴的控件联合使用,这个控件称为“伙伴窗口”,一般为EditCtrl。一个旋转按钮控件可以紧靠在它的伙伴窗口的边或者嵌入内部,两个看起来就像一个单一的控件。
就像这个一样,由一个EditCtrl和一个SpinCtrl组成
关于旋转按钮 属性 说明
a)Orientation:按钮滚动方式(纵向和横向)
b)Alignment:与伙伴控件对其方式
   Anattached:在伙伴控件之外
   Left:在伙伴控件之内,并左侧对其
   Right:在伙伴控件之内,并右侧对其
c)Auto Buddy:自动选择Tab顺序前一个控件关联为伙伴控件
d)Set Buddy Interger:设置关联控件的整数数值
e)No thousands:不在每隔三个十进制数字的地方加上千分隔符
f)Wrap:数值超范围时循环
g)Arrow Keys:当按下向上和向下方向键时,可以增加或减小
h)Not track:鼠标热点跟踪

旋转按钮特点如下
a)调用CSpinButtonCtrl::SetBuddy函数,可以来设置旋转控件的伙伴窗口;
b)在控件的属性设置中Auto Buddy属性,可以自动将TAB顺序前一个控件设置为伙伴窗口;
c)一般旋转按钮主要用于控制整数数值,因此Set Buddy Interger属性也常常被选中;
d)调用CSpinButtonCtrl::SetRange32函数,设置旋转按钮的可控制数值的范围。
代入两个参数的大小,可以决定向上或向下增加数值;
e)旋转按钮的缺省可控数值范围是100-0,因此缺省是单击向下按钮时数值增加。

CSpinButtonCtrl m_sp2; //在.h中设置控件关联变量关联CSpinButtonCtrl

m_sp2.SetBuddy(GetDlgItem(IDC_EDIT3)); //在cpp中的OnInitDialog进行伙伴窗口设置
m_sp2.SetRange32(0,2000);  //单击向上按钮时数值增加

第二节:高级编辑控件(RichEdit)

和普通控件的区别
a)普通编辑框内部的所有文字的颜色和字体都是统一的(记事本软件的效果)
b)高级编辑控件是不同文字和段落可以设置不同的字体和颜色(写字板和Word软件的效果)
c)另外,普通编辑框缺省有内置的上下文菜单,而高级编辑控件内没有上下文菜单(右键没有菜单,需手动编写代码来实现)

高级控件注意事项
a)必须在App类的InitInstance函数中,在程序刚启动时执行全局函数AfxInitRichEdit()。
否则含有RichEdit控件的对话框会弹出失败;
b)可以调用CWnd::SetWindowText函数设置整个RichEdit控件的文字,
更多况是调用CRichEditCtrl::ReplaceSel函数插入文字或者覆盖文字;
c)调用CRichEditCtrl::SetDefaultCharFormat函数设置控件内所有文字的格式(字体和颜色),
包括已经输入的和将要输入的;
d)调用CRichEditCtrl::SetSelectionCharFormat函数为选中的文字设置格式;
e)调用CRichEditCtrl::SetWordCharFormat函数为将要输入的文字设置格式;
f)调用CRichEditCtrl::SetParaFormat函数为当前选择的段落设置格式。

CRichEditCtrl m_hist;  //.h中为RichEdit控件关联的控件变量

CHARFORMAT2 cf;
cf.cbSize  = sizeof(CHARFORMAT2);
cf.dwMask = CFM_COLOR|CFM_FACE|CFM_SIZE;  //颜色 字体 大小的开关
cf.dwEffects=~CFE_AUTOCOLOR;  //设置颜色有效
cf.crTextColor = RGB(0,255,0);
cf.yHeight = 300;
strcpy(cf.szFaceName,"黑体");
m_hist.SetDefaultCharFormat(cf);
m_hist.SetWindowText("【系统】欢迎进入MFC聊天室\r\n");

属性表和属性页开发向导模式

//在.h中定义三个属性页,三个属性页是继承于CPropertyPage类的对象
CPage1 p1;
CPage2 p2;
CPage3 p3;
//向导模式分页窗口
CPropertySheet sh("用户信息管理",this);
sh.AddPage(&p1);
sh.AddPage(&p2);
sh.AddPage(&p3);
sh.SetWizardMode();
//标签模式分页窗口
CPropertySheet sh("用户信息修改",this);
sh.AddPage(&p1);
sh.AddPage(&p2);
sh.AddPage(&p3);

消息反射

反射型消息映射与普通消息映射
a)普通消息映射是将父窗口消息与类成员函数关联,用于接收父窗口传递过来的消息
b)反射型消息映射是将子窗口消息与父窗口类成员函数关联,用于接收子窗口内鼠标键盘等各种事件传递回的消息
c)在类向导的消息映射分类中选中父窗口类名称,在右边消息列表中显示的全部是普通消息映射
d)选中下面各个控件ID(如BN_CLICKED)则可以建立某个控件的消息反射函数,点击按钮的消息其实也是一个反射型消息映射

反射型消息映射的特点
a)在反射型消息映射中,必须与某个子窗口ID相关联
b)消息类型一般都带有’N’字,例如BN代表"Button Notify",EN代表"Edit Notify"等
c)在ON_NOTIFY消息映射函数中,注意使用第一个参数(NMHDR*),根据不同控件可以传递当前节点的句柄或ID等有用信息,一般为ListView或者TreeView的指针

最常用的控件消息反射类型

控件类型反射消息类型用途
ButtonBN_CLICKED点击按钮时响应
EditEN_CHANGE编辑文字时响应(包括输入、粘贴及函数设置)
Combo BoxCBN_SELCHANGE更改下拉列表选择项时响应
List ControlLVN_ITEMCHANGED更改列表控件选择项时响应,既选中某一项时响应
List ControlNM_DBCLICK双击列表项时响应,一般 是对于某一列响应
Tree ControlTVN_SELCHANGED更改树形控件选择项时响应
Tree ControlTVN_ITEMEXPANDED展开树形控件节点时响应

树形控件

一、树形控件:用于存储就有多层分类关系的数据。
例如:总公司下面有多个分公司,而每个分公司下面有多个部门,每个部门下面又有多个员工等等。

二、树形控件的开发包括“有限层次”和“无限层次”两种用法:
a)公司员工分类就是“有限层次”的使用方法。
“无限层次”的树形控件并非是树的深度无穷大,而是说树的深度对于开发者是未知的(随机可变的)。
b)资源管理器和注册表管理器中,树形控件的深度对于开发者是未知的,
在不同的主机中以上管理器树形控件的深度是不确定的。

三、树形控件节点遍历:

控件函数作用
HTREEITEM GetSelectedItem( );获取当前选中的节点
HTREEITEM GetRootItem( );获取根节点
HTREEITEM GetDropHilightItem( );获取一次拖放操作的目标节点
HTREEITEM GetParentItem( HTREEITEM hItem );获取指定节点的父节点
HTREEITEM GetChildItem( HTREEITEM hItem );获取指定节点的子节点
HTREEITEM GetPrevSiblingItem( HTREEITEM hItem );获取前一个同层的兄弟节点(兄)
HTREEITEM GetNextSiblingItem( HTREEITEM hItem );获取后一个同层的兄弟节点(弟)
HTREEITEM GetFirstVisibleItem( );获取第一个可见节点
HTREEITEM GetPrevVisibleItem( HTREEITEM hItem );获取前一个可见节点
HTREEITEM GetNextVisibleItem( HTREEITEM hItem );获取后一个可见节点
BOOL ItemHasChildren( HTREEITEM hItem );判断指定节点是否含有子节点
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值