⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gwidgets.h

📁 一个非常有用的开源代码
💻 H
📖 第 1 页 / 共 2 页
字号:
/*	Copyright (C) 2006, Mike Gashler	This library is free software; you can redistribute it and/or	modify it under the terms of the GNU Lesser General Public	License as published by the Free Software Foundation; either	version 2.1 of the License, or (at your option) any later version.	see http://www.gnu.org/copyleft/lesser.html*/#ifndef __GWIDGETS_H__#define __GWIDGETS_H__#include "GImage.h"#include "GString.h"class GPointerArray;class GWidgetAtomic;class GWidgetGroup;class GWidget;class GWidgetListBox;class GWidgetTextButton;class GWidgetImageButton;class GWidgetVCRButton;class GWidgetHorizScrollBar;class GWidgetVertScrollBar;class GWidgetGroupWithCanvas;class GWidgetTextLabel;class GWidgetFileSystemBrowser;class GWidgetSliderTab;class GWidgetTextBox;class GWidgetPolarLineGraph;class GWidgetPolarBarGraph;class GWidgetVertSlider;class GWidgetStyle{protected:	int m_nButtonFontSize;	int m_nLabelFontSize;	float m_fButtonFontWidth;	float m_fLabelFontWidth;	GColor m_cButtonTextColor;	GColor m_cLabelTextColor;	GColor m_cButtonPressedTextColor;	GColor m_cTextBoxBorderColor;	GColor m_cTextBoxTextColor;public:	GWidgetStyle();	~GWidgetStyle();	GColor GetTextBoxBorderColor() { return m_cTextBoxBorderColor; }	GColor GetTextBoxTextColor() { return m_cTextBoxBorderColor; }	GColor GetTextBoxSelectedTextColor() { return m_cButtonTextColor; }	int GetListBoxLineHeight() { return 16; }	int GetDefaultScrollBarSize() { return 16; }	void DrawButtonText(GImage* pImage, int x, int y, int w, int h, GString* pString, bool pressed);	void DrawLabelText(GImage* pImage, int x, int y, int w, int h, GString* pString, bool alignLeft, GColor c);	void DrawHorizCurvedOutSurface(GImage* pImage, int x, int y, int w, int h);	void DrawHorizCurvedInSurface(GImage* pImage, int x, int y, int w, int h, int colorMaskRed = 0, int colorMaskGreen = 0, int colorMaskBlue = 255);	void DrawVertCurvedOutSurface(GImage* pImage, int x, int y, int w, int h);	void DrawVertCurvedInSurface(GImage* pImage, int x, int y, int w, int h);	void DrawCursor(GImage* pImage, int x, int y, int w, int h);};// The base class of all GUI widgetsclass GWidget{friend class GWidgetGroup;friend class GWidgetGroupWithCanvas;public:	enum WidgetType	{		Animation,		CheckBox,		Custom,		Dialog,		FileSystemBrowser,		Grid,		HScrollBar,		ListBox,		ListBoxItem,		PolarChart,		ProgressBar,		SliderTab,		TextBox,		TextButton,		TextLabel,		VCRButton,		VertSlider,		VScrollBar,	};protected:	GRect m_rect;	GWidgetGroup* m_pParent;	GWidgetStyle* m_pStyle;	int m_nID; // for use by the owning parent#ifdef _DEBUG	unsigned int m_nDebugCheck;#endif // _DEBUGpublic:	GWidget(GWidgetGroup* m_pParent, int x, int y, int w, int h);	virtual ~GWidget();	virtual WidgetType GetType() = 0;	virtual bool IsAtomicWidget() = 0;	virtual void Draw(GWidgetGroupWithCanvas* pTarget) = 0;	virtual GImage* GetImage(GRect* pOutRect) = 0;	void SetPos(int x, int y);	GRect* GetRect() { return &m_rect; }	GWidgetGroup* GetParent() { return m_pParent; }#ifdef _DEBUG	bool DebugCheck();#endif // _DEBUG};// The base class of all atomic widgets (widgets that are not composed of other widgets).class GWidgetAtomic : public GWidget{friend class GWidgetDialog;public:	GWidgetAtomic(GWidgetGroup* pParent, int x, int y, int w, int h);	virtual ~GWidgetAtomic();	virtual bool IsAtomicWidget() { return true; }	virtual void Draw(GWidgetGroupWithCanvas* pTarget);	virtual void OnChar(char c);	virtual void OnMouseMove(int dx, int dy);	virtual void OnGetFocus() {}	virtual void OnLoseFocus() {}protected:	virtual void Grab(int x, int y) = 0;	virtual void Release() = 0;};// The base class of all widgets that are composed of other widgetsclass GWidgetGroup : public GWidget{friend class GWidget;friend class GWidgetAtomic;protected:	GPointerArray* m_pWidgets;	bool m_dirty;public:	GWidgetGroup(GWidgetGroup* pParent, int x, int y, int w, int h);	virtual ~GWidgetGroup();	virtual bool IsAtomicWidget() { return false; }	virtual GWidgetStyle* GetStyle() { return m_pParent->GetStyle(); }	virtual GWidgetAtomic* FindAtomicWidget(int x, int y);	virtual void OnDestroyWidget(GWidget* pWidget);	int GetChildWidgetCount();	GWidget* GetChildWidget(int n);	virtual void OnPushTextButton(GWidgetTextButton* pButton)	{		if(m_pParent)			m_pParent->OnReleaseTextButton(pButton);	}	virtual void OnReleaseTextButton(GWidgetTextButton* pButton)	{		if(m_pParent)			m_pParent->OnReleaseTextButton(pButton);	}	virtual void OnReleaseImageButton(GWidgetImageButton* pButton)	{		if(m_pParent)			m_pParent->OnReleaseImageButton(pButton);	}	virtual void OnPushVCRButton(GWidgetVCRButton* pButton)	{		if(m_pParent)			m_pParent->OnPushVCRButton(pButton);	}	virtual void OnHorizScroll(GWidgetHorizScrollBar* pScrollBar)	{		if(m_pParent)			m_pParent->OnHorizScroll(pScrollBar);	}	virtual void OnVertScroll(GWidgetVertScrollBar* pScrollBar)	{		if(m_pParent)			m_pParent->OnVertScroll(pScrollBar);	}	virtual void OnClickTextLabel(GWidgetTextLabel* pLabel)	{		if(m_pParent)			m_pParent->OnClickTextLabel(pLabel);	}	virtual void OnSelectFilename(GWidgetFileSystemBrowser* pBrowser, const char* szFilename)	{		if(m_pParent)			m_pParent->OnSelectFilename(pBrowser, szFilename);	}	virtual void OnChangeListSelection(GWidgetListBox* pListBox)	{		if(m_pParent)			m_pParent->OnChangeListSelection(pListBox);	}	virtual void OnTextBoxTextChanged(GWidgetTextBox* pTextBox)	{		if(m_pParent)			m_pParent->OnTextBoxTextChanged(pTextBox);	}	virtual void OnTextBoxPressEnter(GWidgetTextBox* pTextBox)	{		if(m_pParent)			m_pParent->OnTextBoxPressEnter(pTextBox);	}	virtual void OnChar(char c)	{		if(m_pParent)			m_pParent->OnChar(c);	}	virtual void OnClickTab(GWidgetSliderTab* pTab)	{		if(m_pParent)			m_pParent->OnClickTab(pTab);	}	virtual void OnSlideTab(GWidgetSliderTab* pTab, int dx, int dy)	{		if(m_pParent)			m_pParent->OnSlideTab(pTab, dx, dy);	}	virtual void OnChangePolarLineGraphSelection(GWidgetPolarLineGraph* pChart)	{		if(m_pParent)			m_pParent->OnChangePolarLineGraphSelection(pChart);	}	virtual void OnChangePolarBarGraphSelection(GWidgetPolarBarGraph* pChart)	{		if(m_pParent)			m_pParent->OnChangePolarBarGraphSelection(pChart);	}	virtual void OnVertSliderMove(GWidgetVertSlider* pSlider)	{		if(m_pParent)			m_pParent->OnVertSliderMove(pSlider);	}protected:	void AddWidget(GWidget* pWidget);};class GWidgetGroupWithCanvas : public GWidgetGroup{protected:	GImage m_image;public:	GWidgetGroupWithCanvas(GWidgetGroup* pParent, int x, int y, int w, int h);	virtual ~GWidgetGroupWithCanvas();	virtual GImage* GetImage(GRect* pOutRect);	virtual void Draw(GWidgetGroupWithCanvas* pTarget);protected:	virtual void Update() = 0;};// A form or dialogclass GWidgetDialog : public GWidgetGroupWithCanvas{protected:	GWidgetAtomic* m_pGrabbedWidget;	GWidgetAtomic* m_pFocusWidget;	GColor m_cBackground;	int m_prevMouseX;	int m_prevMouseY;public:	GWidgetDialog(int w, int h, GColor cBackground);	virtual ~GWidgetDialog();	virtual WidgetType GetType() { return Dialog; }	virtual GWidgetStyle* GetStyle() { return m_pStyle; }	GWidgetAtomic* GetGrabbedWidget() { return m_pGrabbedWidget; }	GWidgetAtomic* GetFocusWidget() { return m_pFocusWidget; }	void GrabWidget(GWidgetAtomic* pWidget, int mouseX, int mouseY);	void SetFocusWidget(GWidgetAtomic* pWidget);	void ReleaseWidget();	virtual void OnDestroyWidget(GWidget* pWidget);	void HandleChar(char c);	bool HandleMousePos(int x, int y);	virtual void Update();};// A button with text on itclass GWidgetTextButton : public GWidgetAtomic{protected:	GImage m_image;	GString m_text;	bool m_pressed;	bool m_dirty;public:	GWidgetTextButton(GWidgetGroup* pParent, int x, int y, int w, int h, GString* pText);	virtual ~GWidgetTextButton();	virtual WidgetType GetType() { return TextButton; }	virtual GImage* GetImage(GRect* pOutRect);	void SetSize(int w, int h);	void SetText(GString* pText);	void SetText(const char* szText);	bool IsPressed() { return m_pressed; }protected:	void Update();	virtual void Grab(int x, int y);	virtual void Release();};// A button with an image on it. The left half of the image is the// unpressed image and the right half is the pressed image.class GWidgetImageButton : public GWidgetAtomic{protected:	GImage m_image;	bool m_pressed;public:	GWidgetImageButton(GWidgetGroup* pParent, int x, int y, GImage* pImage);	virtual ~GWidgetImageButton();	virtual WidgetType GetType() { return TextButton; }	virtual GImage* GetImage(GRect* pOutRect);	bool IsPressed() { return m_pressed; }protected:	virtual void Grab(int x, int y);	virtual void Release();};// An image with multiple framesclass GWidgetAnimation : public GWidgetAtomic{protected:	GImage m_image;	int m_nFrames;	int m_nFrame;public:	GWidgetAnimation(GWidgetGroup* pParent, int x, int y, GImage* pImage, int nFrames);	virtual ~GWidgetAnimation();	virtual WidgetType GetType() { return Animation; }	virtual GImage* GetImage(GRect* pOutRect);	void SetFrame(int nFrame);protected:	virtual void Grab(int x, int y);	virtual void Release();};// A text labelclass GWidgetTextLabel : public GWidgetAtomic{protected:	GImage m_image;	GString m_text;	bool m_alignLeft;	bool m_dirty;	GColor m_cBackground;	GColor m_cForeground;public:	GWidgetTextLabel(GWidgetGroup* pParent, int x, int y, int w, int h, GString* pText, GColor c);	virtual ~GWidgetTextLabel();	virtual WidgetType GetType() { return TextLabel; }	virtual GImage* GetImage(GRect* pOutRect);	void SetSize(int w, int h);	GString* GetText() { return &m_text; }	void SetText(GString* pText);	void SetText(const char* szText);	// Sets the text color	void SetForegroundColor(GColor c) { m_cForeground = c; }	// The default background color is transparent. If you want an opaque	// or semi-opaque background then you should call this method.	void SetBackgroundColor(GColor c) { m_cBackground = c; }	// Specifies whether the text is left-justified (true) or right-justified (false)	void SetAlignLeft(bool bAlignLeft) { m_alignLeft = bAlignLeft; m_dirty = true; }protected:	void Update();	virtual void Grab(int x, int y);	virtual void Release();};// A button with a common icon on itclass GWidgetVCRButton : public GWidgetAtomic{public:	enum VCR_Type	{		ArrowLeft,		ArrowRight, // Play		ArrowUp,		ArrowDown,		Square,  // Stop	};protected:	GImage m_image;	VCR_Type m_eType;	bool m_pressed;	bool m_dirty;public:	GWidgetVCRButton(GWidgetGroup* pParent, int x, int y, int w, int h, VCR_Type eType);	virtual ~GWidgetVCRButton();	virtual WidgetType GetType() { return VCRButton; }	virtual GImage* GetImage(GRect* pOutRect);	void SetSize(int w, int h);	void SetType(VCR_Type eType);	bool IsPressed() { return m_pressed; }protected:	void Update();	virtual void Grab(int x, int y);	virtual void Release();	void DrawIcon(int nHorizOfs, int nVertOfs);};class GWidgetProgressBar : public GWidgetAtomic{protected:	GImage m_image;	float m_fProgress;	bool m_dirty;public:	GWidgetProgressBar(GWidgetGroup* pParent, int x, int y, int w, int h);	virtual ~GWidgetProgressBar();	virtual WidgetType GetType() { return ProgressBar; }	virtual GImage* GetImage(GRect* pOutRect);	void SetSize(int w, int h);	void SetProgress(float fProgress);	float GetProgress() { return m_fProgress; }protected:	void Update();	virtual void Grab(int x, int y);	virtual void Release();};class GWidgetCheckBox : public GWidgetAtomic{protected:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -