return TRUE; // return TRUE unless you set the focus to a control }// 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 CProgressBarDemoDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon dc.DrawIcon(x, y, m_hIcon); } else { CDialog::OnPaint(); } }HCURSOR CProgressBarDemoDlg::OnQueryDragIcon() { return (HCURSOR) m_hIcon; }void CProgressBarDemoDlg::OnTest() { m_ProgressBar.SetShowText(m_bShowText); m_ProgressBar.SetPos(0); m_ProgressBar.SetRange(0,5000); for (int i = 0; i < 5000; i++) { if (m_bShowText && m_bUserText) { CString str; str.Format("Processing completed %d%%", i/50); m_ProgressBar.SetWindowText(str); } m_ProgressBar.StepIt(); } m_ProgressBar.SetPos(0); m_ProgressBar.SetShowText(FALSE); }void CProgressBarDemoDlg::OnShowText() { CButton* pButton = (CButton*) GetDlgItem(IDC_SHOW_TEXT); if (!pButton) return; m_bShowText = pButton->GetCheck(); pButton = (CButton*) GetDlgItem(IDC_USER_TEXT); if (!pButton) return; pButton->EnableWindow(m_bShowText); }void CProgressBarDemoDlg::OnUserText() { CButton* pButton = (CButton*) GetDlgItem(IDC_USER_TEXT); if (!pButton) return; m_bUserText = pButton->GetCheck(); m_ProgressBar.SetWindowText(NULL);} //------------------------------------------------------------------------------
/ TextProgressCtrl.cpp : implementation file // // Written by Chris Maunder ([email protected]) // Copyright 1998. // // Modified : 26/05/98 Jeremy Davis, [email protected] // Added colour routines // // TextProgressCtrl is a drop-in replacement for the standard // CProgressCtrl that displays text in a progress control. // // This code may be used in compiled form in any way you desire. This // file may be redistributed by any means PROVIDING it is not sold for // profit without the authors written consent, and providing that this // notice and the authors name is included. If the source code in // this file is used in any commercial application then an email to // the me would be nice. // // This file is provided "as is" with no expressed or implied warranty. // The author accepts no liability if it causes any damage to your // computer, causes your pet cat to fall ill, increases baldness or // makes you car start emitting strange noises when you start it up. // // Expect bugs. // // Please use and enjoy. Please let me know of any bugs/mods/improvements // that you have found/implemented and I will fix/incorporate them into this // file. #include "stdafx.h" #include "TextProgressCtrl.h"#ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #ifndef _MEMDC_H_ ////////////////////////////////////////////////// // CMemDC - memory DC // // Author: Keith Rule // Email: [email protected] // Copyright 1996-1997, Keith Rule // // You may freely use or modify this code provided this // Copyright is included in all derived versions. // // History - 10/3/97 Fixed scrolling bug. // Added print support. // // This class implements a memory Device Contextclass CMemDC : public CDC { public: // constructor sets up the memory DC CMemDC(CDC* pDC) : CDC() { ASSERT(pDC != NULL); m_pDC = pDC; m_pOldBitmap = NULL; m_bMemDC = !pDC->IsPrinting();
if (m_bMemDC) // Create a Memory DC { pDC->GetClipBox(&m_rect); CreateCompatibleDC(pDC); m_bitmap.CreateCompatibleBitmap(pDC, m_rect.Width(), m_rect.Height()); m_pOldBitmap = SelectObject(&m_bitmap); SetWindowOrg(m_rect.left, m_rect.top); } else // Make a copy of the relevent parts of the current DC for printing { m_bPrinting = pDC->m_bPrinting; m_hDC = pDC->m_hDC; m_hAttribDC = pDC->m_hAttribDC; } }
// Destructor copies the contents of the mem DC to the original DC ~CMemDC() { if (m_bMemDC) { // Copy the offscreen bitmap onto the screen. m_pDC->BitBlt(m_rect.left, m_rect.top, m_rect.Width(), m_rect.Height(), this, m_rect.left, m_rect.top, SRCCOPY); //Swap back the original bitmap. SelectObject(m_pOldBitmap); } else { // All we need to do is replace the DC with an illegal value, // this keeps us from accidently deleting the handles associated with // the CDC that was passed to the constructor. m_hDC = m_hAttribDC = NULL; } } // Allow usage as a pointer CMemDC* operator->() {return this;}
// Allow usage as a pointer operator CMemDC*() {return this;}private: CBitmap m_bitmap; // Offscreen bitmap CBitmap* m_pOldBitmap; // bitmap originally found in CMemDC CDC* m_pDC; // Saves CDC passed in constructor CRect m_rect; // Rectangle of drawing area. BOOL m_bMemDC; // TRUE if CDC really is a Memory DC. };#endif
第二一章82例,保证没错!// ProgressBarDemoDlg.cpp : implementation file
//#include "stdafx.h"
#include "ProgressBarDemo.h"
#include "ProgressBarDemoDlg.h"#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif/////////////////////////////////////////////////////////////////////////////
// CProgressBarDemoDlg dialogCProgressBarDemoDlg::CProgressBarDemoDlg(CWnd* pParent /*=NULL*/)
: CDialog(CProgressBarDemoDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CProgressBarDemoDlg)
m_bShowText = TRUE;
m_bUserText = TRUE;
//}}AFX_DATA_INIT
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}void CProgressBarDemoDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CProgressBarDemoDlg)
DDX_Control(pDX, IDC_PROGRESS, m_ProgressBar);
DDX_Check(pDX, IDC_SHOW_TEXT, m_bShowText);
DDX_Check(pDX, IDC_USER_TEXT, m_bUserText);
//}}AFX_DATA_MAP
}BEGIN_MESSAGE_MAP(CProgressBarDemoDlg, CDialog)
//{{AFX_MSG_MAP(CProgressBarDemoDlg)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_TEST, OnTest)
ON_BN_CLICKED(IDC_SHOW_TEXT, OnShowText)
ON_BN_CLICKED(IDC_USER_TEXT, OnUserText)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
// CProgressBarDemoDlg message handlersBOOL CProgressBarDemoDlg::OnInitDialog()
{
CDialog::OnInitDialog(); SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
m_ProgressBar.SetShowText(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
}// 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 CProgressBarDemoDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}HCURSOR CProgressBarDemoDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}void CProgressBarDemoDlg::OnTest()
{
m_ProgressBar.SetShowText(m_bShowText);
m_ProgressBar.SetPos(0);
m_ProgressBar.SetRange(0,5000); for (int i = 0; i < 5000; i++)
{
if (m_bShowText && m_bUserText)
{
CString str;
str.Format("Processing completed %d%%", i/50);
m_ProgressBar.SetWindowText(str);
} m_ProgressBar.StepIt();
} m_ProgressBar.SetPos(0);
m_ProgressBar.SetShowText(FALSE);
}void CProgressBarDemoDlg::OnShowText()
{
CButton* pButton = (CButton*) GetDlgItem(IDC_SHOW_TEXT);
if (!pButton) return; m_bShowText = pButton->GetCheck(); pButton = (CButton*) GetDlgItem(IDC_USER_TEXT);
if (!pButton) return; pButton->EnableWindow(m_bShowText);
}void CProgressBarDemoDlg::OnUserText()
{
CButton* pButton = (CButton*) GetDlgItem(IDC_USER_TEXT);
if (!pButton) return; m_bUserText = pButton->GetCheck();
m_ProgressBar.SetWindowText(NULL);}
//------------------------------------------------------------------------------
//
// Written by Chris Maunder ([email protected])
// Copyright 1998.
//
// Modified : 26/05/98 Jeremy Davis, [email protected]
// Added colour routines
//
// TextProgressCtrl is a drop-in replacement for the standard
// CProgressCtrl that displays text in a progress control.
//
// This code may be used in compiled form in any way you desire. This
// file may be redistributed by any means PROVIDING it is not sold for
// profit without the authors written consent, and providing that this
// notice and the authors name is included. If the source code in
// this file is used in any commercial application then an email to
// the me would be nice.
//
// This file is provided "as is" with no expressed or implied warranty.
// The author accepts no liability if it causes any damage to your
// computer, causes your pet cat to fall ill, increases baldness or
// makes you car start emitting strange noises when you start it up.
//
// Expect bugs.
//
// Please use and enjoy. Please let me know of any bugs/mods/improvements
// that you have found/implemented and I will fix/incorporate them into this
// file. #include "stdafx.h"
#include "TextProgressCtrl.h"#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#ifndef _MEMDC_H_
//////////////////////////////////////////////////
// CMemDC - memory DC
//
// Author: Keith Rule
// Email: [email protected]
// Copyright 1996-1997, Keith Rule
//
// You may freely use or modify this code provided this
// Copyright is included in all derived versions.
//
// History - 10/3/97 Fixed scrolling bug.
// Added print support.
//
// This class implements a memory Device Contextclass CMemDC : public CDC
{
public: // constructor sets up the memory DC
CMemDC(CDC* pDC) : CDC()
{
ASSERT(pDC != NULL); m_pDC = pDC;
m_pOldBitmap = NULL;
m_bMemDC = !pDC->IsPrinting();
if (m_bMemDC) // Create a Memory DC
{
pDC->GetClipBox(&m_rect);
CreateCompatibleDC(pDC);
m_bitmap.CreateCompatibleBitmap(pDC, m_rect.Width(), m_rect.Height());
m_pOldBitmap = SelectObject(&m_bitmap);
SetWindowOrg(m_rect.left, m_rect.top);
}
else // Make a copy of the relevent parts of the current DC for printing
{
m_bPrinting = pDC->m_bPrinting;
m_hDC = pDC->m_hDC;
m_hAttribDC = pDC->m_hAttribDC;
}
}
// Destructor copies the contents of the mem DC to the original DC
~CMemDC()
{
if (m_bMemDC)
{
// Copy the offscreen bitmap onto the screen.
m_pDC->BitBlt(m_rect.left, m_rect.top, m_rect.Width(), m_rect.Height(),
this, m_rect.left, m_rect.top, SRCCOPY); //Swap back the original bitmap.
SelectObject(m_pOldBitmap);
} else {
// All we need to do is replace the DC with an illegal value,
// this keeps us from accidently deleting the handles associated with
// the CDC that was passed to the constructor.
m_hDC = m_hAttribDC = NULL;
}
} // Allow usage as a pointer
CMemDC* operator->() {return this;}
// Allow usage as a pointer
operator CMemDC*() {return this;}private:
CBitmap m_bitmap; // Offscreen bitmap
CBitmap* m_pOldBitmap; // bitmap originally found in CMemDC
CDC* m_pDC; // Saves CDC passed in constructor
CRect m_rect; // Rectangle of drawing area.
BOOL m_bMemDC; // TRUE if CDC really is a Memory DC.
};#endif