アルファブレンド・プログラミングチップス
プログラミングチップス
  • BLOG
  • TIPS
  • LINK
  • CONTACT
  • HOME
  • SITEMAP
  • ALPHABREND
TIPS/VisualC++/CDockBarを継承する
[ リロード ]   [ ソース ]  [ トップ | 一覧 | 単語検索 | 最新 | バックアップ | ヘルプ ]

トップ > TIPS > VisualC++ > CDockBarを継承する
[ ページコメント(0) ] [ トラックバック(0) ]
Counter: 1637, today: 2, yesterday: 6
縦書きエディットコントロール Prev Next windows98でリッチエディットが動かない?

CDockBarを継承する

ツールバーなどのコントロールバーが
ドッキング時にサイズ変更したりするのには、
CDockBarが使用されています。


CDockBarはWM_SIZEPARENTのメッセージを受けて
OnSizeParentを実行しているのですが、
これがPreTranslateMessage関数などを使用しても
改造することができません。
これを改造するためには
まずCDockBarを継承したクラスを作成することが必要です。



ところがCDockBarはVC.NETでは何故か継承候補として選べません。
ですのでとりあえずCControlBarを継承し、
手書きでクラスをCDockBarに置き換えれば大丈夫です。

以下の感じになります。

// ExtDockBar.cpp

#include "ExtDockBar.h"

 
IMPLEMENT_DYNAMIC(CExtDockBar, CDockBar)
CExtDockBar::CExtDockBar()
{
}

CExtDockBar::~CExtDockBar()
{
}


BEGIN_MESSAGE_MAP(CExtDockBar, CDockBar)
	ON_MESSAGE(WM_SIZEPARENT, OnSizeParent)
END_MESSAGE_MAP()



// CExtDockBar メッセージ ハンドラ

void CExtDockBar::OnUpdateCmdUI(CFrameWnd* /*pTarget*/, BOOL /*bDisableIfNoHndler*/)
{
}

LRESULT CExtDockBar::OnSizeParent(WPARAM wParam, LPARAM lParam)
{
	if( theApp.m_pMainWnd && theApp.m_pMainWnd->m_hWnd && theApp.m_pMainWnd->IsIconic() )
	{
		theApp.m_pMainWnd->OpenIcon();
	}

	return CDockBar::OnSizeParent( wParam, lParam );
}

// CExtDockBar
#pragma once

class CExtDockBar : public CDockBar
{
	DECLARE_DYNAMIC(CExtDockBar)

public:
	CExtDockBar();
	virtual ~CExtDockBar();
	virtual void OnUpdateCmdUI(CFrameWnd* pTarget, BOOL bDisableIfNoHndler);

protected:
	//{{AFX_MSG(CExtDockBar)
	afx_msg LRESULT OnSizeParent(WPARAM, LPARAM);
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

で、クラスを作るだけではしょうがないので、
CDockBarをCExtDockBarに置き換えるために、
デフォルトでCDockBarを作成している場所を改造します。


EnableDocking関数を最初に使用していると思いますが、
この関数の代わりにExtEnableDocking関数を作って
そちらを使用するようにします。

void CMainFrame::ExtEnableDocking(DWORD dwDockStyle)
{
	// must be CBRS_ALIGN_XXX or CBRS_FLOAT_MULTI only
	ASSERT((dwDockStyle & ~(CBRS_ALIGN_ANY|CBRS_FLOAT_MULTI)) == 0);

	m_pFloatingFrameClass = RUNTIME_CLASS(CMiniDockFrameWnd);
	for (int i = 0; i < 4; i++)
	{
		if (dwDockBarMap[i][1] & dwDockStyle & CBRS_ALIGN_ANY)
		{
			CDockBar* pDock = (CDockBar*)GetControlBar(dwDockBarMap[i][0]);
			if (pDock == NULL)
			{
				CExtDockBar *pExtDock = new CExtDockBar;
				if (!pExtDock->Create(this,
				 	WS_CLIPSIBLINGS|WS_CLIPCHILDREN|WS_CHILD|WS_VISIBLE |
						dwDockBarMap[i][1], dwDockBarMap[i][0]))
				{
					AfxThrowResourceException();
				}
			}
		}
	}
}

これで継承完了です。
好きに改造することができます。



改造すると言っても一体何ができるんだと思いますが…
自分はoleサーバーをアイコン化してから
Wordに貼り付けてあるオブジェクトをダブルクリックすると
oleサーバーが開かれた時にツールバーなどの位置が
バラバラになってしまうのでなおしてほしいという要望を受け
やむなくMFCを睨みました。
これもわりに合わない作業…

付箋機能(wema) メニュー 
付箋機能 [新規] [ごみ箱] [透明] [更新] [リスト] [ヘルプ]  付箋検索: 自動更新:
付箋の編集
文字色: 背景色:
お名前:  線接続id:

[ごみ箱] [透明] [リスト] [ヘルプ]  付箋検索:

ページコメント
 
投稿された内容の著作権はコメントの投稿者に帰属します。

リロード   差分 ソース ファイル添付 添付ファイル一覧   Wikiトップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS
ページ名:TIPS/VisualC++/CDockBarを継承する
ページ作成:dala - 2006/06/08 22:00:13 JST(896d)
最終更新:dala - 2006/06/08 22:04:13 JST(896d)
編集可:dala
リンクページ:TIPS(11h) VisualC++(907d)
Modified by dala

"PukiWikiMod" 1.5.1 Copyright © 2003-2005 ishii & nao-pon. License is GNU/GPL.
Based on "PukiWiki" by PukiWiki Developers Team
Powered by PHP 5.2.6

HTML convert time to 0.495 sec.
Go Page Top
メインメニュー
ホーム プログラミングチップス 最新ページ一覧 ページ一覧 日記 掲示板 ダウンロード FAQ サイトマップ リンク集 お問い合わせ
WordPress カテゴリ一覧
  • Akelos
  • CakePHP
  • Flex
  • ちいたん
  • 日記
TIPS

  • CakePHP
  • CentOS
  • Flex
  • PHP
  • VisualC++
日記カレンダー
2008年 11月
日 月 火 水 木 金 土
« 9月    
 1
2345678
9101112131415
16171819202122
23242526272829
30  
最新チップス
2008-11-21
  • ヘルプ
2008-11-20
  • TIPS
2008-10-14
  • TIPS/VisualC++/縦書きエディットコントロール
2008-6-9
  • TIPS/Flex
2008-5-24
  • TIPS/CakePHP/複数形
2008-4-15
  • TIPS/PHP
2008-3-21
  • TIPS/CakePHP/scripts_for_layoutとは?
2008-3-10
  • TIPS/CakePHP
2008-3-6
  • TIPS/CakePHP/cronを使う
  • TIPS/Flex/サウンドをループ
日記最近の投稿
  • 2008-9-9
    • MySQL文字列の数値変換
  • 2008-8-28
    • XOOPSの外部利用
  • 2008-7-17
    • asp.netのタスク
  • 2008-5-15
    • 最近
  • 2008-4-24
    • オリジナルのView
  • 2008-4-1
    • Yahooが!
    • mashupedia閉鎖
  • 2008-3-31
    • ヒゲシミュレータ
  • 2008-3-28
    • Modelの追加方法
  • 2008-3-26
    • scripts_for_layout続き
日記月別過去ログ
  • 2008年 9月
  • 2008年 8月
  • 2008年 7月
  • 2008年 5月
  • 2008年 4月
  • 2008年 3月
  • 2008年 2月
  • 2007年 12月
  • 2007年 11月
  • 2007年 10月
  • 2007年 9月
  • 2007年 8月
  • 2007年 7月
  • 2007年 6月
  • 2007年 5月
  • 2007年 4月
  • 2007年 3月
  • 2007年 1月
  • 2006年 12月
  • 2006年 11月
  • 2006年 10月
  • 2006年 9月
  • 2006年 8月
  • 2006年 7月
  • 2006年 6月
  • 2006年 5月
日記検索
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
Powered by XOOPS Cube 2.0 © 2005-2006 The XOOPS Project theme design by BCOOL