您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 机械/模具设计 > MFC_基本控件使用
1第9章Windows标准控件在可视化编程中的应用2控件是Windows图形用户界面的主要组成部分之一,用户通过操作控件对象完成与应用程序之间的交互。控件的使用集中体现了Windows系统面向对象的特点39.1概述控件工具栏控件接受的消息主要有单击、双击和字符输入等49.2按钮控件及其应用按钮控件普通按钮圆按钮复选框按钮59.2.1按钮控件的创建过程CButton类的成员函数Create负责创建按钮控件,该函数的声明为: BOOLCreate(LPCTSTRlpszCaption,//指定了按钮显示的正文DWORDdwStyle,//按钮的风格constRECT&rect,//按钮的位置和大小CWnd*pParentWnd,//指向父窗口,UINTnID//按钮的ID)6按钮控件消息:ON_BN_CLICKEDON_BN_DBLCLICKEDON_COMMAND两个类似按钮是昀常见的控件之一复选框单选按钮下压式按钮分组框常用于只有两种完全相反状态的情况下适用于同一组属性相同的数据中选一个数据适用于消息的发送没有太多的操作只是在窗口中划分区域范围7GetCheck()SetCheck()GetButtonStyle()SetButtonStyle()GetState()SetState()CButton类的成员函数在知道按钮ID的前提下,还可使用与按钮有关的CWnd成员函数来设置或查询按钮状态CheckDlgButtonCheckRadioButtonGetCheckedRadioButtonIsDlgButtonCheckedGetWindowTexGetWindowTextLengthSetWindowText8MFC还提供了一个CBitmapButton的类,允许用户以图标的方式显示按钮,它是在CButtong下派生的MFC调用方法DrawItem()在按钮上绘制位图,LoadBitmaps()方法为一个CBitmapButton对象附上位图,昀多可以有4个位图自定义按钮99.2.2按钮控件示例10Group属性Auto属性主要步骤:1.创建基于对话框项目2.设置按钮的属性113.添加成员变量并添加消息响应函数12voidCMy9_1Dlg::OnButton1(){m_btn1.SetWindowText(“你已按下了按钮!”);}voidCMy9_1Dlg::OnButton2(){m_btn2.SetWindowText(“按钮已被按下!”);}voidCMy9_1Dlg::OnCheck1(){if(m_chk1.GetCheck()0)m_chk1.SetCheck(0);elsem_chk1.SetCheck(1);}voidCMy9_1Dlg::OnRadio1(){m_rad1.SetCheck(1);}139.3滚动条控件滚动条是一个交互式的、高度可视化的控件它包括一个滑块、滚动条的两端的按钮等。滚动条控件与属于窗口的滚动条是不一样的处于窗口的滚动条是由该窗口创建、管理和释放的滚动条控件是由用户创建、管理和释放的149.3.1滚动条类的结构及其方法滚动条可以通过通知代码来创建,也可以用对话框资源模板来创建CScrollBar类的方法方法说明EnableScrollBar()使滚动条的一个或两个箭头有效或无效GetScrollInfo()获得滚动条的消息GetScrollLimit()获得滚动条的范围GetScrollPos()获得滚动条当前的位置GetScrollRange()获得制定滚动条的当前昀大和昀小滚动位置SetScrollInfo()设置滚动条的消息SetScrollPos()设置滚动块当前的位置SetScrollRange()设置制定滚动条的昀大和昀小滚动位置ShowScrollBar()显示或隐藏滚动条159.3.2创建与初始化滚动条类创建CScrollBar对象的一般步骤(1)用C++关键字new和构造函数CScrollBar::CScrollBar()为一个ScrollBar对象分配一个实例(2)初始化CScrollBar对象,将一个Windows滚动条赋予它,并用CScroll::Create()方法设置参数和样式分配一个滚动条控件对象并返回指向该对象的指针CScrollBar::pMyScroll=newCScrollBar调用CScrollBar::Create()方法初始化指针BOOLCreate(DWORDdwStyle,constRECT&rect,CWnd*pParentWnd,UINTnID);滚动条窗口的样式表示控件的大小和位置指向控件所属窗口的指针父窗口与滚动条通信的标识16在设置滚动条控件时,要通过如下方法设置其范围CScrollBar::SetScrollRange()例如,设置滚动范围为-100到100的垂直滚动条pMyScroll-SetScrollRange(SB_VERT,-100,100);通过SetScrollPos()设置滚动块当前位置例如,滚动快的位置在-100到100的中间,即为0的位置pMyScroller-SetScrollPos(0);179.3.3滚动条类编程实例标题为ApplicationofScrollBar滚动条的滚动范围设为0到20单击滚动块与箭头之间的区域。滚动块上移或下移三格,编辑框中的数字加3或减3单击向上或向下的箭头,滚动块向上或向下移动一格,编辑框中的数字加1或减1按住滚动块上下拖动。编辑框中的数字随着随之变化当前值为10单击Up按钮,滚动块移到昀上边,编辑框的数字变为0单击Down按钮,滚动块移到昀下边,编辑框的数字变为20单击Reset按钮,滑块移到中间,编辑框的数字变为10单击Exit按钮,退出应用程序18对话框中各个对象的属性 对象 ID 滚动条 IDC_SCROLLBAR 编辑框 IDC_EDIT1 Up按钮 IDC_UP_BUTTON Down按钮 IDC_DOWN_BUTTON Reset按钮 IDC_RESET_BUTTON Exit按钮 IDC_EXIT_BUTTON (1)应用程序的可视化编程部分19(2)应用程序的代码编程部分(a)给滚动条连接变量ID变量名类别类型IDC_SCROLLBARm_ScrollbarControlCScrollbarIDC_EDITlm_EditControlCEdit20BOOLCMy9_2Dlg::OnInitDialog(){CDialog::OnInitDialog();……//TODO:Addextrainitializationherem_Scrollbar.SetScrollRange(0,20);m_Scrollbar.SetScrollPos(10);charsPos[10];itoa(m_Scrollbar.GetScrollPos(),sPos,10);m_Edit.SetSel(0,-1);m_Edit.ReplaceSel(sPos);UpdateData(FALSE);returnTRUE;}10进制数(b)初始化滚动条21(3)给滚动条消息添加代码voidCMy9_2Dlg::OnVScroll(……){//TODO:AddyourmessagehandlercodeherecharsPos[10];intiNowPos;switch(nSBCode){if(pScrollBar==&m_Scrollbar){caseSB_THUMBTRACK://拖动滑块m_Scrollbar.SetScrollPos(nPos);itoa(nPos,sPos,10);m_Edit.SetSel(0,-1);m_Edit.ReplaceSel(sPos);22caseSB_LINEDOWN://单击滚动条向下的箭头iNowPos=m_Scrollbar.GetScrollPos();iNowPos=iNowPos+1;if(iNowPos20)iNowPos=20;m_Scrollbar.SetScrollPos(iNowPos);itoa(m_Scrollbar.GetScrollPos(),sPos,10);m_Edit.SetSel(0,-1);m_Edit.ReplaceSel(sPos);break;23caseSB_LINEUP://单击滚动条向上的箭头iNowPos=m_Scrollbar.GetScrollPos();iNowPos=iNowPos-1;if(iNowPos0)iNowPos=0;m_Scrollbar.SetScrollPos(iNowPos);itoa(m_Scrollbar.GetScrollPos(),sPos,10);m_Edit.SetSel(0,-1);m_Edit.ReplaceSel(sPos);break;24caseSB_PAGEDOWN://单击箭头与滚块之间的区域iNowPos=m_Scrollbar.GetScrollPos();iNowPos=iNowPos+3;if(iNowPos20)iNowPos=20;m_Scrollbar.SetScrollPos(iNowPos);itoa(m_Scrollbar.GetScrollPos(),sPos,10);m_Edit.SetSel(0,-1);m_Edit.ReplaceSel(sPos);break;25caseSB_PAGEUP://单击箭头与滚块之间的区域iNowPos=m_Scrollbar.GetScrollPos();iNowPos=iNowPos-3;if(iNowPos0)iNowPos=0;m_Scrollbar.SetScrollPos(iNowPos);itoa(m_Scrollbar.GetScrollPos(),sPos,10);m_Edit.SetSel(0,-1);m_Edit.ReplaceSel(sPos);break;}}CDialog::OnVScroll(nSBCode,nPos,pScrollBar);}26(4)给Exit按钮连接代码voidCMy9_2Dlg::OnExitButton(){OnOK();}(5)给Up按钮添代码voidCMy9_2Dlg::OnUpButton(){m_Scrollbar.SetScrollPos(0);m_Edit.SetSel(0,-1);m_Edit.ReplaceSel(0);}27(6)给Down按钮添加代码voidCMy9_2Dlg::OnDownButton(){m_Scrollbar.SetScrollPos(20);m_Edit.SetSel(0,-1);m_Edit.ReplaceSel(20);}(7)给Reset按钮添加代码voidCMy9_2Dlg::OnResetButton(){m_Scrollbar.SetScrollPos(10);m_Edit.SetSel(0,-1);m_Edit.ReplaceSel(10);}28在应用程序中,编辑框只是有于显示滚动块的位置,不需要进行编辑,因此必须将其属性改为只读299.4静态控件309.4.1静态控件的特点一般情况下静态控件不发送消息。实际应用中,需要静态文本能够象超文本那样响应用户的输入,向应用程序发送控件消息。要在创建静态控件时加入SS_NOTIFY样式该样式允许静态控件向其父窗口发送WM_COMMAND消息,该消息的字参数的低字节中包含静态控件的ID,高字节中包含通知码319.4.2静态控件应用举例【例9-3】本例通过演示位图静态控件的使用方法,说明静态控件消息的强制生成与处理过程,当单击位图时,就报告该位图的尺寸。32主要步骤如下:⑴创建基于对话框的应用程序⑵导入一张BMP格式图片。假设位图资源名称为IDB_BITMAP1⑶向对话框上放上一个static控件,其ID为IDC_STATIC_BMP,并设置控件为nofity风格,并添加CStatic
本文标题:MFC_基本控件使用
链接地址:https://www.777doc.com/doc-6068181 .html