2025-11-27 16:46:48 +09:00

228 lines
7.0 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// ==========================================================================
// Class Specification : COXTitleBar
// ==========================================================================
// Header file : oxtlebar.h
// Version: 9.3
// This software along with its related components, documentation and files ("The Libraries")
// is © 1994-2007 The Code Project (1612916 Ontario Limited) and use of The Libraries is
// governed by a software license agreement ("Agreement"). Copies of the Agreement are
// available at The Code Project (www.codeproject.com), as part of the package you downloaded
// to obtain this file, or directly from our office. For a copy of the license governing
// this software, you may contact us at legalaffairs@codeproject.com, or by calling 416-849-8900.
// //////////////////////////////////////////////////////////////////////////
// Properties:
// NO Abstract class (does not have any objects)
// YES Derived from CWnd
// YES Is a Cwnd.
// YES Two stage creation (constructor & Create())
// YES Has a message map
// YES Needs a resource (template)
// NO Persistent objects (saveable on disk)
// NO Uses exceptions
// //////////////////////////////////////////////////////////////////////////
// Desciption :
// This class is used as the special caption of a COXRollup dialog
// Remark:
// This file is part of Rollup dialogs implementation. It implements the
// "non-client-area" or the TitleBar (therefore the classname). It supports
// a system menu, which notifies the parent on opening, a rollup and rolldown
// "button" on the right side of the titlebar. Moving around the rollup is
// also implemented in this class, because dragging starts with clicking in
// the titlebar area. You can extend the Titlebar with your own Buttons by
// overriding DrawBar and HitTest with your own versions.
// Prerequisites (necessary conditions):
// ***
/////////////////////////////////////////////////////////////////////////////
#ifndef __TITLEBAR_H__
#define __TITLEBAR_H__
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
#include "OXDllExt.h"
// really arbitrary values; don´t rely on
#define SCROLL_DOWN 12
#define SCROLL_UP 27
class OX_CLASS_DECL COXTitleBar : public CWnd
{
DECLARE_DYNAMIC(COXTitleBar);
// Data members -------------------------------------------------------------
public:
enum
{
active = COLOR_ACTIVECAPTION,
inactive = COLOR_INACTIVECAPTION
};
protected:
CString m_sWndClassTitlebar;
CSize m_bmSize;
CBitmap m_bitmapAll;
BOOL m_bSysmenuOpen;
int m_nRollupState;
CFont m_fntStandard;
int m_nActivation;
BOOL m_bDragging; // are we in drag mode?
CPoint m_ptLast; // Last point
CPoint m_ptMouse; // Mouse position
private:
// Member functions ---------------------------------------------------------
public:
COXTitleBar();
// --- In :
// --- Out :
// --- Returns :
// --- Effect : Contructor of object
// It will initialize the internal state
BOOL Create(LPCTSTR lpszCaption, CRect& rc, CWnd* pParent, UINT nID);
// --- In : lpszCaption : Window text of the Rollup
// rc : Window rectangle of Titlebar
// pParent : Pointer to parent COXRollup derived dialog
// nID : Dialog ID (IDC_CAPTION is used by default)
// --- Out :
// --- Returns : succeeded or not
// --- Effect : This function is called to create the titlebar for the rollup.
virtual BOOL LoadBitmap(LPCTSTR lpctstrRes);
// --- In : lpctstrRes : Resource string for the bitmap
// --- Out :
// --- Returns : suceeded or not
// --- Effect : Loads bitmap for system menu and rollup/down states
int ActiveStyle();
// --- In :
// --- Out :
// --- Returns : Returns COXTitleBar::active or COXTitleBar::inactive
// --- Effect :
void SetActivation(int nActivation);
// --- In : nActivation : COXTitleBar::active or COXTitleBar::inactive
// --- Out :
// --- Returns :
// --- Effect : Sets activation style of the Titlebar
virtual void DrawBar(CDC* pDC, BOOL bWithCaption);
// --- In : pDC : device context to draw titlebar on
// bWithCaption : needs caption a redraw?
// --- Out :
// --- Returns :
// --- Effect : Override if you want to draw the titlebar yourself
virtual LRESULT HitTest(UINT nFlags, CPoint& point);
// --- In : nFlags : Like OnLButtonDown nFlags
// point : Like OnLButtonDown point
// --- Out :
// --- Returns :HTSYSMENU, HTCAPTION, HTSIZE and HTNOWHERE.
// --- Effect : Override this function if you want to provide some special
// „hot areas" in the titlebar. Predefined area codes are HTSYSMENU,
// HTCAPTION and HTSIZE. (same as in OnNcHitTest)
virtual void DerivedHitProcessing(LRESULT nHitResult, UINT nFlags, CPoint& point);
// --- In : nHitResult : one of the codes the base class couldn´t interpret
// nFlags : key modifiers used
// point : exact hit point
// --- Out :
// --- Returns :
// --- Effect : Called from base class COXRollup if it encounters a hit result it
// can´t interpret (if you have added other hot areas in your titlebar)
void SetRollupState(int nState);
// --- In : nState : Either SCROLL_UP or SCROLL_DOWN (will be asserted!)
// --- Out :
// --- Returns :
// --- Effect : Sets the Rollup „Button" to either scroll up or down bitmap
BOOL IsRolledUp();
// --- In :
// --- Out :
// --- Returns : whether the COXRollup is rolled up or down
// --- Effect :
void SetSysMenuOpen(BOOL bOpen);
// --- In : bOPen : Open or close system menu (light/dark grayed)
// --- Out :
// --- Returns :
// --- Effect : Sets the Rollup sysmenu to either enabled or disabled
BOOL IsDragging();
// --- In :
// --- Out :
// --- Returns : whether the COXRollup is being dragged or not
// --- Effect :
virtual ~COXTitleBar();
// --- In :
// --- Out :
// --- Returns :
// --- Effect : destructor of the object
protected:
void InvertTracker(CPoint);
void StartDragging();
void EndDragging();
virtual WNDPROC* GetSuperWndProcAddr();
// Generated message map functions
//{{AFX_MSG(CTitleBar)
afx_msg void OnLButtonDown( UINT nFlags, CPoint point );
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg void OnLButtonDblClk( UINT nFlags, CPoint point );
afx_msg void OnPaint();
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
private:
};
/////////////////////////////////////////////////////////////////////////////
inline BOOL COXTitleBar::IsDragging()
{ return m_bDragging; }
inline void COXTitleBar::StartDragging()
{ m_bDragging = TRUE; }
inline void COXTitleBar::EndDragging()
{ m_bDragging = FALSE; }
inline int COXTitleBar::ActiveStyle()
{ return m_nActivation; }
inline void COXTitleBar::DerivedHitProcessing(LRESULT /* nHitResult */, UINT /* nFlags */, CPoint& /* point */)
{ TRACE0("DerivedHitProcessing;no implementation!\n"); }
inline BOOL COXTitleBar::IsRolledUp()
{ return (SCROLL_DOWN == m_nRollupState); }
#endif
//===============================================================================