C:\home\SVGCats_src\src\CatsPropBar.h
1|#if !defined(AFX_CATSPROPBAR_H__EDB14927_06A9_4A20_B660_A7626CD1A418__INCLUDED_) 2|#define AFX_CATSPROPBAR_H__EDB14927_06A9_4A20_B660_A7626CD1A418__INCLUDED_ 3| 4|#if _MSC_VER > 1000 5|#pragma once 6|#endif // _MSC_VER > 1000 7|// CatsPropBar.h : ヘッダー ファイル 8|// 9| 10|#include "InitDialogBar.h" 11| 12|///////////////////////////////////////////////////////////////////////////// 13|// CCatsPropBar ダイアログ 14|// 15|//・Window メッセージをこのクラスで受け取ることができる 16|//・非常時の状態でウィンドウの位置を設定できる。(FloatControlBarは非表示でも一瞬表示してしまう) 17|//・FloatControlBar で設定した座標と GetWindowRect で取得できる座標の誤差を内部で調整 18|// 19| 20|class CCatsPropBar : public CInitDialogBar 21|{ 22|public: 23| bool m_bCreated; 24| bool m_bVisible; 25| bool m_bDocking; 26| DWORD m_EnableDocking_Style; // EnableDocking の設定値の退避 取得関数がMFCに無いため 27| 28| int m_X, m_Y; /* FloatControlBar に渡す座標. FloatContolBar(0,0) とすると丁度画面の左上端 */ 29| int m_DX, m_DY; /* FloatControlBar した x,y から GetWindowRect で得られする x,y の誤差 */ 30| /* おそらく、枠の分の誤差。 */ 31| 32| CFrameWnd* m_Parent; // GetParent では Docking 状態によって変わるため 33| bool m_bParentShow; 34| bool m_bFirstMoveDone; 35| bool m_bNotFloatingYet; 36| RECT m_prevParentRc; 37| bool m_bPrevParentIconic; 38| 39| 40| BOOL Create(CWnd * pParentWnd, LPCTSTR lpszTemplateName, 41| UINT nStyle, UINT nID, BOOL bChange, bool bParentShow ); 42| BOOL Create(CWnd * pParentWnd, UINT nIDTemplate, 43| UINT nStyle, UINT nID, BOOL bChange, bool bParentShow ); 44| 45| void SetVisible( bool b ); 46| inline bool GetVisible() { SyncXY(); return m_bVisible; } 47| 48| void OnUpdate(); 49| 50| void SetDocking( bool bDocking ); 51| inline bool GetDocking() { SyncXY(); return m_bDocking; } 52| void EnableDocking( DWORD style, bool bDocking = true ); 53| 54| void OnParentMove( int x, int y ); 55| void OnParentSize( UINT nType, int cx, int cy ); 56| void OnChgParentShow(); 57| 58| void SetFloatPos( int x, int y ); 59| void SetFloatStepPos( int x, int y ); 60| inline int GetFloatX() { SyncXY(); return m_X; } 61| inline int GetFloatY() { SyncXY(); return m_Y; } 62| inline int GetFloatStepX() { SyncXY(); return m_X - m_prevParentRc.right; } 63| inline int GetFloatStepY() { SyncXY(); return m_Y - m_prevParentRc.top; } 64| 65| 66|// 以下は内部用 67| void Show(); 68| void Hide(); 69| bool MoveInScreen(); 70| void SyncXY(); 71| inline bool GetShown() { return m_bVisible && m_bParentShow; } 72| 73|// コンストラクション 74|public: 75| CCatsPropBar(); // 標準のコンストラクタ 76| 77|// ダイアログ データ 78| //{{AFX_DATA(CCatsPropBar) 79| enum { IDD = IDD_PropBar }; 80| // メモ: ClassWizard はこの位置にデータ メンバを追加します。 81| //}}AFX_DATA 82| 83| 84|// オーバーライド 85| // ClassWizard は仮想関数のオーバーライドを生成します。 86| //{{AFX_VIRTUAL(CCatsPropBar) 87| protected: 88| virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV サポート 89| //}}AFX_VIRTUAL 90| 91|// インプリメンテーション 92|protected: 93| 94| // 生成されたメッセージ マップ関数 95| //{{AFX_MSG(CCatsPropBar) 96| virtual BOOL OnInitDialog(); 97| afx_msg void OnSize( UINT nType, int cx, int cy ); 98| //}}AFX_MSG 99| LRESULT CCatsPropBar::OnSizeParent(WPARAM, LPARAM lParam); 100| DECLARE_MESSAGE_MAP() 101|}; 102| 103|//{{AFX_INSERT_LOCATION}} 104|// Microsoft Visual C++ は前行の直前に追加の宣言を挿入します。 105| 106|#endif // !defined(AFX_CATSPROPBAR_H__EDB14927_06A9_4A20_B660_A7626CD1A418__INCLUDED_) 107| 108|