VC 对话框自带滚动条的使用
mfc dialog scrollbar 用法
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函数,通过获取滚动条的当前位置和消息类型,实现了对滚动条消息的处理。
VC 对话框中的滚动条
要创建带垂直滚动条的resizeable 对话框,执行以下步骤:1.使用应用程序向导创建Microsoft 基础类(MFC) 基于对话框的应用程序。
2.在资源编辑器中添加到对话框的资源模板的某些控件属性对话框中选择垂直滚动,然后选择Resizing作为边框样式。
3.添加以下受保护的对话框类的成员变量:4.int m_nCurHeight;5.int m_nScrollPos;6.CRect m_rect;用于m_nScrollPos存储当前垂直滚动条的位置。
存储对话框框的当前高度和处理OnVScroll方法中滚动,请使用m_nCurHeight。
7.若要将原始的窗口大小将下行添加到OnInitDialog方法:8.GetWindowRect(m_rect);9.m_nScrollPos = 0;10.将消息处理程序添加到OnSize方法设置滚动条区域WM_SIZE 消息。
将范围设置为0,如果大小增加到原有大小超过11.void CTestDlg::OnSize(UINT nType, int cx, int cy)12.{13.CDialog::OnSize(nType, cx, cy);14.15.// TODO: Add your message handler code here.16.m_nCurHeight = cy;17.int nScrollMax;18.if (cy < m_rect.Height())19.{20. nScrollMax = m_rect.Height() - cy;21.}22.else23. nScrollMax = 0;24.25.SCROLLINFO si;26.si.cbSize = sizeof(SCROLLINFO);27.si.fMask = SIF_ALL; // SIF_ALL = SIF_PAGE |SIF_RANGE | SIF_POS;28.si.nMin = 0;29.si.nMax = nScrollMax;30.si.nPage = si.nMax/10;31.si.nPos = 0;32. SetScrollInfo(SB_VERT, &si, TRUE);33.}34.将消息处理程序为WM_VSCROLL 消息添加到OnVScroll方法:35.void CTestDlg::OnVScroll(UINT nSBCode, UINT nPos,CScrollBar* pScrollBar)36.{37.// TODO: Add your message handler code hereand/or call default.38.int nDelta;39.int nMaxPos = m_rect.Height() -m_nCurHeight;40.41.switch (nSBCode)42.{43.case SB_LINEDOWN:44.if (m_nScrollPos >= nMaxPos)45.return;46.nDelta =min(nMaxPos/100,nMaxPos-m_nScrollPos);47.break;48.49.case SB_LINEUP:50.if (m_nScrollPos <= 0)51.return;52.nDelta =-min(nMaxPos/100,m_nScrollPos);53.break;54.55. case SB_PAGEDOWN:56.if (m_nScrollPos >= nMaxPos)57.return;58.nDelta =min(nMaxPos/10,nMaxPos-m_nScrollPos);59.break;60.61.case SB_THUMBPOSITION:62.nDelta = (int)nPos - m_nScrollPos;63.break;64.65.case SB_PAGEUP:66.if (m_nScrollPos <= 0)67.return;68.nDelta =-min(nMaxPos/10,m_nScrollPos);69.break;70.71. default:72.return;73.}74.m_nScrollPos += nDelta;75.SetScrollPos(SB_VERT,m_nScrollPos,TRUE);76.ScrollWindow(0,-nDelta);77.CDialog::OnVScroll(nSBCode, nPos,pScrollBar);78.}79.生成并运行该应用程序。
进展条、滚动条和滑动条
进展条、滚动条和滑动条一、实验目的:设计一个对话框应用程序Ex_Color,其运行结果如图所示。
操作进展条、滚动条和滑动条控件可以调整RGB颜色的3个颜色分量:R(红色分量)G(绿色分量)B(蓝色分量),并根据用户指定的颜色填充控件。
二、实验环境:一台PC机,Windows 操作系统,Visual C++6.0开发环境。
三、实验步骤:1.创建工作文件夹创建工作文件夹“E:\Visual C++\吴文燕”文件中创建一个新的子文件“实验11”2.设计对话框(1)创建一个默认的基于对话框应用项目Ex_Input,在“新建”对话框中添加项目文件夹定位到“E:\Visual C++\吴文燕\实验11”(2)打开的对话框资源模板中,将对话框的标题属性改为“颜色控件属性”,删除“取消”按钮,并将“确定”按钮的标题属性改为“退出”(3)显示对话框网络,调整对话框的大小,参照图所示控件的布局,在对话框中添加相应的控件,调整控件的位置。
(4)打开MFC ClassWizard,在MFC ClassWizard的Member Variables页面中,确定Class name中是否已选择了CEx_ColorDlg,选中所需的控件ID标识符,双击或单击AddVariables按钮。
依次为控件添加成员变量。
3. 添加成员函数Draw(1)展开项目工作区窗口Class View中的CEx_ColorDlg类的所有结点(2)用鼠标右键单击CEx_ColorDlg类结点,从弹出的快捷菜单中选择“Add Member Function(添加成员变量)”,添加void Draw(UINT nID)这个成员函数(3)在Draw函数中添加代码4.添加初始化代码(1)在CEx_ColorDlg::OnInitDialog中添加代码(3)编译运行5. 完善代码(1)用MFC ClassWizard在CEx_ColorDlg类中映射IDC_EDIT_R, IDC_EDIT_G, IDC_EDIT_B按钮控件的EN_CHANGE消息,并添加代码(2)用MFC ClassWizard在CEx_ColorDlg类中映射IDC_SPIN按钮控件的UND_DELTAPOS消息,并添加代码(3)用MFC ClassWizard在CEx_ColorDlg类中添加映射WM_HSCROLL消息映射,并添加代码(4)编译运行并测试四、实验结果:五、思考题:1、在Ex_Color的基础上,若添加设置对话框的背景色功能,则应该如何添加代码?实验结果截图如下所示2、试述当单击旋转按钮控件的向上箭头时,流程是怎样的?答:当我们单击选择按钮的向上箭头时,根据m_nBValue+=pNMUpDown->iDelta这个语句变化而使得进展条随之变长,最大只到255。
MFC对话框设置滚动条
对话框设置滚动条1.在OnInitDialog()函数中,添加以下代码//在OnInitDialog里添加如下代码为对话框创建一个垂直滚动条和水平滚动条//获取窗口的大小CRect rc;GetClientRect(&rc);const SIZE sz = { rc.right - rc.left, rc.bottom - rc.top };//垂直滚动条SCROLLINFO vsi;vsi.cbSize = sizeof(SCROLLINFO);//必须vsi.fMask = SIF_PAGE | SIF_POS | SIF_RANGE;vsi.nPos = 1;//滚动条的初始位置vsi.nMin = 0;//滚动条所能滚动的最小值vsi.nMax = sz.cy+500; //滚动条所能滚动的最大值,可以根据实际情况设置vsi.nPage = sz.cy;//一页的大小SetScrollInfo(SB_VERT, &vsi, FALSE); //此函数将产生一个垂直滚动条//水平滚动条SCROLLINFO hsi;hsi.cbSize = sizeof(SCROLLINFO);//必须hsi.fMask = SIF_PAGE | SIF_POS | SIF_RANGE;hsi.nPos = 1;//滚动条的初始位置hsi.nMin = 0;//滚动条所能滚动的最小值hsi.nMax = sz.cx+100; //滚动条所能滚动的最大值,可以根据实际情况设置hsi.nPage = sz.cx;//一页的大小SetScrollInfo(SB_HORZ, &hsi, FALSE); //此函数将产生一个水平滚动条2.在对话框头文件(.h)中加入以下函数//获取滚动条的位置//parameters://int nBar -- 滚动条类型(垂直或者水平),垂直为SB_VERT,水平为SB_HORZ//UINT nSBCode -- 滚动条触发的消息//return values -- 返回滚动条的位置int GetScrollPos(int nBar, UINT nSBCode);//根据滚动条的位置滚动界面//parameters://int nBar -- 滚动条类型(垂直或者水平),垂直为SB_VERT,水平为SB_HORZ//int nPos -- 滚动条的位置void ScrollClient(int nBar, int nPos);//设置滚动条滚动,以及滚动的时候界面跟着滚动//parameters://int nBar -- 滚动条类型(垂直或者水平),垂直为SB_VERT,水平为SB_HORZ//UINT nSBCode -- 滚动条触发的消息void Scroll(int nBar, UINT nSBCode);3.在对话框源文件(.cpp)中实现以下函数//获取滚动条的位置//parameters://int nBar -- 滚动条类型(垂直或者水平),垂直为SB_VERT,水平为SB_HORZ //UINT nSBCode -- 滚动条触发的消息//return values -- 返回滚动条的位置int CScrollBarDlg::GetScrollPos(int nBar, UINT nSBCode){SCROLLINFO si;si.cbSize = sizeof(SCROLLINFO);si.fMask = SIF_PAGE | SIF_POS | SIF_RANGE | SIF_TRACKPOS;GetScrollInfo(nBar, &si);const int minPos = si.nMin;const int maxPos = si.nMax - (si.nPage - 1);int result = -1;if (SB_VERT == nBar){//垂直滚动条的消息switch(nSBCode){case SB_LINEUP /*SB_LINELEFT*/:result = max(si.nPos - 5, minPos);break;case SB_LINEDOWN /*SB_LINERIGHT*/:result = min(si.nPos + 5, maxPos);break;case SB_PAGEUP /*SB_PAGELEFT*/:result = max(si.nPos - (int)si.nPage, minPos);break;case SB_PAGEDOWN /*SB_PAGERIGHT*/:result = min(si.nPos + (int)si.nPage, maxPos);break;case SB_THUMBPOSITION:// do nothingbreak;case SB_THUMBTRACK:result = si.nTrackPos;break;case SB_TOP /*SB_LEFT*/:result = minPos;break;case SB_BOTTOM /*SB_RIGHT*/:result = maxPos;break;case SB_ENDSCROLL:// do nothingbreak;}}else if (SB_HORZ == nBar){//水平滚动条的消息switch(nSBCode){case SB_LINELEFT:result = max(si.nPos - 5, minPos);break;case SB_LINERIGHT:result = min(si.nPos + 5, maxPos);break;case SB_PAGELEFT:result = max(si.nPos - (int)si.nPage, minPos);break;case SB_PAGERIGHT:result = min(si.nPos + (int)si.nPage, maxPos);break;case SB_THUMBPOSITION:// do nothingbreak;case SB_THUMBTRACK:result = si.nTrackPos;break;case SB_LEFT:result = minPos;break;case SB_RIGHT:result = maxPos;break;case SB_ENDSCROLL:// do nothingbreak;}}return result;}//根据滚动条的位置滚动界面//parameters://int nBar -- 滚动条类型(垂直或者水平),垂直为SB_VERT,水平为SB_HORZ //int nPos -- 滚动条的位置void CScrollBarDlg::ScrollClient(int nBar, int nPos){static int s_prevx = 1;static int s_prevy = 1;int cx = 0;int cy = 0;int& deltay = cy;int& prevy = s_prevy;int& deltax = cx;int& prevx = s_prevx;if (SB_VERT == nBar){//垂直滚动deltay = prevy - nPos;prevy = nPos;}else if (SB_HORZ == nBar){//水平滚动deltax = prevx - nPos;prevx = nPos;}if(cx || cy){ScrollWindow(cx, cy, NULL, NULL);}}//设置滚动条滚动,以及滚动的时候界面跟着滚动//parameters://int nBar -- 滚动条类型(垂直或者水平),垂直为SB_VERT,水平为SB_HORZ//UINT nSBCode -- 滚动条触发的消息void CScrollBarDlg::Scroll(int nBar, UINT nSBCode){const int scrollPos = GetScrollPos(nBar,nSBCode);if(scrollPos == -1)return;SetScrollPos(nBar, scrollPos, TRUE);ScrollClient(nBar, scrollPos);}4.添加垂直滚动条消息(WV_VSCROLL)响应函数OnVScroll和在函数中加入以下代码void CScrollBarDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar){// TODO: Add your message handler code here and/or call defaultScroll(SB_VERT,nSBCode);//添加CDialog::OnVScroll(nSBCode, nPos, pScrollBar);}5.添加水平滚动条消息(WV_HSCROLL)响应函数和在函数中加入以下代码void CScrollBarDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar){// TODO: Add your message handler code here and/or call defaultScroll(SB_HORZ,nSBCode); //添加CDialog::OnHScroll(nSBCode, nPos, pScrollBar);}。
VS2010 C++学习(1):滚动条的设计总结
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);函数功能:该函数设置滚动条参数,包括滚动位置的最大值和最小值,页面大小,滚动按钮的位置。
浅谈VC_中滚动条的编程
AA2!4",MAN KMA; / / 定义视图变量
(,7!’) ; / / 实例化 KMA("48 AA2!4",MA (KMA ) ; / / 调用该函数获得绘图 E"&.4K-.4MA 映象模式 (R41,) ; / / 得到屏幕剪辑 区 KMAOPQ4,A2!K3$B 域 图S
水平滑块大 小反映水平 图形大小
("G"J FG" , "@%)=<K=E :&)A "??()*+IID=@%*F6%*G"
种是自定义滚动条,即在程序中自己定义滚动条 的大小与放置位置, 然后设置它的滚动参数; 另一 种是利用系统滚动条来设置滚动参数。这两种方 法在不同的绘图方式(指直接屏幕绘图与二次内 存缓冲绘图) 下有各自的使用优点。 第一种用在直 接屏幕绘图时很方便,通过参数定义能够方便地 控制滚动参数, 形象地设置屏幕滚动范围 (指屏幕 有一部分可不参与视图滚动,如图形的纵坐标和 横坐标所在的屏幕区域) , 还可经专门的滚动参数 定义设置滚动滑块的大小来反映整个视图大小的 变化等, 而且该滚动条在非像素 (即非 //01231 图形映象模式)绘图时能用逻辑坐标方便的设置 滚动参数;第二种方法用在内存绘图时能够简单 的实现浏览整个视图的功能,不需自定义滚动条 放置的位置与大小, 只需设置滚动参数即可。 因内 存绘图无闪屏现象出现,通过设置计时器还可以 流畅的滚动播放视图,编程中发现该滚动条只接 受设备坐标参数。下面分别讨论这两种滚动条的 编程方法。
系统滚动条编程
上面自定义滚动条在屏幕直接绘图时使用很
的终止位置 (R41,) ; / / 将区域变量转为设 KMAOP;&,$M& 备坐标 (R41,%24#,, R41,%X$,\ )*7+1.$223-.%Z$04[!"@$8 () , ; / / 放置水平条 ]] ) ,$), R41,%[!@,7
VC编辑框(EDIT)的自动换行、自动滚屏 、到指定行数自动清空
VC编辑框(EDIT)的自动换行、自动滚屏、到指定行数自动清空2008-05-19 09:03:15| 分类:VC|字号订阅在自动换行设置的时候,要在EDIT控件的属性中选中"multiline"的属性和Auto_HScroll、Vertical scroll。
.经过多次测试,总结出VC编辑框(EDIT)的自动换行与自动滚屏的方法。
方法一:(当EDIT映射到一CString时)m_String = m_String + sNewString + "\r\n" //自动换行(其中m_String是EDIT筐所关联的CString对象)UpdateData(false);此法只能做到自动换行,不会自动滚屏到最后一行。
方法二:(当EDIT映射到一EDIT时)m_Edit.SetSel(-1, -1); //自动滚屏(其中m_Edit是EDIT筐所关联的EDIT控制对象)m_Edit.ReplaceSel(sNewString+"\r\n"); //自动换行此法可以做到自动换行,并自动滚屏到最后一行。
以上,m_String、m_Edit.分别为给编辑框添加的成员变量;sNewString 为要显示的字符串方法三:到200行时将所有内容清空int iLineNum=m_EditLog.GetLineCount();if(iLineNum<=200){m_EditLog.SetSel(-1, -1);m_EditLog.ReplaceSel(str+"\r\n\r\n");}else{m_EditLog.SetSel(0, -1);m_EditLog.Clear();}取自msdnvoid SetSel(int nStartChar,int nEndChar,BOOL bNoScroll =FALSE);ParametersnStartCharSpecifies the starting position. If nStartChar is 0 and nEndChar is –1, all the text in the edit control is selected. If nStartChar is –1, any current selection is removed.nEndCharSpecifies the ending position.文章来源:/scq2099yt/archive/2008/03/15/2185555.aspx。
CScrollView的使用
CScrollView的使用CScrollView这个类用于需要滚动条的场合。
我们可以直接用向导生成,在选择视图类的基类时选择CScrollView即可。
如果我们的程序原来用的是CView类,此时想改成CScrollView类,需要稍微做一下修改。
CView-->CScrollView利用ClassWizard,在CxxView類別中,建立OnInitialUpdate( ) member functionvoid CxxView::OnInitialUpdate(){CScrollView::OnInitialUpdate();SetScrollSizes(MM_TEXT, CSize( 800, 600 ) );}cpp中:IMPLEMENT_DYNCREATE(CxxView, CScrollView)BEGIN_MESSAGE_MAP(CxxView, CScrollView)如何在对话框中使用CScrollview类( 转)CRect rectWindow;GetWindowRect(rectWindow);CRuntimeClass *pViewClass = RUNTIME_CLASS(CMyScrollView);CCreateContext * pContext;pContext = new CCreateContext;pContext->m_pCurrentDoc = NULL;pContext->m_pCurrentFrame = NULL;pContext->m_pLastView = NULL;pContext->m_pNewDocTemplate =NULL;pContext->m_pNewViewClass = pViewClass;CWnd * pWnd = NULL;pWnd = DYNAMIC_DOWNCAST(CWnd,pViewClass->CreateObject());pWnd ->Create(NULL,NULL,AFX_WS_DEFAULT_VIEW,CRect(0,0,0,0),this,0,pContext); delete pContext;CMyScrollView * pScollView = DYNAMIC_DOWNCAST(CMyScrollView,pWnd); pScollView->SetScrollSizes( MM_TEXT, CSize(rectWindow.right - rectWindow.left-20, rectWindow.bottom -rectWindow.top-100) );pScollView->MoveWindow(rectWindow.left,rectWindow.top,rectWindow.right - rectWindow.left-20,rectWindow.bottom -rectWindow.top-100,TRUE);在VC中如何使用CScrollView类,即让视图具有滚动的功能;方法一:新生成的视图类,必须继承CScrollView类,如下所示:class CImageProcessingView : public CScrollView{……;}然后在C*****View中,修改OnInitialUpdate()成员的代码,其中要进行矩形长、宽的设置,如下:sizeTotal.cx = sizeTotal.cy = 4000;这边要注意的是,其值不能太小,若太小了,在显示图像时,当图像的规格大小所设置的值时,便无法实现滚动的功能。
vc3第13章 滚动条类及其应用 优质课件
return TRUE;
//return TRUE unless you set the focus to a control
}
(3)给滚动条消息添加代码
void CSCROLLBARDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
获得滚动条当前的位置
GetScrollRange()
获得制定滚动条的当前最大和最小滚动位置
SetScrollInfo()
设置滚动条的消息
SetScrollPos()
设置滚动块当前的位置
SetScrollRange()
设置制定滚动条的最大和最小滚动位置
ShowScrollBar()
显示或隐藏滚动条
2.CScrollBar类的创建与初始化
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;
CWinForm滚动条控件应用简介
为了程序的需要我定义了几个变量:private int m_VBarWidth;private int m_HBarHeight;private VScrollBar m_VBar;private HScrollBar m_HBar;接下来,给变量们做了初始值或初始设置,代码放到构造函数里了:this.m_VBarWidth = SystemInformation.VerticalScrollBarWidth;this.m_HBarHeight = SystemInformation.HorizontalScrollBarHeight;this.SuspendLayout();this.m_VBar = new VScrollBar();this.m_HBar = new HScrollBar();this.setScrllBars();this.m_VBar.Scroll += new ScrollEventHandler(this.VBar_Scroll);this.m_HBar.Scroll += new ScrollEventHandler(this.HBar_Scroll);;;this.ResumeLayout(true);里面有一个函数setScrllBars();接下来会说到,只说这些代码的意图是向当前窗体或控件里添加了两个滚动条并对其有些设置而已。
实际上所有的代码我是写到一个从Control继承下来的类,这里提到的所有代码几乎都在这个类里完成。
我们不防设置一个虚拟的显示大小,比如300×200的大小,我们在控件里通过滚动条就滚动这一个大小的区域,这里我们会想,如果控件的可见区域大于这个300×200的大小,滚动条是没有必要显示出来的,如果控件可见区域要是小于这个区域了,滚动条要可见了,有一个问题要说了,有一个可能的情况就是比如本来水平的滚动条不可见,但是因为垂直的可见了使得控件的水平可见区减小了,这个情况可能引起水平滚动条的可见,若水平滚动条可见又使得垂直方向的可见区域减小又会反向影响到了垂直滚动条的值。
VC 对话框自带滚动条的使用
VC对话框自带滚动条的使用一,使用对话框窗口自带的滚动条,在属性页面中设置即可,如下二,OnInitDialog()函数中,添加如下滚动条初始化语句SCROLLINFO vinfo;vinfo.cbSize =sizeof(vinfo);vinfo.fMask =SIF_ALL;vinfo.nPage =50;//滚动块自身的长短,通常有如下关系:其长度/滚动条长度(含两个箭头)=nPage/(nMax+2),//另外nPage取值-1时,滚动条会不见了。
vinfo.nMax =600;//滚动条所能滚动的最大值vinfo.nMin=0;//滚动条所能滚动的最小值vinfo.nTrackPos =0;SetScrollInfo(SB_VERT,&vinfo);//即使上述步骤一不做,使用此条语句也可以显示滚动条三,添加相应的WM_VSCROLL函数void CMy1d0Dlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) {// TODO: Add your message handler code here and/or call defaultSCROLLINFO scrollinfo;GetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);switch (nSBCode){case SB_BOTTOM: //滑块滚动到最底部ScrollWindow(0,(scrollinfo.nPos-scrollinfo.nMax)*10); //滚动屏幕scrollinfo.nPos = scrollinfo.nMax; //设定滑块新位置SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL); //更新滑块位置break;case SB_TOP: //滑块滚动到最顶部ScrollWindow(0,(scrollinfo.nPos-scrollinfo.nMin)*10);scrollinfo.nPos = scrollinfo.nMin;SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);break;case SB_LINEUP: //单击上箭头scrollinfo.nPos -= 1;if (scrollinfo.nPos<scrollinfo.nMin){scrollinfo.nPos = scrollinfo.nMin;break;}SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);ScrollWindow(0,10);break;case SB_LINEDOWN: //单击下箭头scrollinfo.nPos += 1;if (scrollinfo.nPos>scrollinfo.nMax){scrollinfo.nPos = scrollinfo.nMax;break;}SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);ScrollWindow(0,-10);break;case SB_PAGEUP: //单击滑块上方空白区域scrollinfo.nPos -= 5;if (scrollinfo.nPos<scrollinfo.nMin){scrollinfo.nPos = scrollinfo.nMin;break;}SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);ScrollWindow(0,10*5);break;case SB_PAGEDOWN: //单击滑块下方空白区域scrollinfo.nPos += 5;if (scrollinfo.nPos>scrollinfo.nMax){scrollinfo.nPos = scrollinfo.nMax;break;}SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);ScrollWindow(0,-10*5);break;case SB_ENDSCROLL: //鼠标离开滑块,结束滑块拖动// MessageBox("SB_ENDSCROLL");break;case SB_THUMBPOSITION:// ScrollWindow(0,(scrollinfo.nPos-nPos)*10);// scrollinfo.nPos = nPos;// SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);break;case SB_THUMBTRACK: //拖动滑块ScrollWindow(0,(scrollinfo.nPos-nPos)*10);scrollinfo.nPos = nPos;SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);break;}CDialog::OnVScroll(nSBCode, nPos, pScrollBar);}。
对话框自带滚动条的使用
对话框自带滚动条的使用在图形用户界面(GUI)设计中,对话框是一种常见的界面元素,用于和用户进行交互。
有时候,对话框中的内容可能会过长,超过了对话框的可见区域,这时就需要使用滚动条来浏览和查看全部内容。
本文将介绍如何使用对话框自带滚动条来处理这种情况。
首先,让我们了解一下对话框自带滚动条的工作原理。
通常,对话框的主体部分是一个面板或容器,称为客户区域(Client Area)。
对话框自带的滚动条实际上是一个控件,也就是一个可视化的界面元素,用于控制客户区域的滚动。
滚动条包括一个滑块和箭头按钮,通过拖动滑块或点击箭头按钮来改变客户区域的显示内容。
下面是使用滚动条的步骤:第二步:在对话框类中声明一个成员变量来引用滚动条控件的实例。
这个成员变量将用于与滚动条进行交互和控制。
第三步:在对话框类的OnInitDialog(函数中,将滚动条控件与对话框的客户区域关联起来。
可以使用相应的函数来实现这个关联,例如MFC 中的CScrollBar类的SetScrollRange(和SetScrollPos(函数,或Windows API中的SetScrollRange(和SetScrollPos(函数。
第四步:根据滚动条的位置和大小,对话框类可以动态改变客户区域的显示内容。
例如,当滚动条向上滚动时,对话框类可以显示客户区域的上一部分内容;当滚动条向下滚动时,对话框类可以显示客户区域的下一部分内容。
第五步:根据需要,可以自定义滚动条的外观和行为。
例如,可以设置滚动条的初始位置、滚动步长、滑块大小等。
下面是一个使用MFC和CScrollBar类来创建对话框自带滚动条的示例:首先在对话框资源上创建一个垂直滚动条控件,将其ID设置为IDC_SCROLLBAR_VERTICAL。
在对话框类的头文件中,声明一个成员变量用于引用滚动条控件的实例:```cppprotected:CScrollBar m_ScrollBarVertical;```在对话框类的OnInitDialog(函数中,将滚动条控件与客户区域关联起来,并设置滚动条的初始位置和范围:```cppBOOL CMyDialog::OnInitDialog//...//获取滚动条控件的指针CScrollBar* pScrollBarVertical =(CScrollBar*)GetDlgItem(IDC_SCROLLBAR_VERTICAL);//将滚动条控件与客户区域关联起来m_ScrollBarVertical.Attach(pScrollBarVertical->m_hWnd);//设置滚动条的初始位置和范围m_ScrollBarVertical.SetScrollRange(0, 100);m_ScrollBarVertical.SetScrollPos(0);//...return TRUE;```在对话框类的OnVScroll(函数中```cppvoid CMyDialog::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)//判断滚动条的消息类型if (pScrollBar == &m_ScrollBarVertical)//获取滚动条的当前位置int nScrollPos = m_ScrollBarVertical.GetScrollPos(;//根据滚动条的当前位置来改变客户区域的显示内容//...}//...CDialogEx::OnVScroll(nSBCode, nPos, pScrollBar);```通过以上步骤,我们就可以在对话框中实现自带滚动条的功能。
VC对话框自带滚动条的使用
V C对话框自带滚动条的使用Revised by Chen Zhen in 2021VC对话框自带滚动条的使用一,使用对话框窗口自带的滚动条,在属性页面中设置即可,如下二,OnInitDialog()函数中,添加如下滚动条初始化语句SCROLLINFO vinfo;=sizeof(vinfo);=SIF_ALL;=50;//滚动块自身的长短,通常有如下关系:其长度/滚动条长度(含两个箭头)=nPage/(nMax+2),//另外nPage取值-1时,滚动条会不见了。
=600;//滚动条所能滚动的最大值=0;//滚动条所能滚动的最小值=0;SetScrollInfo(SB_VERT,&vinfo);//即使上述步骤一不做,使用此条语句也可以显示滚动条三,添加相应的WM_VSCROLL函数void CMy1d0Dlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar){// TODO: Add your message handler code here and/or call defaultSCROLLINFO scrollinfo;GetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);switch (nSBCode){case SB_BOTTOM: //滑块滚动到最底部ScrollWindow(0, //滚动屏幕= ; //设定滑块新位置SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL); //更新滑块位置break;case SB_TOP: //滑块滚动到最顶部ScrollWindow(0,= ;SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);break;case SB_LINEUP: //单击上箭头-= 1;if <{= ;break;}SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);ScrollWindow(0,10);break;case SB_LINEDOWN: //单击下箭头+= 1;if >{= ;break;}SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);ScrollWindow(0,-10);break;case SB_PAGEUP: //单击滑块上方空白区域 -= 5;if <{= ;break;}SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);ScrollWindow(0,10*5);break;case SB_PAGEDOWN: //单击滑块下方空白区域 += 5;if >{= ;break;}SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);ScrollWindow(0,-10*5);break;case SB_ENDSCROLL: //鼠标离开滑块,结束滑块拖动// MessageBox("SB_ENDSCROLL");break;case SB_THUMBPOSITION:// ScrollWindow(0,*10);// = nPos;// SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);break;case SB_THUMBTRACK: //拖动滑块ScrollWindow(0,*10);= nPos;SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);break;}CDialog::OnVScroll(nSBCode, nPos, pScrollBar);}。
mfc中Slider 和 Scroll Bar控件使用
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消息,得到函数。
滑动条控件(CScrollBar)的简单详细的方法
1 VC++6.0下新建一个基本对话框的工程,往对话框中添加一个水平滑动条控件和一个编辑框控件,如下图所示:为水平滑动条关联一个CScrollBar类型的变量m_scroll,为编辑框关联一个int类型的变量m_show.2在初始化函数OnInitDialog()中对水平滑动条的位置和编辑框进行初始化: m_scroll.SetScrollRange(0,100);//水平滑动条范围设置为0到100m_scroll.SetScrollPos(10); //水平滑动条初始位置设置为10m_show=10;//编辑框中初始显示为10UpdateData(FALSE);编译运行后,如下图所示:3添加消息WM_HSCROLL的响应函数,添加如下代码:OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar){int position=m_scroll.GetScrollPos();//获取水平滑动条的位置switch(nSBCode)//水平滑动条的不同消息响应{case SB_LINELEFT://向左滚动一行position--;break;case SB_LINERIGHT://向右滚动一行position++;break;case SB_PAGELEFT: //向左滚动一页position-=10;break;case SB_PAGERIGHT: //向右滚动一页position+=10;break;case SB_THUMBTRACK://拖动滑动块position=nPos;//这里的nPos就是函数OnHScroll()的第2个参数break;case SB_LEFT://移动到最左边position=0;break;case SB_RIGHT://移动到最右边position=100;break;}if(position>100) position=100;if(position<0) position=0;m_scroll.SetScrollPos(position);//根据position的值来设定滑动块的位置m_show=position;//在编辑框中显示position的值UpdateData(FALSE);} 编译运行即可在编辑框中显示滑动块所在的位置了.运行后如下图:。
VC++常用控件的使用(4)
教案2007 ~2008 学年第一学期主讲教师课程名称面向对象程序设计(VC++)课程类别专业基础课学时及学分80、4授课班级使用教材VC++的使用及面向对象软件工程实例分析系(院、部)教研室(实验室) 计算机应用教研室课时授课计划课次序号:一、课题ch37~3.9 常用控件——进度条、微调控件、滑动条、滚动条的使用二、课型:讲授三、目的要求:1、熟悉这四种相近的控件的功能与应用区别2、掌握四种控件的使用方法3、学会使用定时器四、重点、难点:控件的使用是重点,其中滚动条的使用较复杂一些,是一个难点。
五、教学方法及手段:结合实例讲解控件的功能与简单应用,然后总结控件的消息和主要操作。
六、参考资料:《面向对象程序设计与VC++实践》,揣锦华编著,西安电子科技大学出版社,第10章《VC++使用教程(第2版)》,郑阿奇等编著,电子工业出版社,第5章七、作业:(1)完成思考题(2)习题3.10八、授课记录:九、授课效果分析:十、教学进程(教学内容、教学环节及时间分配等)1、复习列表框和组合框的功能与使用方法的异同点。
2、导入课题进度条用于在一个冗长的操作中给用户一个可视的进度窗口;微调控件用于与编辑框控件一起方便用户输入数字;滑动条常用于在一个范围内通过滑块的移动选择一个值,滚动条用于选择某个范围内的一个值。
3、教学内容ch3.7 进度条一般用于输出某个操作的当前进度情况。
进度调控件类:CprogressCtrl基本操作:见表3.28SetRange():设置进度条的范围;GetRange():获取范围SetPos():设置进度条的当前位置; GetPos():获取单前位置SetStep():设置每一步的增量SetIt():进度条增加一步应用:通过进度条对应的控件变量的成员函数GetPos()函数取得进度条的当前值。
例1:进度条的范围设置为0~100,单击“自动”按钮,启动定时器,以后每隔0.1s 进度条推进一步。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VC对话框自带滚动条的使用
一,使用对话框窗口自带的滚动条,在属性页面中设置即可,如下
二,OnInitDialog()函数中,添加如下滚动条初始化语句
SCROLLINFO vinfo;
vinfo.cbSize =sizeof(vinfo);
vinfo.fMask =SIF_ALL;
vinfo.nPage =50;//滚动块自身的长短,通常有如下关系:其长度/滚动条长度(含两个箭头)=nPage/(nMax+2),//另外nPage取值-1时,滚动条会不见了。
vinfo.nMax =600;//滚动条所能滚动的最大值
vinfo.nMin=0;//滚动条所能滚动的最小值
vinfo.nTrackPos =0;
SetScrollInfo(SB_VERT,&vinfo);//即使上述步骤一不做,使用此条语句也可以显示滚动条
三,添加相应的WM_VSCROLL函数
void CMy1d0Dlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) {
// TODO: Add your message handler code here and/or call default
SCROLLINFO scrollinfo;
GetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
switch (nSBCode)
{
case SB_BOTTOM: //滑块滚动到最底部
ScrollWindow(0,(scrollinfo.nPos-scrollinfo.nMax)*10); //滚动屏幕
scrollinfo.nPos = scrollinfo.nMax; //设定滑块新位置
SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL); //更新滑块位置
break;
case SB_TOP: //滑块滚动到最顶部
ScrollWindow(0,(scrollinfo.nPos-scrollinfo.nMin)*10);
scrollinfo.nPos = scrollinfo.nMin;
SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
break;
case SB_LINEUP: //单击上箭头
scrollinfo.nPos -= 1;
if (scrollinfo.nPos<scrollinfo.nMin)
{
scrollinfo.nPos = scrollinfo.nMin;
break;
}
SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
ScrollWindow(0,10);
break;
case SB_LINEDOWN: //单击下箭头
scrollinfo.nPos += 1;
if (scrollinfo.nPos>scrollinfo.nMax)
{
scrollinfo.nPos = scrollinfo.nMax;
break;
}
SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
ScrollWindow(0,-10);
break;
case SB_PAGEUP: //单击滑块上方空白区域
scrollinfo.nPos -= 5;
if (scrollinfo.nPos<scrollinfo.nMin)
{
scrollinfo.nPos = scrollinfo.nMin;
break;
}
SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
ScrollWindow(0,10*5);
break;
case SB_PAGEDOWN: //单击滑块下方空白区域
scrollinfo.nPos += 5;
if (scrollinfo.nPos>scrollinfo.nMax)
{
scrollinfo.nPos = scrollinfo.nMax;
break;
}
SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
ScrollWindow(0,-10*5);
break;
case SB_ENDSCROLL: //鼠标离开滑块,结束滑块拖动// MessageBox("SB_ENDSCROLL");
break;
case SB_THUMBPOSITION:
// ScrollWindow(0,(scrollinfo.nPos-nPos)*10);
// scrollinfo.nPos = nPos;
// SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
break;
case SB_THUMBTRACK: //拖动滑块
ScrollWindow(0,(scrollinfo.nPos-nPos)*10);
scrollinfo.nPos = nPos;
SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
break;
}
CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}。