///////////////////////////////////////////////////////////////////////////// // Copyright (C) 1993-1996 Microsoft Corporation. All Rights Reserved. // // MODULE: tipday.h // // PURPOSE: Defines the CTipOfTheDay control. // typedef struct { LPTSTR pszLinkText; LPTSTR pszLinkAddr; HWND hwndCtl; } LINKINFO, *PLINKINFO; #define LINKINFO_PROP _T("Link Info") // PLINKINFO pointer #define WNDPROC_PROP _T("Wndproc") #define TIPINFO_PROP _T("CTipOfTheDay") // 'this' pointer #define BUTTON_CLASS _T("Athena Button") class CTipOfTheDay { public: ///////////////////////////////////////////////////////////////////////// // Constructors, Destructors, and Initialization CTipOfTheDay(); ~CTipOfTheDay(); HRESULT HrCreate(HWND hwndParent, FOLDER_TYPE ftType); STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void); static LRESULT CALLBACK TipWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); BOOL OnCreate(HWND hwnd, LPCREATESTRUCT lpCreateStruct); void OnSize(HWND hwnd, UINT state, int cx, int cy); void OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify); void OnDrawItem(HWND hwnd, const DRAWITEMSTRUCT * lpDrawItem); void OnDestroy(HWND hwnd); void OnSysColorChange(HWND hwnd); void OnPaint(HWND hwnd); HBRUSH OnCtlColor(HWND hwnd, HDC hdc, HWND hwndChild, int type); DWORD GetRequiredWidth(void); DWORD GetRequiredHeight(void); void FreeLinkInfo(void); HRESULT HrLoadTipInfo(void); HRESULT HrLoadLinkInfo(void); HRESULT HrCreateChildWindows(HWND hwnd); HWND GetHwnd(void) { return m_hwnd; } private: ///////////////////////////////////////////////////////////////////////// // Private Data ULONG m_cRef; HWND m_hwnd; HWND m_hwndParent; HWND m_hwndNext; FOLDER_TYPE m_ftType; TCHAR m_szTitle[CCHMAX_STRINGRES]; TCHAR m_szNextTip[64]; // Tip string information LPTSTR m_pszTip; DWORD m_dwCurrentTip; // Link information // DWORD m_cLinks; // PLINKINFO m_rgLinkInfo; // Drawing info -- these get reset every WM_SYSCOLORCHANGE COLORREF m_clrBack; COLORREF m_clrText; COLORREF m_clrLink; HFONT m_hfLink; TEXTMETRIC m_tmLink; HFONT m_hfTitle; TEXTMETRIC m_tmTitle; HFONT m_hfTip; HICON m_hiTip; DWORD m_cyTitleHeight; DWORD m_cxTitleWidth; HBRUSH m_hbrBack; DWORD m_dwBorder; DWORD m_cxNextWidth; DWORD m_cyNextHeight; RECT m_rcTip; }; #define IDC_TIPCONTROL 1001 #define IDC_TIP_STATIC 1002 #define IDC_NEXTTIP_BUTTON 1003 #define IDC_LINKBASE_BUTTON 1500 #define LINK_BUTTON_BORDER 3 // pixels #define TIP_ICON_HEIGHT 32 #define TIP_ICON_WIDTH 32 ///////////////////////////////////////////////////////////////////////////// // // CLinkButton // // Creates an owner-drawn button that looks a lot like a web link. // class CLinkButton { public: ///////////////////////////////////////////////////////////////////////// // Constructors, Destructors, and Initialization CLinkButton(); ~CLinkButton(); HRESULT HrCreate(HWND hwndParent, LPTSTR pszCaption, LPTSTR pszLink, UINT uID); HRESULT HrCreate(HWND hwndParent, LPTSTR pszCaption, UINT uID, UINT index, HBITMAP hbmButton, HBITMAP hbmMask, HPALETTE hpal); ///////////////////////////////////////////////////////////////////////// // Ref Counting STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void); ///////////////////////////////////////////////////////////////////////// // Moving, Sizing DWORD GetHeight(void) { return m_cyHeight; } DWORD GetWidth(void) { return m_cxWidth; } HWND GetWindow(void) { return m_hwnd; } void Move(DWORD x, DWORD y); void Move(POINT pt) { Move(pt.x, pt.y); } void Show(BOOL fShow); ///////////////////////////////////////////////////////////////////////// // Painting void OnDraw(HWND hwnd, const DRAWITEMSTRUCT *lpDrawItem); HBRUSH OnCtlColorBtn(HWND hwnd) { return (m_hbrBack); } ///////////////////////////////////////////////////////////////////////// // System changes void OnSysColorChange(void); void OnPaletteChanged(HWND hwnd, HWND hwndPaletteChange); ///////////////////////////////////////////////////////////////////////// // Execute void OnCommand(void); private: ///////////////////////////////////////////////////////////////////////// // Private Data ULONG m_cRef; // Ref Count HWND m_hwnd; // Handle of our button window HWND m_hwndParent; // Handle of our parent // Caption and Link strings and Command ID LPTSTR m_pszCaption; LPTSTR m_pszLink; UINT m_uID; // Drawing info -- these get reset every WM_SYSCOLORCHANGE COLORREF m_clrLink; COLORREF m_clrBack; HFONT m_hfLink; TEXTMETRIC m_tmLink; HBRUSH m_hbrBack; DWORD m_dwBorder; DWORD m_cxWidth; DWORD m_cyHeight; UINT m_index; DWORD m_cxImage; DWORD m_cyImage; // GDI Resources passed to us when we are created HBITMAP m_hbmButtons; HBITMAP m_hbmMask; HPALETTE m_hpalButtons; }; // #define CX_BUTTON_IMAGE 96 // #define CY_BUTTON_IMAGE 84 #define CX_BUTTON_IMAGE 110 // 104 #define CY_BUTTON_IMAGE 110 // 68 LRESULT CALLBACK ButtonSubClass(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); HRESULT HrLoadButtonBitmap(HWND hwnd, int idBmp, int idMask, HBITMAP* phBtns, HBITMAP *phMask, HPALETTE *phPalette);