八宝书库 > 文学其他电子书 > C语言实例教程(PDF格式) >

第36部分

C语言实例教程(PDF格式)-第36部分

小说: C语言实例教程(PDF格式) 字数: 每页4000字

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




     次输 出不超过256个字符 (超过此限制时导致一个ASSERT被发 

     出)。利用它,我们可以很方便地对程序进行调试。但需要注意 

     的是,该宏仅仅在程序调试状态下起作用,在程序的发行版中, 

     该宏被展开为空。  



// TrackBarDlg。cpp : implementation file  



//  



#include 〃stdafx。h〃  



// 。。。。  



//以上部分为AppWizard生成的标准代码,从略  



// 。。。  



BEGIN_MESSAGE_MAP(CTrackBarDlg; CDialog)  



//{{AFX_MSG_MAP(CTrackBarDlg)  



ON_WM_SYSMAND()  



ON_WM_PAINT()  



ON_WM_QUERYDRAGICON()  



ON_WM_HSCROLL()  



ON_BN_CLICKED(IDC_CLEAR_BUTTON; OnClearButton)  



ON_BN_CLICKED(IDC_SET_BUTTON; OnSetButton)  



//以上三处为我们通过ClassWizard加入的消息响应  



//}}AFX_MSG_MAP  



END_MESSAGE_MAP()  



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


…………………………………………………………Page 276……………………………………………………………

// CTrackBarDlg message handlers  



BOOL CTrackBarDlg::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);  



// 。。。  



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



// TODO: Add extra initialization here  



m_TrackBar。SetRange(10;100);  



m_TrackBar。SetTicFreq(10);  



m_TrackBar。SetPos(10);  



char szBuffer'81';  



sprintf(szBuffer;〃10〃);  



m_EditControl。SetWindowText(szBuffer);  



//此处为编辑框控制处理,在学习完第四章后,读者应该已经能理解上述代码  



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



//Exception:OCX Property Pages should return FALSE   



}  



//下面为一系统消息处理范例  



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



{  



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



{  


…………………………………………………………Page 277……………………………………………………………

CAboutDlg dlgAbout;  



dlgAbout。DoModal();  



}  



else  



{  



CDialog::OnSysmand(nID; lParam);  



}  



}  



// If you add a minimize button to your dialog; you will need the code below  



// to draw the icon。 For MFC applications using the document/view model;  



// this is automatically done for you by the framework。  



void CTrackBarDlg::OnPaint()   



{  



if (IsIconic())  



{  



// 。。。。  



}  



else  



{  



// 。。。  



}  



//假如在滑块控件中没有在设置范围后立即重绘,建议读者仔细看一下上面代码  



}  



// The system calls this to obtain the cursor to display while the user drags  



// the minimized window。  



HCURSOR CTrackBarDlg::OnQueryDragIcon()  


…………………………………………………………Page 278……………………………………………………………

{  



return (HCURSOR) m_hIcon;  



}  



void CTrackBarDlg::OnHScroll(UINT nSBCode; UINT nPos; CScrollBar* pScrollBar)   



{  



// TODO: Add your message handler code here and/or call default  



//the trackbar sends an WM_HSCROLL(or WM_VSCROLL if the trackbar is vertical)  



//message telling the position of the slider has changed!  



//this iagnostic message shows what parameters are passed to our OnHScroll()   



//handler  



char szBuffer'81';  



CSliderCtrl *pSlider=(CSliderCtrl *)pScrollBar;  



if(pSlider==&m_TrackBar)  



{  



switch(nSBCode)  



{  



case TB_BOTTOM:TRACE(〃TB_BOTTOM n〃);break;  



case TB_TOP:TRACE(〃TB_TOPn〃);break;  



case TB_ENDTRACK:TRACE(〃TB_ENDTRACK n〃);break;  



case TB_LINEDOWN:TRACE(〃TB_LINEDOWN n〃);break;  



case TB_LINEUP:TRACE(〃TB_LINEUP n〃);break;  



case TB_PAGEDOWN:TRACE(〃TB_PAGEDOWN n〃);break;  



case TB_PAGEUP:TRACE(〃TB_PAGEUP n〃);break;  



case TB_THUMBPOSITION:TRACE(〃TB_THUMBPOSITION n〃);break;  



case TB_THUMBTRACK:TRACE(〃TB_THUMBTRACK n〃);break;  



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

你可能喜欢的