177 lines
4.6 KiB
C++
177 lines
4.6 KiB
C++
// File: Progressbar.h
|
|
|
|
#ifndef _PROGRESSBAR_H_
|
|
#define _PROGRESSBAR_H_
|
|
|
|
#include "GenWindow.h"
|
|
#include "GenContainers.h"
|
|
|
|
// A progress window class. This uses an outer and inner bitmap to show the progress
|
|
class // DECLSPEC_UUID("")
|
|
CProgressBar : public CGenWindow
|
|
{
|
|
public:
|
|
// Default constructor; inits a few intrinsics
|
|
CProgressBar();
|
|
|
|
// Create the toolbar window; this object now owns the bitmaps passed in
|
|
BOOL Create(
|
|
HBITMAP hbOuter, // The outside (static) part of the progress bar
|
|
HBITMAP hbInner, // The inside part of the progress bar that jumps around
|
|
HWND hWndParent // The parent of the toolbar window
|
|
);
|
|
|
|
#if FALSE
|
|
HRESULT STDMETHODCALLTYPE QueryInterface(REFGUID riid, LPVOID *ppv)
|
|
{
|
|
if (__uuidof(CProgressBar) == riid)
|
|
{
|
|
*ppv = this;
|
|
AddRef();
|
|
return(S_OK);
|
|
}
|
|
return(CGenWindow::QueryInterface(riid, ppv));
|
|
}
|
|
#endif // FALSE
|
|
|
|
virtual void GetDesiredSize(SIZE *ppt);
|
|
|
|
// Change the max value displayed by this progress bar
|
|
void SetMaxValue(UINT maxVal);
|
|
|
|
// Return the max value displayed by this progress bar
|
|
UINT GetMaxValue() { return(m_maxVal); }
|
|
|
|
// Change the current value displayed by this progress bar
|
|
void SetCurrentValue(UINT curVal);
|
|
|
|
// Return the current value displayed by this progress bar
|
|
UINT GetCurrentValue() { return(m_curVal); }
|
|
|
|
protected:
|
|
virtual ~CProgressBar();
|
|
|
|
// Forward WM_COMMAND messages to the parent window
|
|
virtual LRESULT ProcessMessage(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
|
|
|
|
private:
|
|
enum BitmapParts
|
|
{
|
|
Frame, // The bitmap that displays the control when at 0%
|
|
Bar, // The bitmap that gets blasted onto the outer bitmap up to the desired percentage
|
|
NumBitmaps
|
|
} ;
|
|
|
|
// The bitmaps that make up the progress bar
|
|
HBITMAP m_hbs[NumBitmaps];
|
|
// The max progress value
|
|
UINT m_maxVal;
|
|
// The current progress value
|
|
UINT m_curVal;
|
|
|
|
// Get/set the outer bitmap
|
|
void SetFrame(HBITMAP hbFrame) { m_hbs[Frame] = hbFrame; }
|
|
HBITMAP GetFrame() { return(m_hbs[Frame]); }
|
|
|
|
// Get/set the inner bitmap
|
|
void SetBar(HBITMAP hbBar) { m_hbs[Bar] = hbBar; }
|
|
HBITMAP GetBar() { return(m_hbs[Bar]); }
|
|
|
|
// Specialized painting function
|
|
void OnPaint(HWND hwnd);
|
|
} ;
|
|
|
|
class CProgressTrackbar;
|
|
|
|
interface IScrollChange : IUnknown
|
|
{
|
|
virtual void OnScroll(CProgressTrackbar *pTrackbar, UINT code, int pos) = 0;
|
|
} ;
|
|
|
|
// A progress window class. This uses an outer and inner bitmap to show the progress
|
|
class // DECLSPEC_UUID("")
|
|
CProgressTrackbar : public CFillWindow
|
|
{
|
|
public:
|
|
// Default constructor; inits a few intrinsics
|
|
CProgressTrackbar();
|
|
|
|
// Create the toolbar window; this object now owns the bitmaps passed in
|
|
BOOL Create(
|
|
HWND hWndParent, // The parent of the toolbar window
|
|
INT_PTR nId=0, // The ID of the control
|
|
IScrollChange *pNotify=NULL // Object to notify of changes
|
|
);
|
|
|
|
#if FALSE
|
|
HRESULT STDMETHODCALLTYPE QueryInterface(REFGUID riid, LPVOID *ppv)
|
|
{
|
|
if (__uuidof(CProgressTrackbar) == riid)
|
|
{
|
|
*ppv = this;
|
|
AddRef();
|
|
return(S_OK);
|
|
}
|
|
return(CGenWindow::QueryInterface(riid, ppv));
|
|
}
|
|
#endif // FALSE
|
|
|
|
virtual void GetDesiredSize(SIZE *ppt);
|
|
|
|
// Sets the desired size for this control
|
|
void SetDesiredSize(SIZE *psize);
|
|
|
|
// Change the max value displayed by this progress bar
|
|
void SetMaxValue(UINT maxVal);
|
|
|
|
// Return the max value displayed by this progress bar
|
|
UINT GetMaxValue();
|
|
|
|
// Change the current position of the thumb
|
|
void SetTrackValue(UINT curVal);
|
|
|
|
// Return the current position of the thumb
|
|
UINT GetTrackValue();
|
|
|
|
// Change the current value displayed by the channel
|
|
void SetProgressValue(UINT curVal);
|
|
|
|
// Return the current value displayed by the channel
|
|
UINT GetProgressValue();
|
|
|
|
protected:
|
|
virtual ~CProgressTrackbar();
|
|
|
|
// Forward WM_COMMAND messages to the parent window
|
|
virtual LRESULT ProcessMessage(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
|
|
|
|
void SchedulePaint()
|
|
{
|
|
// HACK: SETRANGEMAX is the only way to force the slider to update itself...
|
|
SendMessage(GetChild(), TBM_SETRANGEMAX, TRUE, GetMaxValue());
|
|
}
|
|
|
|
private:
|
|
// The desired size for the control; defaults to (170,23)
|
|
SIZE m_desSize;
|
|
// The current channel value
|
|
UINT m_nValChannel;
|
|
// The object ot notify of changes
|
|
IScrollChange *m_pNotify;
|
|
|
|
// Notify handler for custom draw
|
|
LRESULT OnNotify(HWND hwnd, int id, NMHDR *pHdr);
|
|
// Send scroll messages to the parent
|
|
void OnScroll(HWND hwnd, HWND hwndCtl, UINT code, int pos);
|
|
// Set the correct background color
|
|
HBRUSH OnCtlColor(HWND hwnd, HDC hdc, HWND hwndChild, int type);
|
|
// Free the listener
|
|
void OnNCDestroy(HWND hwnd);
|
|
|
|
// Paint the parts of the slider
|
|
LRESULT PaintChannel(LPNMCUSTOMDRAW pCustomDraw);
|
|
LRESULT PaintThumb(LPNMCUSTOMDRAW pCustomDraw);
|
|
} ;
|
|
|
|
#endif // _PROGRESSBAR_H_
|