mfc进度条

时间:2024-12-16 06:44:48编辑:花茶君

怎样在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,则如果进度条到了尾则继续从头开始运行。因此,我们定义如下的成员://给三个进度条关联控件变量 CProgressCtrl m_prcThree;CProgressCtrl m_prcTwo;CProgressCtrl m_prcOne;int m_Counter;//计数器,用来控制进度条的位置bool m_bIsButtonA;//按下的是否是A按钮 bool m_bButtonBFlag;//B按钮是否被按下 //添加一个成员函数,其实现如下,假设对话框类叫CMFCTestDlg://函数的作用是改变进度条的位置,如果是A按钮按下,则到进度到尾就停止void CMFCTestDlg::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; //定义一个宏来标明定时器事件#define TIMER_1 1 //添加对话框类的WM_TIMER事件处理函数,处理定时器事件void CMFCTestDlg::OnTimer(UINT nIDEvent) { // TODO: Add your message handler code here and/or call default switch(nIDEvent) { case TIMER_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,按钮事件不需要编写 BOOL CMFCTestDlg::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class if(pMsg->message == WM_LBUTTONDOWN && pMsg->hwnd == ((CButton*)GetDlgItem(IDC_BUTTON3))->GetSafeHwnd()) { m_bIsButtonA = false; SetTimer(TIMER_1, 10, NULL); } else if(pMsg->message == WM_LBUTTONUP && pMsg->hwnd == ((CButton*)GetDlgItem(IDC_BUTTON3))->GetSafeHwnd()) { KillTimer(TIMER_1); } return CDialog::PreTranslateMessage(pMsg);} 全部代码完成,可以进行测试了,测试截图,可能看得不是很清楚:有问题再追问吧,呵呵

上一篇:梦参老和尚

下一篇:没有了