首页编程mfc进度条?怎样在mfc列表控件中加入进度条

mfc进度条?怎样在mfc列表控件中加入进度条

编程之家2023-11-01117次浏览

亲爱的读者们,你是否对mfc进度条和怎样在mfc列表控件中加入进度条的相关问题感到困惑?别担心,今天我将为你解答这些问题,让你对此有更清晰的认识。

mfc进度条?怎样在mfc列表控件中加入进度条

如何用MFC做一个进度条

第一种,用printf模拟输出百分比,在控制台输出,实现进度监控。

#include<stdio.h>

#define N 20

void mBar(float fBar){

int i,j,k,m;

mfc进度条?怎样在mfc列表控件中加入进度条

for( i=0;i<N+6;i++) printf("\b");

k=N*fBar; m=fBar*100; printf("[");

for( i=0;i<k;i++) printf("=");

for( j=0;j<N-k;j++) printf("");

printf("]%3d%%",m);

}

mfc进度条?怎样在mfc列表控件中加入进度条

void delay(int n){ int i,j,k; for( i=0;i<n;i++) for( j=0;j<0x07fff;j++) k++;}

void main()

{

float x;

int i;

for( i=0,x=0;i<100;i++,x+=0.01){ mBar(x); delay(1024);}

mBar(1);

}

第二种,使用窗口组件。这个要看程序工作环境,纯粹的c语言是无法实现的。可以使VC++。Visual C++中的MFC类提供了标准的进度指示器控件(CProgressCtrl)。

m_progress->GetPos();//获取进度条的当前位置

m_progress->GetRange(int min,int max);//获取进度条控件的范围的下限和上限

m_progress->OffsetPos(int nPos);//用指定的增量推进进度条控件的当前位置,重绘进度条反映新位置

m_progress->SetBkColor(COLORREF clrNew);//设定进度条的背景颜色

m_progress->SerPos(int nPos);//设定进度条控件的当前位置,重绘进度条反映新位置

m_progress->SetRange(int min,int max);//设定进度条控件的范围的下限和上限

m_progress->SetRange32(int min,int max);//设定进度条控件的范围的下限和上限

m_progress->SetStep(int nStep);//指定进度条控件的步进增量

m_progress->StepIt();//通过步进增量,推进进度条控件的当前位置,重绘进度条反映新位置

应用:

CProgressCtrl*m_progress;//头文件中声明

在OnInitDialog初始化

{

m_progress=(CProgressCtrl*)GetDlgItem(IDC_PROGRESS1);

m_progress->SetRange(0,1000);

m_progress->SetPos(0);

UINT m_timer=(UINT) SetTimer(1,200,NULL);

}

采用在定时器的消息处理函数WM_TIMER内添加不断更新进度条界面的方法

OnTimer(nIDEvent)

{

pos= pos+ 50;

if(pos>500)

pos= 0;

m_Progress->SetPos(pos);

}

或者采用在某种循环体内添加不断更新进展条界面的方法

怎样在mfc列表控件中加入进度条

1.从简单易用角度讲,用Dialog比较好。单文档的话,楼主可能找不到吧控件拖到哪里去。而且单文档有框架类和视图类,要在视图类里改,不要在框架类里面改。

2.Dialogue的话,看你的需要了。在controls框里面拖一个列表控件。然后用classwizard添加一个control型成员m_list。对控件的操作,可以通过操作这个成员来实现。

3.楼主会发现,有3个类,一个是aboutdlg,这个是显示版本信息的对话框,不用管。

一个是C**App类,是应用程序类,程序就是从这里执行的,对于现在的问题,可以不用管。

还有一个是C**Dlg类,这个就是我们的dialogue窗口类,就修改这里。

4.这个类里面好多函数,如果楼主希望在对话框弹出来时就有列表控件出现,并分好格子,那么,要修改它的成员函数OnInitDialog。这个函数看名字就知道是初始化对话框的。

可以在这个里面操作m_list成员,来调整列表控件。

5.操作的具体过程呢,我这里不写太详细,说的多了反而影响学习,楼主可以自己看MSDN里面CListCtrl的成员函数,不难,找几个看的懂的试下就知道了,我也写几个:

GetItemText()得到一个条目的文本

SetItemTex:设置一个条目的文本

InsertItem:插入一个新条目

DeleteItem:删除一个新条目

等等,等等,说不尽啊,请自己看一下,不难的。

6.说到list控件,脑子里一下子出现好多东西,如在列表里面加个check功能,改个颜色,放个按钮,进度条等等,哎呀,太多了,不知道从何说起。

7.很多VC,mfc方面的书,都会在一开始描述控件的使用,楼主可以随便找一本,或者网上下一本,一步一步跟着做一次,这个东西就不会陌生了。楼主这个阶段,可能看MSDN比较困难,因为,毕竟还不是很了解VC里面MFC的各种结构,建议找本书看,入门的话,推荐孙鑫的《VC++深入详解》带视频的。

8.有问题可以发消息给我。我一般中午,晚上会在线2个小时解答问题

mfc 进度条的控制问题

简单说一下实现过程:

我们用定时器来控制进度条的进度,这样有两个好处,第一是界面不会卡死,第二是方便控制进度条的启动和停止。因为如果在一个简单的循环里去控制进度条的进度,很可能会卡死。

这里,我们设计一下三个进度条的运行动作:如果是点击按钮A,则运行到进度条尾就停止,而如果是按钮B或者按钮C,则如果进度条到了尾则继续从头开始运行。

因此,我们定义如下的成员:

//给三个进度条关联控件变量

CProgressCtrlm_prcThree;

CProgressCtrlm_prcTwo;

CProgressCtrlm_prcOne;

intm_Counter;//计数器,用来控制进度条的位置

boolm_bIsButtonA;//按下的是否是A按钮

boolm_bButtonBFlag;//B按钮是否被按下

//添加一个成员函数,其实现如下,假设对话框类叫CMFCTestDlg:

//函数的作用是改变进度条的位置,如果是A按钮按下,则到进度到尾就停止

voidCMFCTestDlg::ChangeProcVal()

{

++m_Counter;

if(m_Counter>50)

{

m_Counter=0;

if(m_bIsButtonA)

{

KillTimer(TIMER_1);

return;

}

}

m_prcOne.SetPos(m_Counter);

m_prcTwo.SetPos(m_Counter);

m_prcThree.SetPos(m_Counter);

}

//添加对话框类的WM_INITDIALOG事件的处理函数,进行一些初始化

//设置进度条的范围

m_prcOne.SetRange(0,50);

m_prcTwo.SetRange(0,50);

m_prcThree.SetRange(0,50);

//初始化成员变量

m_Counter=0;

m_bButtonBFlag=false;

//定义一个宏来标明定时器事件

#defineTIMER_11

//添加对话框类的WM_TIMER事件处理函数,处理定时器事件

voidCMFCTestDlg::OnTimer(UINTnIDEvent)

{

//TODO:Addyourmessagehandlercodehereand/orcalldefault

switch(nIDEvent)

{

caseTIMER_1:

ChangeProcVal();

break;

default:

break;

}

CDialog::OnTimer(nIDEvent);

}

//OK准备工作完成,下面编写按钮的功能

//按钮A代码如下:

m_bIsButtonA=true;

SetTimer(TIMER_1,10,NULL);

//按钮B代码如下:

m_bIsButtonA=false;

m_bButtonBFlag=!m_bButtonBFlag;

if(m_bButtonBFlag)

{

SetTimer(TIMER_1,10,NULL);

}

else

{

KillTimer(TIMER_1);

}

//按钮C因为要捕获鼠标按下和松开事件,因此,重写对话框类的PreTranslateMessage虚函数,其中,IDC_BUTTON3为按钮C的控件ID,按钮事件不需要编写

BOOLCMFCTestDlg::PreTranslateMessage(MSG*pMsg)

{

//TODO:Addyourspecializedcodehereand/orcallthebaseclass

if(pMsg->message==WM_LBUTTONDOWN&&pMsg->hwnd==((CButton*)GetDlgItem(IDC_BUTTON3))->GetSafeHwnd())

{

m_bIsButtonA=false;

SetTimer(TIMER_1,10,NULL);

}

elseif(pMsg->message==WM_LBUTTONUP&&pMsg->hwnd==((CButton*)GetDlgItem(IDC_BUTTON3))->GetSafeHwnd())

{

KillTimer(TIMER_1);

}

returnCDialog::PreTranslateMessage(pMsg);

}

全部代码完成,可以进行测试了,测试截图,可能看得不是很清楚:

有问题再追问吧,呵呵

mfc中什么控件上可以画进度条

1.从简单易用角度讲,用Dialog比较好。单文档的话,楼主可能找不到吧控件拖到哪里去。而且单文档有框架类和视图类,要在视图类里改,不要在框架类里面改。

2.Dialogue的话,看你的需要了。在controls框里面拖一个列表控件。然后用classwizard添加一个control型成员m_list。对控件的操作,可以通过操作这个成员来实现。

3.楼主会发现,有3个类,一个是aboutdlg,这个是显示版本信息的对话框,不用管。

一个是C**App类,是应用程序类,程序就是从这里执行的,对于现在的问题,可以不用管。

还有一个是C**Dlg类,这个就是我们的dialogue窗口类,就修改这里。

4.这个类里面好多函数,如果楼主希望在对话框弹出来时就有列表控件出现,并分好格子,那么,要修改它的成员函数OnInitDialog。这个函数看名字就知道是初始化对话框的。

可以在这个里面操作m_list成员,来调整列表控件。

5.操作的具体过程呢,我这里不写太详细,说的多了反而影响学习,楼主可以自己看MSDN里面CListCtrl的成员函数,不难,找几个看的懂的试下就知道了,我也写几个:

GetItemText()得到一个条目的文本

SetItemTex:设置一个条目的文本

InsertItem:插入一个新条目

DeleteItem:删除一个新条目

等等,等等,说不尽啊,请自己看一下,不难的。

6.说到list控件,脑子里一下子出现好多东西,如在列表里面加个check功能,改个颜色,放个按钮,进度条等等,哎呀,太多了,不知道从何说起。

7.很多VC,mfc方面的书,都会在一开始描述控件的使用,楼主可以随便找一本,或者网上下一本,一步一步跟着做一次,这个东西就不会陌生了。楼主这个阶段,可能看MSDN比较困难,因为,毕竟还不是很了解VC里面MFC的各种结构,建议找本书看,入门的话,推荐孙鑫的《VC++深入详解》带视频的。

关于mfc进度条的内容到此结束,希望对大家有所帮助。

网站内容维护(网站维护包括哪些方面)animate.css(如何使用animate.css)