-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
92 changed files
with
12,806 additions
and
0 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,310 @@ | ||
// | ||
// Class: CButtonST | ||
// | ||
// Compiler: Visual C++ | ||
// Tested on: Visual C++ 5.0 | ||
// Visual C++ 6.0 | ||
// | ||
// Version: See GetVersionC() or GetVersionI() | ||
// | ||
// Created: xx/xxxx/1998 | ||
// Updated: 03/March/2003 | ||
// | ||
// Author: Davide Calabro' [email protected] | ||
// http://www.softechsoftware.it | ||
// | ||
// Note: Code for the PreSubclassWindow and OnSetStyle functions | ||
// has been taken from the COddButton class | ||
// published by Paolo Messina and Jerzy Kaczorowski | ||
// | ||
// Disclaimer | ||
// ---------- | ||
// THIS SOFTWARE AND THE ACCOMPANYING FILES ARE DISTRIBUTED "AS IS" AND WITHOUT | ||
// ANY WARRANTIES WHETHER EXPRESSED OR IMPLIED. NO REPONSIBILITIES FOR POSSIBLE | ||
// DAMAGES OR EVEN FUNCTIONALITY CAN BE TAKEN. THE USER MUST ASSUME THE ENTIRE | ||
// RISK OF USING THIS SOFTWARE. | ||
// | ||
// Terms of use | ||
// ------------ | ||
// THIS SOFTWARE IS FREE FOR PERSONAL USE OR FREEWARE APPLICATIONS. | ||
// IF YOU USE THIS SOFTWARE IN COMMERCIAL OR SHAREWARE APPLICATIONS YOU | ||
// ARE GENTLY ASKED TO DONATE 5$ (FIVE U.S. DOLLARS) TO THE AUTHOR: | ||
// | ||
// Davide Calabro' | ||
// P.O. Box 65 | ||
// 21019 Somma Lombardo (VA) | ||
// Italy | ||
// | ||
#ifndef _BTNST_H | ||
#define _BTNST_H | ||
|
||
// Uncomment the following 2 lines to enable support for BCMenu class | ||
#define BTNST_USE_BCMENU | ||
#include "BCMenu.h" | ||
|
||
// Uncomment the following line to enable support for sound effects | ||
#define BTNST_USE_SOUND | ||
|
||
#if _MSC_VER >= 1000 | ||
#pragma once | ||
#endif // _MSC_VER >= 1000 | ||
|
||
// Return values | ||
#ifndef BTNST_OK | ||
#define BTNST_OK 0 | ||
#endif | ||
#ifndef BTNST_INVALIDRESOURCE | ||
#define BTNST_INVALIDRESOURCE 1 | ||
#endif | ||
#ifndef BTNST_FAILEDMASK | ||
#define BTNST_FAILEDMASK 2 | ||
#endif | ||
#ifndef BTNST_INVALIDINDEX | ||
#define BTNST_INVALIDINDEX 3 | ||
#endif | ||
#ifndef BTNST_INVALIDALIGN | ||
#define BTNST_INVALIDALIGN 4 | ||
#endif | ||
#ifndef BTNST_BADPARAM | ||
#define BTNST_BADPARAM 5 | ||
#endif | ||
#ifndef BTNST_INVALIDPRESSEDSTYLE | ||
#define BTNST_INVALIDPRESSEDSTYLE 6 | ||
#endif | ||
|
||
// Dummy identifier for grayscale icon | ||
#ifndef BTNST_AUTO_GRAY | ||
#define BTNST_AUTO_GRAY (HICON)(0xffffffff - 1L) | ||
#endif | ||
// Dummy identifier for 15% darker icon | ||
#ifndef BTNST_AUTO_DARKER | ||
#define BTNST_AUTO_DARKER (HICON)(0xffffffff - 2L) | ||
#endif | ||
|
||
class CButtonST : public CButton | ||
{ | ||
public: | ||
CButtonST(); | ||
~CButtonST(); | ||
|
||
enum { ST_ALIGN_HORIZ = 0, // Icon/bitmap on the left, text on the right | ||
ST_ALIGN_VERT, // Icon/bitmap on the top, text on the bottom | ||
ST_ALIGN_HORIZ_RIGHT, // Icon/bitmap on the right, text on the left | ||
ST_ALIGN_OVERLAP // Icon/bitmap on the same space as text | ||
}; | ||
|
||
enum { BTNST_COLOR_BK_IN = 0, // Background color when mouse is INside | ||
BTNST_COLOR_FG_IN, // Text color when mouse is INside | ||
BTNST_COLOR_BK_OUT, // Background color when mouse is OUTside | ||
BTNST_COLOR_FG_OUT, // Text color when mouse is OUTside | ||
BTNST_COLOR_BK_FOCUS, // Background color when the button is focused | ||
BTNST_COLOR_FG_FOCUS, // Text color when the button is focused | ||
|
||
BTNST_MAX_COLORS | ||
}; | ||
|
||
enum { BTNST_PRESSED_LEFTRIGHT = 0, // Pressed style from left to right (as usual) | ||
BTNST_PRESSED_TOPBOTTOM // Pressed style from top to bottom | ||
}; | ||
|
||
// ClassWizard generated virtual function overrides | ||
//{{AFX_VIRTUAL(CButtonST) | ||
public: | ||
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct); | ||
virtual BOOL PreTranslateMessage(MSG* pMsg); | ||
protected: | ||
virtual void PreSubclassWindow(); | ||
//}}AFX_VIRTUAL | ||
|
||
public: | ||
DWORD SetDefaultColors(BOOL bRepaint = TRUE); | ||
DWORD SetColor(BYTE byColorIndex, COLORREF crColor, BOOL bRepaint = TRUE); | ||
DWORD GetColor(BYTE byColorIndex, COLORREF* crpColor); | ||
DWORD OffsetColor(BYTE byColorIndex, short shOffset, BOOL bRepaint = TRUE); | ||
|
||
DWORD SetCheck(int nCheck, BOOL bRepaint = TRUE); | ||
int GetCheck(); | ||
|
||
DWORD SetURL(LPCTSTR lpszURL = NULL); | ||
void DrawTransparent(BOOL bRepaint = FALSE); | ||
DWORD SetBk(CDC* pDC); | ||
|
||
BOOL GetDefault(); | ||
DWORD SetAlwaysTrack(BOOL bAlwaysTrack = TRUE); | ||
|
||
void SetTooltipText(int nText, BOOL bActivate = TRUE); | ||
void SetTooltipText(LPCTSTR lpszText, BOOL bActivate = TRUE); | ||
void ActivateTooltip(BOOL bEnable = TRUE); | ||
DWORD EnableBalloonTooltip(); | ||
|
||
DWORD SetBtnCursor(int nCursorId = NULL, BOOL bRepaint = TRUE); | ||
|
||
DWORD SetFlat(BOOL bFlat = TRUE, BOOL bRepaint = TRUE); | ||
DWORD SetAlign(BYTE byAlign, BOOL bRepaint = TRUE); | ||
DWORD SetPressedStyle(BYTE byStyle, BOOL bRepaint = TRUE); | ||
|
||
DWORD DrawBorder(BOOL bDrawBorder = TRUE, BOOL bRepaint = TRUE); | ||
DWORD DrawFlatFocus(BOOL bDrawFlatFocus, BOOL bRepaint = TRUE); | ||
|
||
DWORD SetIcon(int nIconIn, int nCxDesiredIn, int nCyDesiredIn, int nIconOut = NULL, int nCxDesiredOut = 0, int nCyDesiredOut = 0); | ||
DWORD SetIcon(int nIconIn, int nIconOut = NULL); | ||
DWORD SetIcon(HICON hIconIn, HICON hIconOut = NULL); | ||
|
||
DWORD SetBitmaps(int nBitmapIn, COLORREF crTransColorIn, int nBitmapOut = NULL, COLORREF crTransColorOut = 0); | ||
DWORD SetBitmaps(HBITMAP hBitmapIn, COLORREF crTransColorIn, HBITMAP hBitmapOut = NULL, COLORREF crTransColorOut = 0); | ||
|
||
void SizeToContent(); | ||
|
||
#ifdef BTNST_USE_BCMENU | ||
DWORD SetMenu(UINT nMenu, HWND hParentWnd, BOOL bWinXPStyle = TRUE, UINT nToolbarID = NULL, CSize sizeToolbarIcon = CSize(16, 16), COLORREF crToolbarBk = RGB(255, 0, 255), BOOL bRepaint = TRUE); | ||
#else | ||
DWORD SetMenu(UINT nMenu, HWND hParentWnd, BOOL bRepaint = TRUE); | ||
#endif | ||
DWORD SetMenuCallback(HWND hWnd, UINT nMessage, LPARAM lParam = 0); | ||
|
||
#ifdef BTNST_USE_SOUND | ||
DWORD SetSound(LPCTSTR lpszSound, HMODULE hMod = NULL, BOOL bPlayOnClick = FALSE, BOOL bPlayAsync = TRUE); | ||
#endif | ||
|
||
static short GetVersionI() {return 39;} | ||
static LPCTSTR GetVersionC() {return (LPCTSTR)_T("3.9");} | ||
|
||
BOOL m_bShowDisabledBitmap; | ||
POINT m_ptImageOrg; | ||
POINT m_ptPressedOffset; | ||
|
||
protected: | ||
//{{AFX_MSG(CButtonST) | ||
afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message); | ||
afx_msg void OnKillFocus(CWnd* pNewWnd); | ||
afx_msg void OnMouseMove(UINT nFlags, CPoint point); | ||
afx_msg void OnSysColorChange(); | ||
afx_msg BOOL OnClicked(); | ||
afx_msg void OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized); | ||
afx_msg void OnEnable(BOOL bEnable); | ||
afx_msg void OnCancelMode(); | ||
afx_msg UINT OnGetDlgCode(); | ||
//}}AFX_MSG | ||
|
||
#ifdef BTNST_USE_BCMENU | ||
afx_msg LRESULT OnMenuChar(UINT nChar, UINT nFlags, CMenu* pMenu); | ||
afx_msg void OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct); | ||
#endif | ||
|
||
afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor); | ||
HICON CreateGrayscaleIcon(HICON hIcon); | ||
HICON CreateDarkerIcon(HICON hIcon); | ||
HBITMAP CreateGrayscaleBitmap(HBITMAP hBitmap, DWORD dwWidth, DWORD dwHeight, COLORREF crTrans); | ||
HBITMAP CreateDarkerBitmap(HBITMAP hBitmap, DWORD dwWidth, DWORD dwHeight, COLORREF crTrans); | ||
COLORREF DarkenColor(COLORREF crColor, double dFactor); | ||
virtual DWORD OnDrawBackground(CDC* pDC, CRect* pRect); | ||
virtual DWORD OnDrawBorder(CDC* pDC, CRect* pRect); | ||
|
||
BOOL m_bIsFlat; // Is a flat button? | ||
BOOL m_bMouseOnButton; // Is mouse over the button? | ||
BOOL m_bDrawTransparent; // Draw transparent? | ||
BOOL m_bIsPressed; // Is button pressed? | ||
BOOL m_bIsFocused; // Is button focused? | ||
BOOL m_bIsDisabled; // Is button disabled? | ||
BOOL m_bIsDefault; // Is default button? | ||
BOOL m_bIsCheckBox; // Is the button a checkbox? | ||
BYTE m_byAlign; // Align mode | ||
BOOL m_bDrawBorder; // Draw border? | ||
BOOL m_bDrawFlatFocus; // Draw focus rectangle for flat button? | ||
COLORREF m_crColors[BTNST_MAX_COLORS]; // Colors to be used | ||
HWND m_hParentWndMenu; // Handle to window for menu selection | ||
BOOL m_bMenuDisplayed; // Is menu displayed ? | ||
|
||
#ifdef BTNST_USE_BCMENU | ||
BCMenu m_menuPopup; // BCMenu class instance | ||
#else | ||
HMENU m_hMenu; // Handle to associated menu | ||
#endif | ||
|
||
private: | ||
LRESULT OnSetCheck(WPARAM wParam, LPARAM lParam); | ||
LRESULT OnGetCheck(WPARAM wParam, LPARAM lParam); | ||
LRESULT OnSetStyle(WPARAM wParam, LPARAM lParam); | ||
LRESULT OnMouseLeave(WPARAM wParam, LPARAM lParam); | ||
|
||
void CancelHover(); | ||
void FreeResources(BOOL bCheckForNULL = TRUE); | ||
void PrepareImageRect(BOOL bHasTitle, RECT* rpItem, CRect* rpTitle, BOOL bIsPressed, DWORD dwWidth, DWORD dwHeight, CRect* rpImage); | ||
HBITMAP CreateBitmapMask(HBITMAP hSourceBitmap, DWORD dwWidth, DWORD dwHeight, COLORREF crTransColor); | ||
virtual void DrawTheIcon(CDC* pDC, BOOL bHasTitle, RECT* rpItem, CRect* rpCaption, BOOL bIsPressed, BOOL bIsDisabled); | ||
virtual void DrawTheBitmap(CDC* pDC, BOOL bHasTitle, RECT* rpItem, CRect* rpCaption, BOOL bIsPressed, BOOL bIsDisabled); | ||
virtual void DrawTheText(CDC* pDC, LPCTSTR lpszText, RECT* rpItem, CRect* rpCaption, BOOL bIsPressed, BOOL bIsDisabled); | ||
void PaintBk(CDC* pDC); | ||
|
||
void InitToolTip(); | ||
|
||
HCURSOR m_hCursor; // Handle to cursor | ||
CToolTipCtrl m_ToolTip; // Tooltip | ||
|
||
CDC m_dcBk; | ||
CBitmap m_bmpBk; | ||
CBitmap* m_pbmpOldBk; | ||
|
||
BOOL m_bAlwaysTrack; // Always hilight button? | ||
int m_nCheck; // Current value for checkbox | ||
UINT m_nTypeStyle; // Button style | ||
DWORD m_dwToolTipStyle; // Style of tooltip control | ||
|
||
TCHAR m_szURL[_MAX_PATH]; // URL to open when clicked | ||
|
||
#pragma pack(1) | ||
typedef struct _STRUCT_ICONS | ||
{ | ||
HICON hIcon; // Handle to icon | ||
DWORD dwWidth; // Width of icon | ||
DWORD dwHeight; // Height of icon | ||
} STRUCT_ICONS; | ||
#pragma pack() | ||
|
||
#pragma pack(1) | ||
typedef struct _STRUCT_BITMAPS | ||
{ | ||
HBITMAP hBitmap; // Handle to bitmap | ||
DWORD dwWidth; // Width of bitmap | ||
DWORD dwHeight; // Height of bitmap | ||
HBITMAP hMask; // Handle to mask bitmap | ||
COLORREF crTransparent; // Transparent color | ||
} STRUCT_BITMAPS; | ||
#pragma pack() | ||
|
||
#pragma pack(1) | ||
typedef struct _STRUCT_CALLBACK | ||
{ | ||
HWND hWnd; // Handle to window | ||
UINT nMessage; // Message identifier | ||
WPARAM wParam; | ||
LPARAM lParam; | ||
} STRUCT_CALLBACK; | ||
#pragma pack() | ||
|
||
STRUCT_ICONS m_csIcons[2]; | ||
STRUCT_BITMAPS m_csBitmaps[2]; | ||
|
||
STRUCT_CALLBACK m_csCallbacks; | ||
|
||
#ifdef BTNST_USE_SOUND | ||
#pragma pack(1) | ||
typedef struct _STRUCT_SOUND | ||
{ | ||
TCHAR szSound[_MAX_PATH]; | ||
LPCTSTR lpszSound; | ||
HMODULE hMod; | ||
DWORD dwFlags; | ||
} STRUCT_SOUND; | ||
#pragma pack() | ||
|
||
STRUCT_SOUND m_csSounds[2]; // Index 0 = Over 1 = Clicked | ||
#endif | ||
|
||
DECLARE_MESSAGE_MAP() | ||
}; | ||
|
||
//{{AFX_INSERT_LOCATION}} | ||
// Microsoft Developer Studio will insert additional declarations immediately before the previous line. | ||
|
||
#endif |
Oops, something went wrong.