VS2010_MFC编程入门之二十六(常用控件:滚动条控件Scroll Bar)-软件开发-鸡啄米
- 格式:pdf
- 大小:723.11 KB
- 文档页数:8
MFC对话框滚动条的使用1. 简介MFC(Microsoft Foundation Class)对话框是Windows评台上一种常见的GUI(Graphical User Interface)界面,可以用于创建各种窗口应用程序。
滚动条是对话框中常用的控件之一,可以用于滚动显示大量内容,如文本、图片等。
本文将介绍在MFC对话框中如何使用滚动条控件。
2. 添加滚动条控件在MFC对话框中添加滚动条控件非常简单。
打开对话框资源编辑器,选中要添加滚动条的对话框,然后在工具栏中选择“滚动条”控件,将其拖放到对话框中即可。
3. 设置滚动条属性添加滚动条控件后,我们可以通过双击滚动条控件或者右键点击属性来设置其各种属性。
常见的滚动条属性包括滚动条的位置、大小、范围、页面大小、滑块大小等。
根据实际需求,可以对这些属性进行调整,以满足程序的需求。
4. 响应滚动条消息一旦滚动条控件添加到对话框中并设置好属性,接下来就是响应滚动条的消息。
在MFC中,我们可以通过重载对话框类的OnVScroll和OnHScroll函数来响应垂直滚动和水平滚动的消息。
在这两个函数中,我们可以根据滚动条的位置来更新对话框中其他控件的显示内容,从而实现滚动显示的效果。
5. 示例代码以下是一个简单的示例代码,演示了在MFC对话框中使用垂直滚动条控件的方法:```C++void CMyDialog::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar){// 获取滚动条控件的当前位置int nCurPos = pScrollBar->GetScrollPos();// 根据滚动条的消息进行相应处理switch (nSBCode){case SB_TOP:// 处理滚动到顶部的情况break;case SB_BOTTOM:// 处理滚动到底部的情况break;case SB_LINEUP:// 处理向上滚动一行的情况break;case SB_LINEDOWN:// 处理向下滚动一行的情况break;case SB_PAGEUP:// 处理向上滚动一页的情况break;case SB_PAGEDOWN:// 处理向下滚动一页的情况break;case SB_THUMBTRACK:// 处理拖动滑块的情况break;default:break;}CDialog::OnVScroll(nSBCode, nPos, pScrollBar); }```在这个示例代码中,我们重载了对话框类的OnVScroll函数,通过获取滚动条的当前位置和消息类型,实现了对滚动条消息的处理。
8、滚动条(ScrollBar)作⽤:当应⽤程序或控件不能⾃动⽀持滚动时,⽤⽔平和垂直的滚动条控件,为它们提供这⼀功能。
滚动条控件有两类:⽔平滚动条HscrollBar、垂直滚动条VscrollBar。
(1)常⽤属性见教材P135表5-13。
经常⽤到的属性有:value——当前滑动块的位置在滚动条中,滚动块所处的位置可以代表⼀个输⼊值。
value属性值即为体现滚动块在滚动条中位置的数值。
对于⽔平滚动条,当滚动块处于最左边时,value取最⼩值Min;对于垂直波动条,当滚动块处于最顶端时,value取最⼩值Min。
反之,则value值取值。
在中间的各个位置,value值与位置是严格按照⽐例来设定的。
改变滚动条value属性的⽅法有四种;直接在属性窗⼝中设定value值;⿏标单击两端箭头键改变滚动条数值;可将滚动框沿滚动条拖动到任意位置;⽤⿏标单击滚动条中滚动块两侧的部分,使滚动块以翻页的速度移动。
value属性的缺省值为O到32,767,缺省情况下,value取0和32,767中的某个数值(包括0和32,767)。
max——滚动条值min——滚动条最⼩值滚动条的value属性有取值范围的限制,取值范围由max属性和min属性设置,⼀般情况,max代表value的值,min代表value 的最⼩值。
如果希望滚动条显⽰的信息从较⼤数值向较⼩数值变化.可将Min设置成⼤于max的值。
largechange——变化量(单击滑动块)smallchange——最⼩变化量(单击箭头)(2)常⽤事件Change事件和Scroll事件单击滚动条的滚动箭头、滚动区域或滚动条的Value属性改变时、滚动条具有焦点时再按下PageUp、Pagedown键,都可以引发Change事件和Scroll事件。
两者的不同在于:单击滚动条的滚动箭头、滚动区域或拖动滚动块后,才能引发Change事件,⽽拖动滚动块时,就可引发Scroll事件。
VS2010 C++学习(1):滚动条的设计总结学习VC++编制的滚动条程序.。
一、主要内容:1.对话框中的滚动条设计;2.编辑框中的滚动条设计;3.列表框中的滚动条设计;二、设计实现:1、对话框中的滚动条设计;∙在资源编辑器中,选择在属性对话框中的水平滚动和垂直滚动样式。
∙选择调整大小的边框样式,以使该对话框可调整其大小。
∙重写 WM_VSCROLL 和 WM_HSCROLL 消息处理程序。
∙重写设置滚动条区域,如果大小减小到小于原始大小的 WM_SIZE 消息处理程序。
1)添加成员变量到对话框类中int m_nCurHeight; //存储对话框中的当前高度int m_nScrollPos; //存储当前垂直滚动位置int m_nCurWidth; //存储对话框中的当前宽度int m_hScrollPos; //存储当前水平滚动位置CRect m_rect; // 对话框原始大小2)若要获取原始窗口的大小,请将下行添加到OnInitDialog方法:GetWindowRect(m_rect);m_nScrollPos = 0; // 垂直滚动位置0m_hScrollPos = 0; // 水平滚动位置03) OnSize方法中添加消息处理程序。
判断当前对话框的大小,并与对话框原始大小进行比较。
然后计算出垂直和水平滚动条的最大值,写入SCROLLINFO中去。
4) 将 WM_VSCROLL 消息的消息处理程序添加到OnVScroll方法中,WM_HSCROLL 消息的消息处理程序添加到OnHScroll方法中。
设计响应滚动条的事件。
5) 使用的函数●SetScrollInfo(SB_HORZ, &hsi, TRUE);●SetScrollPos(SB_HORZ,m_hScrollPos,TRUE);●ScrollWindow(-nDelta,0);函数原型:int SetScrollInfo(HWND hWnd,int fnBar,LPSCROLLINFO lpsi,BOOL fRedraw);函数功能:该函数设置滚动条参数,包括滚动位置的最大值和最小值,页面大小,滚动按钮的位置。
VS2010/MFC编程入门教程之目录第一部分:VS2010/MFC开发环境VS2010/MFC编程入门之前言VS2010/MFC编程入门之一(VS2010与MSDN安装过程图解)第二部分:VS2010-MFC应用程序框架VS2010/MFC编程入门之二(利用MFC向导生成单文档应用程序框架)VS2010/MFC编程入门之三(VS2010应用程序工程中文件的组成结构)VS2010/MFC编程入门之四(MFC应用程序框架分析)VS2010/MFC编程入门之五(MFC消息映射机制概述)第三部分:对话框VS2010/MFC编程入门之六(对话框:创建对话框模板和修改对话框属性)VS2010/MFC编程入门之七(对话框:为对话框添加控件)VS2010/MFC编程入门之八(对话框:创建对话框类和添加控件变量)VS2010/MFC编程入门之九(对话框:为控件添加消息处理函数)VS2010/MFC编程入门之十(对话框:设置对话框控件的Tab顺序)VS2010/MFC编程入门之十一(对话框:模态对话框及其弹出过程)VS2010/MFC编程入门之十二(对话框:非模态对话框的创建及显示)VS2010/MFC编程入门之十三(对话框:属性页对话框及相关类的介绍)VS2010/MFC编程入门之十四(对话框:向导对话框的创建及显示)VS2010/MFC编程入门之十五(对话框:一般属性页对话框的创建及显示)VS2010/MFC编程入门之十六(对话框:消息对话框)VS2010/MFC编程入门之十七(对话框:文件对话框)VS2010/MFC编程入门之十八(对话框:字体对话框)VS2010/MFC编程入门之十九(对话框:颜色对话框)第四部分:常用控件VS2010/MFC编程入门之二十(常用控件:静态文本框)VS2010/MFC编程入门之二十一(常用控件:编辑框Edit Control)VS2010/MFC编程入门之二十二(常用控件:按钮控件Button、Radio Button和Check Box)VS2010/MFC编程入门之二十三(常用控件:按钮控件的编程实例)VS2010/MFC编程入门之二十四(常用控件:列表框控件ListBox)VS2010/MFC编程入门之二十五(常用控件:组合框控件Combo Box)VS2010/MFC编程入门之二十六(常用控件:滚动条控件Scroll Bar)VS2010/MFC编程入门之二十七(常用控件:图片控件Picture Control)VS2010/MFC编程入门之二十八(常用控件:列表视图控件List Control 上)VS2010/MFC编程入门之二十九(常用控件:列表视图控件List Control 下)VS2010/MFC编程入门之三十(常用控件:树形控件Tree Control 上)VS2010/MFC编程入门之三十一(常用控件:树形控件Tree Control 下)VS2010/MFC编程入门之三十二(常用控件:标签控件Tab Control 上)VS2010/MFC编程入门之三十三(常用控件:标签控件Tab Control 下)第五部分:菜单、工具栏与状态栏VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)VS2010/MFC编程入门之三十五(菜单:菜单及CMenu类的使用)VS2010/MFC编程入门之三十六(工具栏:工具栏资源及CToolBar类)VS2010/MFC编程入门之三十七(工具栏:工具栏的创建、停靠与使用)VS2010/MFC编程入门之三十八(状态栏的使用详解)第六部分:文档、视图和框架VS2010/MFC编程入门之三十九(文档、视图和框架:概述)VS2010/MFC编程入门之四十(文档、视图和框架:各对象之间的关系)VS2010/MFC编程入门之四十一(文档、视图和框架:分割窗口)第七部分:MFC常用类VS2010/MFC编程入门之四十二(MFC常用类:CString类)VS2010/MFC编程入门之四十三(MFC常用类:CTime类和CTimeSpan类)VS2010/MFC编程入门之四十四(MFC常用类:定时器Timer)VS2010/MFC编程入门之四十五(MFC常用类:CFile文件操作类)VS2010/MFC编程入门之四十六(MFC常用类:MFC异常处理)第八部分:字体和文本输出VS2010/MFC编程入门之四十七(字体和文本输出:CFont字体类)VS2010/MFC编程入门之四十八(字体和文本输出:文本输出)第九部分:图形图像VS2010/MFC编程入门之四十九(图形图像:CDC类及其屏幕绘图函数)VS2010/MFC编程入门之五十(图形图像:GDI对象之画笔CPen)VS2010/MFC编程入门之五十一(图形图像:GDI对象之画刷CBrush)第十部分:Ribbon界面开发VS2010/MFC编程入门之五十二(Ribbon界面开发:创建Ribbon样式的应用程序框架)VS2010/MFC编程入门之五十三(Ribbon界面开发:为Ribbon Bar添加控件)VS2010/MFC编程入门之五十四(Ribbon界面开发:使用更多控件并为控件添加消息处理函数)VS2010/MFC编程入门之前言鸡啄米的C++编程入门系列给大家讲了C++的编程入门知识,大家对C++语言在语法和设计思想上应该有了一定的了解了。
MFC中滚动条的实现1、建立工程时,将View类继承自CScrollView2、在OnInitialUpdate中添加初始化时Scroll的相关属性值CSize sizeTotal(0,0);SetScrollSizes(MM_TEXT,sizeTotal);3、打开文件(图像后)根据图像的大小,设置滚动属性值ChangeScrollRange(); //自定义函数//直接重新调用SetScrollSizes(MM_TEXT,sizeTotal); 即可4、在View类中添加成员变量。
作用是存储图像显示位置与原点的offsetint m_ImgVScrollPos; // VScroll distanceint m_ImgHScrollPos; // HScroll distance5、滚动处理添加自定义响应WM_VSCROLL、WM_HSCROLL消息的事件函数:OnVScroll、OnHScroll void CSockIIView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScr ollBar){// TODO: Add your message handler code here and/or call defaultSCROLLINFO si;GetScrollInfo(SB_VERT,&si,SIF_ALL);m_ImgVScrollPos=si.nPos;Invalidate(TRUE);CScrollView::OnVScroll(nSBCode, nPos, pScrollBar);}6、图像显示更改OnPaint函数中图像显示的代码:dc.BitBlt(rc.left,rc.top,rc.Width(),rc.Height(),m_pMemDC, rc.left,rc.top,SRCCOPY);为:dc.BitBlt(rc.left,rc.top,rc.Width(),rc.Height(),m_pMemDC,(rc.left+m_ImgHScrollPos),(rc.top+m_ImgVScrollPos),SRCCOPY);备注:SetScrollSizes() MFC库函数,设置滚动条属性。
滚动条滚动条(Scroll Bar)主要用来从某一预定义值范围内快速有效地进行浏览,滚动条分为垂直滚动条(Horizontal Scroll Bar)和水平滚动条(Vertical Scroll Bar)两种,如图3.5.41所示。
在滚动条内有一个滚动框,图3.5.41垂直和水平滚动条用来表示当前的值。
用鼠标单击滚动条,可以使滚动框移动一页或一行,也可以直接拖动滚动框。
滚动条即可以作为一个独立控件存在,也可以作为窗口、列表框和组合框的一部分。
滚动条控件的各种操作都封装在MFC的CScrollBar类中。
图3.5.42向前拖动滚动条的情况例3.23在对话框上设计一个滚动条、一个静态文本和一个编辑框。
当拖动滚动条向前进时,编辑框的数字逐渐增加,而静态文本的背景逐渐变红,拖动滚动条向后,编辑框的数字逐渐减少,静态文本的红颜色逐渐变淡,如图3.5.42所示。
(1)创建一个基于对话框的应用程序,名为:滚动条。
(2)删除原来的Cancel(取消)按钮,将原来的OK(确定)按钮的标题改为:退出。
(3)参照图3.5.42控件布局,用编辑器为对话框添加如表3.30所示控件,并加成员变量。
(4)为CMyDlg.h添加一个布尔变量即:BOOL m_bEditOK;并在CMyDlg.cpp 的构造函数中将其初值设为假即:m_bEditOK=FALSE;(5)增加充填颜色函数,将项目工作区切换到ClassView页面,用鼠标右击“CMyDlg”项,在弹出的快捷菜单中选中“Add Member Function”,在Function 处写:void,在Function Declaration处写:Draw()。
表3.30添加的控件及成员变量控件ID号标题属性成员变量大小静态文本IDC_DRAW默认Static edge静态文本默认红(R)编辑框IDC_EDIT1默认int m_RValue0-255水平滚动条IDC_SCROLLBAR1默认CScrollBar m_Scroll(6)切换到ClassWizard的Message Maps标签页,在CMyDlg类中,为编辑框IDC_EDIT1添加EN_CHANGE的消息映射,并加代码:void CMyDlg::OnChangeEdit1(){if(!m_bEditOK)return;UpdateData();//将控件的内容赋给成员变量m_Scroll.SetScrollPos(m_RValue);Draw();}(4)在CMyDlg.cpp文件中的OnPaint()函数中增加下列代码:void CMyDlg::OnPaint(){CPaintDC dc(this);//注意,要保留原程序的此条语句CWnd*pWnd=GetDlgItem(IDC_DRAW);pWnd->UpdateWindow();Draw();}(5)在CMyDlg.cpp文件中的OnInitDialog()函数中增加下列代码:BOOL CMyDlg::OnInitDialog(){CDialog::OnInitDialog();…….…………….m_Scroll.SetScrollRange(0,255);m_Scroll.SetScrollPos(m_RValue);UpdateData(FALSE);//将成员变量数据传给控件m_bEditOK=TRUE;return TRUE;//return TRUE unless you set the focus to a control}(6)用ClassWizard为对话框类CMyDlg添加WM_HSCROLL映射消息,并加代码:void CMyDlg::OnHScroll(UINT nSBCode,UINT nPos,CScrollBar*pScrollBar) {int nID=pScrollBar->GetDlgCtrlID();//获取对话框中控件的ID号if(nID==IDC_SCROLLBAR1){switch(nSBCode){case SB_LINELEFT:m_RValue--;break;//单击滚动条左箭头case SB_LINERIGHT:m_RValue++;break;//单击滚动条右箭头case SB_PAGELEFT:m_RValue-=10;break;case SB_PAGERIGHT:m_RValue+=10;break;case SB_THUMBTRACK:m_RValue=nPos;break;}if(m_RValue<0)m_RValue=0;if(m_RValue>255)m_RValue=255;m_Scroll.SetScrollPos(m_RValue);}UpdateData(FALSE);//将成员变量数据传给控件Draw();CDialog::OnHScroll(nSBCode,nPos,pScrollBar);}(7)为第5步添加的Draw()函数,加下列代码:void CMyDlg::Draw(){CWnd*pWnd=GetDlgItem(IDC_DRAW);//获得静态文本的起始地址,即ID标识CDC*pDC=pWnd->GetDC();//获得窗口当前的设备环境指针CBrush drawBrush;//定义画刷变量drawBrush.CreateSolidBrush(m_RValue);//建立画刷颜色值CBrush*pOldBrush=pDC->SelectObject(&drawBrush);CRect rcClient;pWnd->GetClientRect(rcClient);pDC->Rectangle(rcClient);pDC->SelectObject(pOldBrush);}(8)编译运行,结果见图3.5.42所示。
MFC各种控件的使用说明把整数显示为时间格式的方法:Int minute=5; int sec=5;CString strTime;strTime.Format("%02d:%02d",minute,sec);GetDlgItem(IDC_STAT_DIS)->SetWindowText(strTime);定时器的使用方法:在函数BOOL CDingshiqiDlg::OnInitDialog(){SetTimer(1,1000,NULL);}添加语句SetTimer(1,1000,NULL);定时器1秒钟中断一次.然后添加消息WM_TIMER对应的消息函数:void CDingshiqiDlg::OnTimer(UINT nIDEvent){}播放系统声音的方法:在头文件添加这两句#include<mmsystem.h>#pragma comment (lib,"winmm.lib")然后调用函数: PlaySound("SystemStart",NULL,SND_ALIAS|SND_ASYNC);VC++6.0控件工具箱:2 图形控件(picture):常用于显示位图(Bitmap)和图标(Icon)3 静态文本(Static Text):MFC提供了CStatic类支持静态控件。
(1)更改该控件上字体的方法是:该控件的ID为IDC_STATIC1,IDC_STATIC2.CFont * f1;f1 = new CFont;f1 -> CreateFont( 25 , // nHeight15, // nWidth0 , // nEscapement0 , // nOrientationFW_BOLD, // nWeightFALSE , // TRUEbItalicFALSE, // bUnderline0 , // cStrikeOutDEFAULT_CHARSET, //ANSI_CHARSET nCharSetOUT_DEFAULT_PRECIS, // nOutPrecisionCLIP_DEFAULT_PRECIS, // nClipPrecisionDEFAULT_QUALITY, // nQualityDEFAULT_PITCH | FF_SWISS, // nPitchAndFamily_T( " 宋体" )); // lpszFacGetDlgItem(IDC_STATIC1)-> SetFont(f1);GetDlgItem(IDC_STATIC2)-> SetFont(f1);另一种改变字体大小的方法: 在函数外定义CStatic m_static;CFont font;m_static.SubclassDlgItem(IDC_STAT_DIS,this);LOGFONT log;GetObject(::GetStockObject(DEFAULT_GUI_FONT),sizeof(log),&log);log.lfHeight=300; //改log.lfWidth=120; //改log.lfCharSet=GB2312_CHARSET;lstrcpy(log.lfFaceName, _T("宋体"));font.CreateFontIndirect(&log);m_static.SetFont(&font);(2) 把整数显示在该控件的方法:IDC_STAT_DIS为控件IDInt minute=5,sec=5;CString strTime;strTime.Format("%02d:%02d",minute,sec);GetDlgItem(IDC_STAT_DIS)->SetWindowText(strTime);另外一种显示的方法:CStatic*pst=(CStatic *)GetDlgItem(IDC_STAT_DIS);pst->SetWindowText("00:00");4 编辑框(Edit Box):MFC提供了CEdit类支持编辑框控件。
VS2010/MFC编程入门教程之目录第一部分:VS2010/MFC开发环境VS2010/MFC编程入门之前言VS2010/MFC编程入门之一(VS2010与MSDN安装过程图解)第二部分:VS2010/MFC应用程序框架VS2010/MFC编程入门之二(利用MFC向导生成单文档应用程序框架)VS2010/MFC编程入门之三(VS2010应用程序工程中文件的组成结构)VS2010/MFC编程入门之四(MFC应用程序框架分析)VS2010/MFC编程入门之五(MFC消息映射机制概述)第三部分:对话框VS2010/MFC编程入门之六(对话框:创建对话框模板和修改对话框属性)VS2010/MFC编程入门之七(对话框:为对话框添加控件)VS2010/MFC编程入门之八(对话框:创建对话框类和添加控件变量)VS2010/MFC编程入门之九(对话框:为控件添加消息处理函数)VS2010/MFC编程入门之十(对话框:设置对话框控件的T ab顺序)VS2010/MFC编程入门之十一(对话框:模态对话框及其弹出过程)VS2010/MFC编程入门之十二(对话框:非模态对话框的创建及显示)VS2010/MFC编程入门之十三(对话框:属性页对话框及相关类的介绍)VS2010/MFC编程入门之十四(对话框:向导对话框的创建及显示)VS2010/MFC编程入门之十五(对话框:一般属性页对话框的创建及显示)VS2010/MFC编程入门之十六(对话框:消息对话框)VS2010/MFC编程入门之十七(对话框:文件对话框)VS2010/MFC编程入门之十八(对话框:字体对话框)VS2010/MFC编程入门之十九(对话框:颜色对话框)第四部分:常用控件VS2010/MFC编程入门之二十(常用控件:静态文本框)VS2010/MFC编程入门之二十一(常用控件:编辑框Edit Control)VS2010/MFC编程入门之二十二(常用控件:按钮控件Button、Radio Button和Check Box)VS2010/MFC编程入门之二十三(常用控件:按钮控件的编程实例)VS2010/MFC编程入门之二十四(常用控件:列表框控件ListBox)VS2010/MFC编程入门之二十五(常用控件:组合框控件Combo Box)VS2010/MFC编程入门之二十六(常用控件:滚动条控件Scroll Bar)VS2010/MFC编程入门之二十七(常用控件:图片控件Picture Control)VS2010/MFC编程入门之二十八(常用控件:列表视图控件List Control 上)VS2010/MFC编程入门之二十九(常用控件:列表视图控件List Control 下)VS2010/MFC编程入门之三十(常用控件:树形控件Tree Control 上)VS2010/MFC编程入门之三十一(常用控件:树形控件Tree Control 下)VS2010/MFC编程入门之三十二(常用控件:标签控件Tab Control 上)VS2010/MFC编程入门之三十三(常用控件:标签控件Tab Control 下)第五部分:菜单、工具栏与状态栏VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)VS2010/MFC编程入门之三十五(菜单:菜单及CMenu类的使用)VS2010/MFC编程入门之三十六(工具栏:工具栏资源及CToolBar类)VS2010/MFC编程入门之三十七(工具栏:工具栏的创建、停靠与使用)VS2010/MFC编程入门之三十八(状态栏的使用详解)第六部分:文档、视图和框架VS2010/MFC编程入门之三十九(文档、视图和框架:概述)VS2010/MFC编程入门之四十(文档、视图和框架:各对象之间的关系)VS2010/MFC编程入门之四十一(文档、视图和框架:分割窗口)第七部分:MFC常用类VS2010/MFC编程入门之四十二(MFC常用类:CString类)VS2010/MFC编程入门之四十三(MFC常用类:CTime类和CTimeSpan类)VS2010/MFC编程入门之四十四(MFC常用类:定时器Timer)VS2010/MFC编程入门之四十五(MFC常用类:CFile文件操作类)VS2010/MFC编程入门之四十六(MFC常用类:MFC异常处理)第八部分:字体和文本输出VS2010/MFC编程入门之四十七(字体和文本输出:CFont字体类)VS2010/MFC编程入门之四十八(字体和文本输出:文本输出)第九部分:图形图像VS2010/MFC编程入门之四十九(图形图像:CDC类及其屏幕绘图函数)VS2010/MFC编程入门之五十(图形图像:GDI对象之画笔CPen)VS2010/MFC编程入门之五十一(图形图像:GDI对象之画刷CBrush)第十部分:Ribbon界面开发VS2010/MFC编程入门之五十二(Ribbon界面开发:创建Ribbon样式的应用程序框架)VS2010/MFC编程入门之五十三(Ribbon界面开发:为Ribbon Bar添加控件)VS2010/MFC编程入门之五十四(Ribbon界面开发:使用更多控件并为控件添加消息处理函数)VS2010/MFC编程入门之前言鸡啄米的C++编程入门系列给大家讲了C++的编程入门知识,大家对C++语言在语法和设计思想上应该有了一定的了解了。
MFC中滚动条的实现MFC(Microsoft Foundation Class)是Microsoft提供的一个面向对象的C++框架,用于开发Windows应用程序。
在MFC中,滚动条是一种常见的用户界面控件,用于在窗口或对话框中浏览内容超过可见区域的内容,比如文本、图像、表格等。
本文将介绍如何在MFC中实现滚动条。
1.处理滚动条的消息在MFC框架下,处理滚动条的消息主要通过窗口类的消息映射机制来实现。
首先,在窗口类的头文件中添加对滚动条消息的处理函数声明,如下所示:```afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);```其中,OnHScroll处理水平方向的滚动消息,OnVScroll处理垂直方向的滚动消息。
然后,在窗口类的消息映射宏中添加对滚动条消息的映射,如下所示:```ON_WM_HSCROLLON_WM_VSCROLL接下来,在窗口类的cpp文件中实现相应的滚动条消息处理函数,如下所示:```void CMyWindow::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)//处理水平滚动条消息的代码void CMyWindow::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)//处理垂直滚动条消息的代码```在这两个函数中,可以通过nSBCode和nPos参数获取滚动条的当前状态和位置,从而进行相应的处理。
2.操作滚动条的相关函数在MFC中,可以使用CScrollBar类来操作滚动条。
首先,需要在窗口类的头文件中添加CScrollBar成员变量,如下所示:```CScrollBar m_scrollBar;```然后,在窗口类的创建函数中创建滚动条控件,如下所示:m_scrollBar.Create(WS_CHILD , WS_VISIBLE , SBS_HORZ,CRect(0, 0, 100, 20), this, IDC_SCROLLBAR);```其中,第一个参数指定滚动条的样式,包括水平或垂直样式、可见性等;第二个参数指定滚动条的位置和大小;第三个参数为滚动条所属的父窗口,即当前窗口类的实例;第四个参数为滚动条的ID。
MFC中Slider和Scroll Bar控件的使用在学习mfc的过程中,总是需要不断的接触新的东西,本人在编程序的过程中也是,那时就想做出滑动条,差了很多资料,做出来了,总结一下与大家共同分享。
Slider的使用。
先将一个slider拖入对话框内。
设置属性。
例如为IDC_SLIDER。
在classwizard里设置关联变量m_slider。
在相应dialog类中,oninitdialog函数中添加初始化信息。
(若无该函数则在view目录下classwizard中添加WM_INITDIALOG消息)m_slider.SetRange(0,100,TRUE); //范围0到100m_slider.SetTicFreq(10);//设置显示刻度的间隔m_slider.SetLineSize(10);//一行的大小,对应键盘的方向键m_slider.SetPos(20);//当前停留位置还可设置很多,具体参见CSliderCtrl百度百科,在此只罗列如上设置。
接着在classwizad中添加WM_HSCROLL消息,得到函数。
在函数中,得到当前滑动条位置并进行相应处理。
m_num得到当前位置,即可进行下一步。
Scroll Bar的使用。
先将一个Scroll Bar拖入对话框内。
设置属性。
例如为IDC_SCROLLBAR。
在classwizard里设置关联变量m_scrollbar。
在相应dialog类中,oninitdialog函数中添加初始化信息。
EnableScrollBar( ESB_ENABLE_BOTH);//使两端的箭头可用m_scrollbar.SetScrollRange(0,100);//设置范围0到100m_scrollbar.SetScrollPos(50);//设置当前位置还可设置很多,具体参见CScrollBar百度百科,在此只罗列如上设置。
接着在classwizad中添加WM_HSCROLL消息,得到函数。
一种美化控件滚动条(ScrollBar)的方法-VC知识库文章一种美化控件滚动条(ScrollBar)的方法作者:Nobita下载源代码摘要:本文采用“遮挡”方法对MFC控件中的滚动条(ScrollBar)进行了美化工作,即保留了滚动条的功能,又美化了界面关键字:滚动条(ScrollBar)一、说明我们大家对MFC控件本身的美化工作都比较熟悉了,这方面的文章也是比较多的。
但是对于控件中的滚动条美化,相关资料却比较少。
已有的实现采用的是禁用控件的滚动条,然后在原有的位置上重新绘制滚动条,为了实现滚动条的功能,需要在代码中进行一些较复杂的计算。
本文采用的“遮挡”方法只是单纯的对滚动条界面进行美化,而功能则保持原有的实现。
二、原理一个人要想不被人认出,除了整容还有什么办法?还可以采用戴面具挡脸的方法。
一般我们对MFC控件进行美化都是对比如WM_CTLCOLOR、WM_DRAWITEM之类的消息进行处理,这也相当于“整容”了。
滚动条只是作为控件的一部分没有相应的消息可以重写,所以本文设想做一个“面具”来遮挡滚动条,这样即可以保留滚动条的原有功能不变,又看到一个漂亮的“面具”。
三、实现“遮挡”方法的原理很简单,要想实现这个方法需要解决以下几个问题:1.“面具”的材料是什么?要想把一个控件中的滚动条挡住又不影响功能的使用,那就需要一个可以穿透消息的东西。
很简单,立刻想到了静态文本控件(CStatic)。
2.“面具”的形状是什么样的?Windows API函数:BOOL GetScrollBarInfo(HWND hwnd, LONG idObject, PSCROLLBARINFO psbi);参数psbi指向的SCROLLBARINFO结构体包含有具体的大小。
3.“面具”如何一直挂在滚动条上?这个问题是关键所在,不解决它一切免谈。
首先要让控件绘制时不去绘制滚动条的部分,这可以通过给控件设置WS_CLIPSIBLINGS属性实现。
MFC中滚动条控件的总结和实例1在MFC中滚动条对应CScrollBar类,它在MFC中的位置如下图所示。
2 CScrollBar常用的方法如下表所示。
(1)CScrollbar m_Scrollbar;(2)在设置滚动条控件时,要通过如下方法设置其范围CScrollBar::SetScrollRange()例如,设置滚动范围为-100到100的垂直滚动条m_Scrollbar.SetScrollRange(-100,100);(3)通过SetScrollPos()设置滚动块当前位置例如,滚动快的位置在-100到100的中间,即为0的位置m_Scrollbar.SetScrollPos(0);(4)通过GetScrollPos()得到当前滑块位置的值是数值型int i= m_Scrollbar.GetScrollPos()(5)滚动条5个消息:SB_THUMBTRACK: //拖动滑块SB_LINEDOWN: //单击滚动条向下的箭头SB_LINEUP: //单击滚动条向上的箭头SB_PAGEDOWN: //单击箭头与滚块之间的区域SB_PAGEUP: //单击箭头与滚块之间的区域3.滚动条实例BOOL CMyDlg::OnInitDialog(){ CDialog::OnInitDialog();……// TODO: Add extra initialization herem_Scrollbar.SetScrollRange(0,20);m_Scrollbar.SetScrollPos(10);char sPos[10];itoa(m_Scrollbar.GetScrollPos(),sPos,10); m_Edit.SetSel(0,-1);m_Edit.ReplaceSel(sPos);UpdateData(FALSE);return TRUE;}void CMyDlg::OnVScroll(……){ // TODO: Add your message handler code herechar sPos[10];int iNowPos;if(pScrollBar==&m_Scrollbar){switch(nSBCode){ case SB_THUMBTRACK: //拖动滑块m_Scrollbar.SetScrollPos(nPos);itoa(nPos,sPos,10);m_Edit.SetSel(0,-1);m_Edit.ReplaceSel(sPos);break;case SB_LINEDOWN: //单击滚动条向下的箭头iNowPos=m_Scrollbar.GetScrollPos();iNowPos=iNowPos+1;if(iNowPos>20)iNowPos=20;m_Scrollbar.SetScrollPos(iNowPos);itoa(m_Scrollbar.GetScrollPos(),sPos,10);m_Edit.SetSel(0,-1);m_Edit.ReplaceSel(sPos);break;case SB_LINEUP: //单击滚动条向上的箭头iNowPos=m_Scrollbar.GetScrollPos();iNowPos=iNowPos-1;if(iNowPos<0)iNowPos=0;m_Scrollbar.SetScrollPos(iNowPos);itoa(m_Scrollbar.GetScrollPos(),sPos,10);m_Edit.SetSel(0,-1);m_Edit.ReplaceSel(sPos);break;case SB_PAGEDOWN: //单击箭头与滚块之间的区域iNowPos=m_Scrollbar.GetScrollPos();iNowPos=iNowPos+3;if(iNowPos>20)iNowPos=20;m_Scrollbar.SetScrollPos(iNowPos);itoa(m_Scrollbar.GetScrollPos(),sPos,10);m_Edit.SetSel(0,-1);m_Edit.ReplaceSel(sPos);break;case SB_PAGEUP: //单击箭头与滚块之间的区域iNowPos=m_Scrollbar.GetScrollPos();iNowPos=iNowPos-3;if(iNowPos<0)iNowPos=0;m_Scrollbar.SetScrollPos(iNowPos);itoa(m_Scrollbar.GetScrollPos(),sPos,10);m_Edit.SetSel(0,-1);m_Edit.ReplaceSel(sPos);break;}//case}//ifCDialog::OnVScroll(nSBCode, nPos, pScrollBar); }。
mfc基本控件
在MFC(Microsoft Foundation Classes)中,有许多基本的控件可用于创建用户界面。
以下列出了一些常见的MFC基本控件:
1. CButton:按钮控件,用于响应用户的点击操作。
2. CEdit:编辑框控件,用于显示和编辑文本。
3. CStatic:静态文本控件,用于显示静态文本内容。
4. CListBox:列表框控件,用于显示列表并允许用户选择其中的项。
5. CComboBox:组合框控件,结合了文本框和下拉列表框的功能。
6. CSliderCtrl:滑块控件,用于表示一个范围,用户可以通过拖动滑块选择值。
7. CProgressCtrl:进度条控件,用于显示任务或操作的进度。
8. CScrollBar:滚动条控件,用于使用滚动条浏览内容。
9. CTreeViewCtrl:树视图控件,用于显示树形结构的数据。
10. CListViewCtrl:列表视图控件,用于以表格形式显示数据。
这只是一些常见的MFC基本控件示例,MFC还提供了其他许多控件和自定义控件的扩展功能。
通过使用这些基本控件,您可以构建丰富的用户界面并与用户进行交互。