TNB Library
クラス | 公開メンバ関数 | 限定公開メンバ関数 | 限定公開変数類 | 全メンバ一覧
CCustomWindowFrame クラス

カスタムウィンドウフレーム. [詳解]

#include <TnbMfcCustomWindowFrame.h>

+ CCustomWindowFrame の継承関係図

公開メンバ関数

bool Attach (HWND hWnd)
 [設定] アタッチ [詳解]
 
 CCustomWindowFrame (void)
 コンストラクタ [詳解]
 
void CopyParameter (const CCustomWindowFrame &o)
 [設定] 設定の複製. [詳解]
 
void Destroy (void)
 [設定] 破棄 [詳解]
 
void Detach (void)
 [設定] デタッチ [詳解]
 
HBRUSH GetBackground (bool isActive)
 [取得] 背景ブラシ取得 [詳解]
 
DWORD GetExStyle (void) const
 [取得] 拡張スタイル取得 [詳解]
 
HWND GetSafeHwnd (void) const
 [取得] ウィンドウハンドル取得 [詳解]
 
DWORD GetStyle (void) const
 [取得] スタイル取得 [詳解]
 
bool IsAttached (void) const
 [確認] アタッチ中? [詳解]
 
void ModifyStyle (DWORD dwRemove, DWORD dwAdd)
 [変更] スタイル変更 [詳解]
 
void ModifyStyleEx (DWORD dwRemove, DWORD dwAdd)
 [変更] 拡張スタイル変更 [詳解]
 
BOOL PostMessage (UINT message, WPARAM wParam, LPARAM lParam)
 [処理] PostMessage. [詳解]
 
CDrawingMenuBarReferMenuBar (void)
 [参照] メニューバー参照. [詳解]
 
CDrawingMenuReferPopupMenu (void)
 [参照] メニューバー参照. [詳解]
 
DWORD RegisterMenu (CMenu *pMenu)
 [登録] メニュー登録. [詳解]
 
LRESULT SendMessage (UINT message, WPARAM wParam, LPARAM lParam)
 [処理] SendMessage. [詳解]
 
void SetCloseButtonBitmap (const POINT &pos, CBitmapHandle bmp, int num=4, COLORREF color=CLR_INVALID)
 [設定] Closeボタン設定 [詳解]
 
void SetFrameBitmap (CBitmapHandle bmp)
 [設定] フレームビットマップ設定 [詳解]
 
void SetFrameBitmap (CBitmapHandle bmp1, CBitmapHandle bmp2)
 [設定] フレームビットマップ設定 [詳解]
 
void SetFrameBitmap (const IDrawable &draw, CBitmapHandle bmp)
 [設定] フレームビットマップ設定 [詳解]
 
void SetFrameTransColor (COLORREF color=CLR_AUTOSELECT)
 [設定] 透過色指定 [詳解]
 
void SetFrameWidths (const RECT &frameWidths, int titleHeight=-1)
 [設定] 大きさ設定. [詳解]
 
void SetFrameWidths (int frameWidth=-1, int titleHeight=-1)
 [設定] 大きさ設定. [詳解]
 
void SetHelpButtonBitmap (const POINT &pos, CBitmapHandle bmp, int num=4, COLORREF color=CLR_INVALID)
 [設定] Helpボタン設定 [詳解]
 
void SetMaximumButtonBitmap (const POINT &pos, CBitmapHandle bmp, int num=4, COLORREF color=CLR_INVALID)
 [設定] Maximumボタン設定 [詳解]
 
void SetMinimumButtonBitmap (const POINT &pos, CBitmapHandle bmp, int num=4, COLORREF color=CLR_INVALID)
 [設定] Minimumボタン設定 [詳解]
 
void SetRestoreButtonBitmap (const POINT &pos, CBitmapHandle bmp, int num=4, COLORREF color=CLR_INVALID)
 [設定] Restoreボタン設定 [詳解]
 
void SetTextColor (COLORREF color)
 [設定] テキスト色. [詳解]
 
void SetTitleBitmap (const IDrawable &draw)
 [設定] タイトルバー描画情報指定. [詳解]
 
 ~CCustomWindowFrame (void)
 デストラクタ [詳解]
 

限定公開メンバ関数

virtual void OnAttached (void)
 [通知] アタッチ通知. [詳解]
 
virtual void OnDetached (void)
 [通知] デタッチ通知 [詳解]
 
virtual void OnDetacted (void)
 [通知] デタッチ通知. [詳解]
 
virtual void PreAttach (HWND hWnd)
 [通知] アタッチ直前通知 [詳解]
 
virtual void PreDetach (void)
 [通知] デタッチ直前通知. [詳解]
 

限定公開変数類

HWND m_hWnd
 管理しているウィンドウ [詳解]
 

詳解

カスタムウィンドウフレーム.

ダイアログの NonClient 部分を変更できます。また、透過色を指定し、矩形以外のフレームにも対応します。
覚え書き
ウィンドウのフレーム、ボタンの形状、位置を自由にカスタマイズできます。 キャプションバーは上部固定になります。
使用例
class CFooDlg : public CDialog
{
;
;
};
BOOL CFooDlg::OnInitDialog()
{
CDialog::OnInitDialog();
;
// フレームの設定
CWindowCaptionDrawer ttd(NULL);
ttd.SetBarColor(RGB(255, 0, 0), RGB(0, 0, 0));
m_frame.SetTitleBitmap(ttd);
m_frame.SetFrameBitmap(IDB_FRAME);
m_frame.SetCloseButtonBitmap(CPoint(-6, 5), IDB_CLOSE, 4);
;
// アタッチする。
m_frame.Attach(*this);
;
CCustomWindowFrame(void)
コンストラクタ
todo:
ReadOnly の EDIT でスクロール時、文字が重なってしまう・・・(背景が再描画されない)。
todo:
システムメニュー変化が拾えない。 WM_MENUSELECT が必要。
必要ファイル
TnbMfcCustomWindowFrame.h
日付
08/10/06 新規作成
09/09/29 メニューあるなら、タイトルバーの高さは固定に。
10/04/19 SetTextColor 追加。
10/04/26 ポップアップメニューも対象に。
10/06/15 サイズ変更時にも RGN を設定するようにした。
10/07/20 ホバー状態の処理を修正
11/09/01 内部的に NC 描画時、WM_NCPAINT していたが、直接関数コールに変更。
11/10/12 WM_INITDIALOG の時にもシステムメニューのチェックを行うようにした。

TnbMfcCustomWindowFrame.h239 行目に定義があります。

構築子と解体子

◆ CCustomWindowFrame()

CCustomWindowFrame ( void  )

コンストラクタ

TnbMfcCustomWindowFrame.h245 行目に定義があります。

◆ ~CCustomWindowFrame()

~CCustomWindowFrame ( void  )

デストラクタ

TnbMfcCustomWindowFrame.h254 行目に定義があります。

関数詳解

◆ Attach()

bool Attach ( HWND  hWnd)
inherited

[設定] アタッチ

引数
hWnd対象のウィンドウ
戻り値
true成功。
false失敗。

TnbWindowProcedureHooker.h103 行目に定義があります。

◆ CopyParameter()

void CopyParameter ( const CCustomWindowFrame o)

[設定] 設定の複製.

覚え書き
ボタンや画像の設定をコピーします。
引数
oコピー元。複製するので元は破棄してもかまいません。

TnbMfcCustomWindowFrame.h461 行目に定義があります。

◆ Destroy()

void Destroy ( void  )
inherited

[設定] 破棄

覚え書き
Detach() とは異なり、 PreDetach() , OnDetached() が呼び出されません。

TnbWindowProcedureHooker.h156 行目に定義があります。

◆ Detach()

void Detach ( void  )
inherited

[設定] デタッチ

TnbWindowProcedureHooker.h135 行目に定義があります。

◆ GetBackground()

HBRUSH GetBackground ( bool  isActive)

[取得] 背景ブラシ取得

引数
isActivetrue ならアクティブ、 false なら非アクティブのブラシを返します。
戻り値
背景ブラシ

TnbMfcCustomWindowFrame.h451 行目に定義があります。

◆ GetExStyle()

DWORD GetExStyle ( void  ) const
inherited

[取得] 拡張スタイル取得

戻り値
拡張スタイル

TnbWindowProcedureHooker.h220 行目に定義があります。

◆ GetSafeHwnd()

HWND GetSafeHwnd ( void  ) const
inherited

[取得] ウィンドウハンドル取得

戻り値
NULLアタッチしていない
NULL以外ウィンドウハンドル

TnbWindowProcedureHooker.h176 行目に定義があります。

◆ GetStyle()

DWORD GetStyle ( void  ) const
inherited

[取得] スタイル取得

戻り値
スタイル

TnbWindowProcedureHooker.h211 行目に定義があります。

◆ IsAttached()

bool IsAttached ( void  ) const
inherited

[確認] アタッチ中?

戻り値
trueアタッチ中
false

TnbWindowProcedureHooker.h92 行目に定義があります。

◆ ModifyStyle()

void ModifyStyle ( DWORD  dwRemove,
DWORD  dwAdd 
)
inherited

[変更] スタイル変更

引数
dwRemove除去されるウィンドウ スタイル
dwAdd追加されるウィンドウ スタイル

TnbWindowProcedureHooker.h230 行目に定義があります。

◆ ModifyStyleEx()

void ModifyStyleEx ( DWORD  dwRemove,
DWORD  dwAdd 
)
inherited

[変更] 拡張スタイル変更

引数
dwRemove除去されるウィンドウ 拡張スタイル
dwAdd追加されるウィンドウ 拡張スタイル

TnbWindowProcedureHooker.h245 行目に定義があります。

◆ OnAttached()

virtual void OnAttached ( void  )
protectedvirtual

[通知] アタッチ通知.

アタッチされたときに通知されます。

CWindowProcedureHookerを再実装しています。

TnbMfcCustomWindowFrame.h548 行目に定義があります。

◆ OnDetached()

virtual void OnDetached ( void  )
protectedvirtualinherited

[通知] デタッチ通知

TnbWindowProcedureHooker.h276 行目に定義があります。

◆ OnDetacted()

virtual void OnDetacted ( void  )
protectedvirtual

[通知] デタッチ通知.

デタッチされたときに通知されます。

TnbMfcCustomWindowFrame.h588 行目に定義があります。

◆ PostMessage()

BOOL PostMessage ( UINT  message,
WPARAM  wParam,
LPARAM  lParam 
)
inherited

[処理] PostMessage.

アタッチしているウィンドウにPostMessageします。

引数
messageメッセージ。
wParamWPARAM。
lParamLPARAM。
戻り値
結果。

TnbWindowProcedureHooker.h202 行目に定義があります。

◆ PreAttach()

virtual void PreAttach ( HWND  hWnd)
protectedvirtual

[通知] アタッチ直前通知

引数
hWndアタッチするHWND。

CWindowProcedureHookerを再実装しています。

TnbMfcCustomWindowFrame.h510 行目に定義があります。

◆ PreDetach()

virtual void PreDetach ( void  )
protectedvirtual

[通知] デタッチ直前通知.

デタッチする直前に通知されます。

CWindowProcedureHookerを再実装しています。

TnbMfcCustomWindowFrame.h579 行目に定義があります。

◆ ReferMenuBar()

CDrawingMenuBar & ReferMenuBar ( void  )

[参照] メニューバー参照.

保持しているメニューバーの参照を返します。

戻り値
参照.

TnbMfcCustomWindowFrame.h489 行目に定義があります。

◆ ReferPopupMenu()

CDrawingMenu & ReferPopupMenu ( void  )

[参照] メニューバー参照.

保持しているメニューバーの参照を返します。

戻り値
参照.

TnbMfcCustomWindowFrame.h499 行目に定義があります。

◆ RegisterMenu()

DWORD RegisterMenu ( CMenu *  pMenu)
inherited

[登録] メニュー登録.

本インスタンスがアタッチしているウィンドウに関連づいているメニューを 登録します。戻り値のベースクッキーを使い、メニューのオーナードローのアイテムのデータを設定することで、 オーナードローメッセージを処理することが出来ます。

覚え書き
通常 CDrawingMenu CDrawingMenuBar クラス内で、暗黙的に使用されます。
引数
pMenuメニュー。作成してある必要があります。
戻り値
ベースクッキー。

TnbMfcDrawingMenu.h58 行目に定義があります。

◆ SendMessage()

LRESULT SendMessage ( UINT  message,
WPARAM  wParam,
LPARAM  lParam 
)
inherited

[処理] SendMessage.

アタッチしているウィンドウにSendMessageします。

引数
messageメッセージ。
wParamWPARAM。
lParamLPARAM。
戻り値
結果。

TnbWindowProcedureHooker.h189 行目に定義があります。

◆ SetCloseButtonBitmap()

void SetCloseButtonBitmap ( const POINT &  pos,
CBitmapHandle  bmp,
int  num = 4,
COLORREF  color = CLR_INVALID 
)

[設定] Closeボタン設定

引数
posボタン位置。座標がマイナスの場合、右端(下端)からのオフセットになります。
bmpボタン画像。同じ大きさの画像を、Normal,Press,Hover,Disable の順に横に並べた画像を指定します。
numボタン画像の数。通常省略します(4になります)。
color透過する色。 CLR_INVALID を指定すると、透過色はなし。

TnbMfcCustomWindowFrame.h374 行目に定義があります。

◆ SetFrameBitmap() [1/3]

void SetFrameBitmap ( CBitmapHandle  bmp)

[設定] フレームビットマップ設定

引数
bmp画像。この画像は 9分割され、それぞれの隅、枠、中央に使われます。

TnbMfcCustomWindowFrame.h267 行目に定義があります。

◆ SetFrameBitmap() [2/3]

void SetFrameBitmap ( CBitmapHandle  bmp1,
CBitmapHandle  bmp2 
)

[設定] フレームビットマップ設定

引数
bmp1アクティブ時の画像。この画像は 9分割され、それぞれの隅、枠、中央に使われます。
bmp2非アクティブ時の画像。この画像は 9分割され、それぞれの隅、枠、中央に使われます。

TnbMfcCustomWindowFrame.h281 行目に定義があります。

◆ SetFrameBitmap() [3/3]

void SetFrameBitmap ( const IDrawable draw,
CBitmapHandle  bmp 
)

[設定] フレームビットマップ設定

引数
drawフレーム描画情報。
bmp中央のブラシ画像を指定します。

TnbMfcCustomWindowFrame.h297 行目に定義があります。

◆ SetFrameTransColor()

void SetFrameTransColor ( COLORREF  color = CLR_AUTOSELECT)

[設定] 透過色指定

覚え書き
フレームビットマップの透過色を指定できます。これにより任意の形のウィンドウが作成できます。 本メソッドを使わない場合、デフォルトは矩形のウィンドウになります。
引数
color透過色。 CLR_AUTOSELECT を使うと右下の色を透過色とします。

TnbMfcCustomWindowFrame.h311 行目に定義があります。

◆ SetFrameWidths() [1/2]

void SetFrameWidths ( const RECT &  frameWidths,
int  titleHeight = -1 
)

[設定] 大きさ設定.

NonClientの上下左右の幅、および、タイトルバーの高さを指定します。

注意
メニューがあるウィンドウの場合、本メソッドは正しく機能しません。メニュー無しの場合のみ使用してください。
引数
frameWidthsNoClientの上下左右の幅(RECT本来の使い方ではない)
titleHeightタイトルバーの高さ。省略するとシステムの高さが使われます。

TnbMfcCustomWindowFrame.h334 行目に定義があります。

◆ SetFrameWidths() [2/2]

void SetFrameWidths ( int  frameWidth = -1,
int  titleHeight = -1 
)

[設定] 大きさ設定.

NonClientの上下左右の幅、および、タイトルバーの高さを指定します。

注意
メニューがあるウィンドウの場合、本メソッドは正しく機能しません。メニュー無しの場合のみ使用してください。
引数
frameWidthNoClientの上下左右のすべての幅。省略するとシステムの幅が使われます。
titleHeightタイトルバーの高さ。省略するとシステムの高さが使われます。

TnbMfcCustomWindowFrame.h353 行目に定義があります。

◆ SetHelpButtonBitmap()

void SetHelpButtonBitmap ( const POINT &  pos,
CBitmapHandle  bmp,
int  num = 4,
COLORREF  color = CLR_INVALID 
)

[設定] Helpボタン設定

引数
posボタン位置。座標がマイナスの場合、右端(下端)からのオフセットになります。
bmpボタン画像。同じ大きさの画像を、Normal,Press,Hover,Disable の順に横に並べた画像を指定します。
numボタン画像の数。通常省略します(4になります)。
color透過する色。 CLR_INVALID を指定すると、透過色はなし。

TnbMfcCustomWindowFrame.h426 行目に定義があります。

◆ SetMaximumButtonBitmap()

void SetMaximumButtonBitmap ( const POINT &  pos,
CBitmapHandle  bmp,
int  num = 4,
COLORREF  color = CLR_INVALID 
)

[設定] Maximumボタン設定

引数
posボタン位置。座標がマイナスの場合、右端(下端)からのオフセットになります。
bmpボタン画像。同じ大きさの画像を、Normal,Press,Hover,Disable の順に横に並べた画像を指定します。
numボタン画像の数。通常省略します(4になります)。
color透過する色。 CLR_INVALID を指定すると、透過色はなし。

TnbMfcCustomWindowFrame.h400 行目に定義があります。

◆ SetMinimumButtonBitmap()

void SetMinimumButtonBitmap ( const POINT &  pos,
CBitmapHandle  bmp,
int  num = 4,
COLORREF  color = CLR_INVALID 
)

[設定] Minimumボタン設定

引数
posボタン位置。座標がマイナスの場合、右端(下端)からのオフセットになります。
bmpボタン画像。同じ大きさの画像を、Normal,Press,Hover,Disable の順に横に並べた画像を指定します。
numボタン画像の数。通常省略します(4になります)。
color透過する色。 CLR_INVALID を指定すると、透過色はなし。

TnbMfcCustomWindowFrame.h387 行目に定義があります。

◆ SetRestoreButtonBitmap()

void SetRestoreButtonBitmap ( const POINT &  pos,
CBitmapHandle  bmp,
int  num = 4,
COLORREF  color = CLR_INVALID 
)

[設定] Restoreボタン設定

引数
posボタン位置。座標がマイナスの場合、右端(下端)からのオフセットになります。通常、Maximumボタンと同じ場所を指定します。
bmpボタン画像。同じ大きさの画像を、Normal,Press,Hover,Disable の順に横に並べた画像を指定します。
numボタン画像の数。通常省略します(4になります)。
color透過する色。 CLR_INVALID を指定すると、透過色はなし。

TnbMfcCustomWindowFrame.h413 行目に定義があります。

◆ SetTextColor()

void SetTextColor ( COLORREF  color)

[設定] テキスト色.

引数
colorテキスト色

TnbMfcCustomWindowFrame.h436 行目に定義があります。

◆ SetTitleBitmap()

void SetTitleBitmap ( const IDrawable draw)

[設定] タイトルバー描画情報指定.

覚え書き
フレームビットマップでタイトルを書くことも出来ますが、別途子のメソッドで指定することも出来ます。 指定しない場合、フレーム描画上に CWindowCaptionDrawer() でアイコンとウィンドウテキストが描画されます。
引数
draw描画情報

TnbMfcCustomWindowFrame.h322 行目に定義があります。

メンバ詳解

◆ m_hWnd

HWND m_hWnd
protectedinherited

管理しているウィンドウ

TnbWindowProcedureHooker.h296 行目に定義があります。