アルファブレンド・プログラミングチップス
プログラミングチップス
  • BLOG
  • TIPS
  • LINK
  • CONTACT
  • HOME
  • SITEMAP
  • ALPHABREND
TIPS/VisualC++/ツールバーに256色(8bit)の画像を使用する
[ リロード ]   [ ソース ]  [ トップ | 一覧 | 単語検索 | 最新 | バックアップ | ヘルプ ]

トップ > TIPS > VisualC++ > ツールバーに256色(8bit)の画像を使用する
[ ページコメント(0) ] [ トラックバック(0) ]
Counter: 1262, today: 2, yesterday: 1
フローティング中のツールバーを斜めにサイズ変更できるようにする Prev Next 縦書きエディットコントロール

ツールバーに256色(8bit)の画像を使用する

ツールバーは通常4bit16色の画像以外を使用すると
正しく表示されません。
ですのでそれを修正したCExtToolBarを作成しました。

面倒くさいので説明はしませんが、
下記と同様なクラスを作成し、
LoadToolBarを呼ぶ代わりにLoadExtToolBarを呼んでください。

//ExtToolBar.cpp

#include "stdafx.h"
#include "ExtToolBar.h"

struct CToolBarData
{
	WORD wVersion;
	WORD wWidth;
	WORD wHeight;
	WORD wItemCount;
	//WORD aItems[wItemCount]

	WORD* items()
		{ return (WORD*)(this+1); }
};

IMPLEMENT_DYNAMIC(CExtToolBar, CToolBar)
CExtToolBar::CExtToolBar()
{
}

CExtToolBar::~CExtToolBar()
{
}

BEGIN_MESSAGE_MAP(CExtToolBar, CToolBar)
END_MESSAGE_MAP()

BOOL CExtToolBar::LoadExtToolBar(UINT nIDResource)
{
	return LoadExtToolBar(MAKEINTRESOURCE(nIDResource));
}

BOOL CExtToolBar::LoadExtToolBar(LPCTSTR lpszResourceName)
{
	switch( GetBitCount( lpszResourceName ) )
	{
	case 8:
		return LoadExtToolBarNot4( lpszResourceName, ILC_COLOR8 );
	}
	return LoadToolBar( lpszResourceName );
}

BOOL CExtToolBar::LoadExtToolBarNot4( LPCTSTR lpszResourceName, int depth )
{
	CImageList		img;
	CBitmap			bmp;
	HIMAGELIST		himg;
	HBITMAP			hbmp;
	int				i;
	UINT			*pItems;
	BOOL			bResult;


	HINSTANCE hInst = AfxFindResourceHandle(lpszResourceName, RT_TOOLBAR);
	HRSRC hRsrc = ::FindResource(hInst, lpszResourceName, RT_TOOLBAR);
	if (hRsrc == NULL)
		return FALSE;

	HGLOBAL hGlobal = LoadResource(hInst, hRsrc);
	if (hGlobal == NULL)
		return FALSE;

	CToolBarData* pData = (CToolBarData*)LockResource(hGlobal);
	if (pData == NULL)
		return FALSE;
	ASSERT(pData->wVersion == 1);

	himg	= ImageList_Create( 16, 15, depth | ILC_MASK, 0, 32 );
	bmp.LoadBitmap( lpszResourceName );
	hbmp	= (HBITMAP)bmp.GetSafeHandle();
	ImageList_AddMasked( himg, hbmp, RGB(192,192,192) );
	img.Attach( himg );
	GetToolBarCtrl().SetImageList( &img );
	img.Detach();
	DeleteObject( himg );
	bmp.DeleteObject();
	SetSizes( CSize(16 + 7,15 + 6), CSize(16,15) );
	pItems	= new UINT[pData->wItemCount];
	for( i = 0; i < (int)pData->wItemCount; i++ )
	{
		pItems[i]	= pData->items()[i];
	}
	bResult	= SetButtons( pItems, pData->wItemCount );

	UnlockResource(hGlobal);
	FreeResource(hGlobal);
	delete[] pItems;

	return TRUE;
}

int CExtToolBar::GetBitCount(UINT nIDResource)
{
	return GetBitCount(MAKEINTRESOURCE(nIDResource));
}

int CExtToolBar::GetBitCount( LPCTSTR lpszResourceName )
{
	HINSTANCE	hInst = AfxFindResourceHandle(lpszResourceName,RT_BITMAP);
	HRSRC		hRsrc = ::FindResource(hInst,lpszResourceName,RT_BITMAP);
	int			bitcount;


	if (hRsrc == NULL){
		hInst = NULL;
		hRsrc = ::FindResource(hInst,lpszResourceName,RT_BITMAP);
	}
	if (hRsrc == NULL)return 0;

	// determine how many colors in the bitmap
	HGLOBAL hglb;
	if ((hglb = LoadResource(hInst, hRsrc)) == NULL)
		return 0;
	LPBITMAPINFOHEADER lpBitmap = (LPBITMAPINFOHEADER)LockResource(hglb);
	if (lpBitmap == NULL)return 0;
	bitcount	= lpBitmap->biBitCount;
	::FreeResource(hglb);

	return bitcount;
}

//CExtToolBar.h

#pragma once


// CExtToolBar

class CExtToolBar : public CToolBar
{
	DECLARE_DYNAMIC(CExtToolBar)

public:
	CExtToolBar();
	virtual ~CExtToolBar();

protected:
	DECLARE_MESSAGE_MAP()

protected:
	BOOL LoadExtToolBarNot4( LPCTSTR lpszResourceName, int depth );

public:
	BOOL LoadExtToolBar(UINT nIDResource);
	BOOL LoadExtToolBar(LPCTSTR lpszResourceName);
	int GetBitCount( UINT nIDResource );
	int GetBitCount( LPCTSTR lpszResourceName );
};

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

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

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

リロード   差分 ソース ファイル添付 添付ファイル一覧   Wikiトップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS
ページ名:TIPS/VisualC++/ツールバーに256色(8bit)の画像を使用する
ページ作成:dala - 2006/05/28 23:10:57 JST(907d)
最終更新:dala - 2006/05/28 23:10:57 JST(907d)
編集可:dala
リンクページ:TIPS(10h) 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.468 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-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