友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
狗狗书籍 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

C语言实例教程(PDF格式)-第60章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!






default:  


…………………………………………………………Page 279……………………………………………………………

TRACE(〃default:(error) n〃);  



break;  



}  



sprintf(szBuffer;〃%d〃;pSlider…》GetPos());  



m_EditControl。SetWindowText(szBuffer);  



}  



else  



{//It's some other scrollbar in the programe!  



}  



CDialog::OnHScroll(nSBCode; nPos; pScrollBar);  



}  



void CTrackBarDlg::OnClearButton()   



{  



// TODO: Add your control notification handler code here  



m_TrackBar。ClearSel(TRUE);  



}  



void CTrackBarDlg::OnSetButton()   



{  



// TODO: Add your control notification handler code here  



m_TrackBar。SetSelection(30;70);  



m_TrackBar。Invalidate();  



}  



                            第五节 进度条消息响应  



进度条 (ProgressBar)是应用程序中另一种常见的控件。它一般被 

用于在程序中完成较大的任务时,粗略地指示该任务的进展。这是一 

种在Windows   95 中新增加的控件类型,因此,类CProtressCtrl只有 

在Windows  95或Windows  NT  3。51及其以后的版本下可用。进度条体 


…………………………………………………………Page 280……………………………………………………………

现了Windows  95程序界面中更贴近人性化的一部分。它具有一个通常 

情况下充满显示的矩形框,并用一种系统的高亮色指示当前任务的完 

成情况。它具有一个代表整个任务完成情况的指定的范围,同时,它 

也具有一个确定的代表任务已经完成情况的当前位置。窗口过程调用 

进度条的范围及当前位置确定任务当时完成情况的百分比。当然,如 

果在需要的情况下,可将该值进行显示。由于位置值使用无符号整 

数,进度条的最高可能范围为655;35。图5。28给出了在Visual  C++中 

的资源编辑器中的进度条的图标。同时,由于进度条与滑块控件之间 

的相识性 (在前面我们已经提到过,它们具有相同的基类,读者不妨 

回头看看本章第三节开始时的介绍。),我们在本节中将尽量简单地 

分析有关一些常用的进度条的相关成员函数的用法,最后,我们将给 

出一个简单的综合了上一节有关滑块控件以及本节的进度条的用法, 

给出一个稍微综合的例程,程序的一个运行画面见图5。29。  



                                



             图5。 28 资源编辑器中的进度条图标  



                                 



               图5。 29 例程的一个运行画面  



下面我们首先谈谈在Visual  C++的资源编辑器中进度条的可视实现。 

进度条与滑块控件的实现相近。生成的方法也类似。但进度条的样式 

 (Style)选项卡的内容远较滑块控件为少,只有边框 (Border)一 

项可选。而其扩展风格 (Extended   Styles)的用法与含义与进度条相 

近,读者可参见前文所介绍内容,此处从略。  



与滑块控件相似,进度条具有几个相类似的成员函数供选择操作。在 

这里,我们仅仅列出各函数,其具体用法我们结合实例在例程中作对 

照分析。  



设定范围:void SetRange( int nLower; int nUpper );  


…………………………………………………………Page 281……………………………………………………………

设定步长:int SetStep( int nStep );其返回值为进度条先前步长  



设定当前位置:int SetPos( int nPos );其返回值为进度条当前发 

生位置改变时的位置  



前进一个步长并即时刷新窗口:int  StepIt;它与SetStep函数的一个 

重要区别是其  



前进值确定。函数返回值为进度条发生步进前位置。  



与前文所述类似,在非基于对话框的程序中使用进度条时,我们需要 

先创建该对象,这可以通过对类CProgressCtrl成员函数Create的调 

用来完成:  



BOOL Create( DWORD dwStyle; const RECT& rect; CWnd* pParentWnd; UINT nID );  



参数意义与滑块控件所具有的参数的意义相近,读者不妨参见上节中 

所讲的内容。  



  l 注意:  



  l 在下面的例程中,我们基本上简单地综合了滑块控件与进度条的 

    内容,但出于篇幅的原因,我们仅仅列出了其中添加较多的文件 

    ProgressDlg。cpp。  



// ProgressDlg。cpp :实现文件  



//  



#include 〃stdafx。h〃  



// 。。。  



//以上部分多为各程序中相同的部分,从略  



// 。。。  



BEGIN_MESSAGE_MAP(CProgressDlg; CDialog)  



//{{AFX_MSG_MAP(CProgressDlg)  



ON_WM_SYSMAND()  



ON_WM_PAINT()  



ON_WM_QUERYDRAGICON()  


…………………………………………………………Page 282……………………………………………………………

ON_BN_CLICKED(IDC_STEPIT; OnStepit)  



ON_WM_HSCROLL()  



//滑块控件所需要处理的唯一一个消息。  



//}}AFX_MSG_MAP  



END_MESSAGE_MAP()  



/////////////////////////////////////////////////////////////////////////////  



// CProgressDlg message handlers  



BOOL CProgressDlg::OnInitDialog()  



{  



CDialog::OnInitDialog();  



// Add 〃About。。。〃 menu item to system menu。  



// IDM_ABOUTBOX must be in the system mand range。  



ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);  



ASSERT(IDM_ABOUTBOX 《 0xF000);  



CMenu* pSysMenu = GetSystemMenu(FALSE);  



if (pSysMenu != NULL)  



{  



CString strAboutMenu;  



strAboutMenu。LoadString(IDS_ABOUTBOX);  



if (!strAboutMenu。IsEmpty())  



{  



pSysMenu…》AppendMenu(MF_SEPARATOR);  



pSysMenu…》AppendMenu(MF_STRING; IDM_ABOUTBOX; strAboutMenu);  



}  



}  



// Set the icon for this dialog。 The framework does this automatically  


…………………………………………………………Page 283……………………………………………………………

// when the application's main window is not a dialog  



SetIcon(m_hIcon; TRUE); // Set big icon  



SetIcon(m_hIcon; FALSE); // Set small icon  



// TODO: Add extra initialization here  



m_TrackBar。SetRange(10;100);  



m_TrackBar。SetTicFreq(10);  



m_TrackBar。SetPos(15);  



//以上部分设定滑块控件的一些重要信息。它们的顺序是无关紧要的。  



//但先设定范围,再设定刻度频率,最后设定滑块控件当前位置总是一个较好的习惯。  



m_ProgressBar。SetRange(10;100);//设定进度条范围为10至100  



m_ProgressBar。SetStep(1);//设定函数StepIt 调用时,每前进一个步长的长度为1  



m_ProgressBar。SetPos(10);//设定进度条当前位置为10,在程序中,进度条开始时的位置  



//一般为其开始位置,但程序根据需要进行变动也无妨   



//以上部分设定进度条的一些重要信息。它们的顺序也是无关紧要的。  



//但先设定范围,再设定步长,最后设定进度条当前位置是一个较好的习惯。  



return TRUE; // return TRUE unless you set the focus to a control  



}  



void CProgressDlg::OnSysmand(UINT nID; LPARAM lParam)  



{  



if ((nID & 0xFFF0) == IDM_ABOUTBOX)  



{  



CAboutDlg dlgAbout;  



dlgAbout。DoModal();  



}  

返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!