DinopSearchBarとCOMプログラミング(タブブラウザへの対応)

   DinopSearchBarをタブブラウザ内で使用する。

   SDIやMDIで適当なプロジェクトを作成する。その際、ツールバーはInternetExplorer
   スタイル...Rebarを使う設定にする。Rebarに対しDinopSearchBarの表示に必要な
   大きさのダミーウインドウを追加し、その領域にバーを表示させている。

   このサンプルはバーの表示のみを行っている。Ver1.56で追加された新しいインターフェ
   ースを使い任意のHTMLビューに検索結果を表示させる方法は以下のプロジェクトを参考
   のこと。

     DinopSearchBarを表示させたMDIブラウザのソースファイル
     このソースファイルはサンプルのため再配布その他禁止です。各自の責任で御使用ください。


   ※ このサンプルプログラムはDinopSearchBar Ver1.56以降のインストールが必要です

#include "atlbase.h"
#import "C:\Program Files\dinop\DinopSearchBar\DinopSearchBar.dll" no_namespace

const CLSID CLSID_DinopSearchBarBand = {0x509AC252,0x12BD,0x11d5,{0x97,0x39,0x00,0x50,0x04,0xC0,0x99,0xCF}};

#define		DBIF_VIEWMODE_TABBROWSER		100			//タブブラウザモード:GetBandInfoのdwViewModeで指定



class CMainFrame : public CMDIFrameWnd
{
	DECLARE_DYNAMIC(CMainFrame)

public:

	CComPtr<IDinopSearchBarBand>	m_lpDinop;		//■■■■■■■■■追加■■■■■■■■■
	CWnd	m_wndDinopSearchbar;	//■■■■■■■■■追加■■■■■■■■■

	...(省略)
};



int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;

	if (!m_wndToolBar.CreateEx(this) ||
		!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
	{
		TRACE0("Failed to create toolbar\n");
		return -1;      // 作成に失敗
	}

	//超適当だけどとりあえずウインドウ作成
	if(!m_wndDinopSearchbar.Create(NULL,"test",0,CRect(0,0,0,0),this,IDR_MAINFRAME))		//追加■■■■■■■■■■
	{
		TRACE0("DinopSearchBar用ウインドウの作成失敗\n");
		return	-1;     // 作成に失敗														//追加■■■■■■■■■■
	}

	//■■■■■■■■■■■■■■■■■■■追加■■■■■■■■■■■■■■■■■■
	HRESULT				hr;
	CComPtr<IUnknown>	lpUnknown;

	//IDinopSearchBarBandインスタンスの作成
	::CoInitialize(NULL);										//COMの初期化
	hr= lpUnknown.CoCreateInstance(CLSID_DinopSearchBarBand);	//IDinopSearchBarBandの作成
	if(SUCCEEDED(hr))
		hr = lpUnknown->QueryInterface(&m_lpDinop);				//IDinopSearchBarBandの取得


	// DinopSearchBarの表示に必要なウインドウサイズを取得する
	// 取得にはIDeskBand::GetBandInfoを用いる
	//
	// &&&&DinopSearchbarを【タブブラウザ】モードに変更する設定も兼ねる!!
	//
	if(m_lpDinop != NULL)
	{
		CComPtr<IDeskBand>		lpBand;
		DESKBANDINFO			sBandInfo;

		ZeroMemory(&sBandInfo,sizeof(DESKBANDINFO));
		sBandInfo.dwMask = DBIM_MINSIZE;				//取得するのはツールバーのサイズのみ!

		hr = m_lpDinop->QueryInterface(&lpBand);			//IDeskBandの取得
		if((SUCCEEDED(hr) && (lpBand != NULL))
			hr = lpBand->GetBandInfo(0,DBIF_VIEWMODE_TABBROWSER,&sBandInfo);	//DESKBANDINFO取得およびタブブラウザ・モード設定
		//				   ■↑これが重要?■
		if(SUCCEEDED(hr)
			m_wndDinopSearchbar.MoveWindow(0,0,sBandInfo.ptMinSize.x,sBandInfo.ptMinSize.y);	//ウインドウサイズの設定
	}
	//	::CoUninitialize();				//COMの開放(アプリケーション終了時呼び出す)
	//■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■



	//ReBarへの登録
	if (!m_wndReBar.Create(this) ||
		!m_wndReBar.AddBar(&m_wndToolBar) ||
		!m_wndReBar.AddBar(&m_wndDinopSearchbar))			//変更■■■■■■■■
	{
		TRACE0("Failed to create rebar\n");
		return -1;      // 作成に失敗
	}



	//■■■■■■■■■■■■■■■■■■■追加■■■■■■■■■■■■■■■■■■
	//IDinopSearchBarBandの操作
	if(m_lpDinop != NULL)
	{
		if(SUCCEEDED(hr))
			hr = m_lpDinop->CreateToolbar((long)m_wndDinopSearchbar.m_hWnd);		//ダイアログバーへ割り付ける
	}
	//■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■



	// TODO: もしツール チップスが必要ない場合、ここを削除してください。
	m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
		CBRS_TOOLTIPS | CBRS_FLYBY);

	return 0;
}

カテゴリー「VC++ TIPS」 のエントリー