「アルファ・ボタン」のドキュメント Ver0.802b

 概要

 「アルファボタン」は、CBitmapButtonを継承して作られたMFCボタンクラスのライブラリです。
 圧縮ファイルには、サンプルプロジェクトを付けてありますので、すぐさま動作を確認することが出来ます。
 releaseフォルダにすぐ実行出来るプログラムも入ってます。

特徴
・ホバー状態をサポートしています。
・ボタンの5状態を画像で表示することが出来ます。
・アルファ付の画像をサポートしています。Windows2000以降。
・ツールチップをサポートしています。

 重要な変更点(Ver0.701→Ver0.802b)

(Ver0.801→Ver0.802b)
GDI+の処理が不要なのでコメント追加。
サンプルにアクアボタンを追加。

(Ver0.801→Ver0.802)
Ver0.802まではサンプルのダイアログの設定もれでちゃんと背景が透けてませんでした。すいません。
詳しくは使い方の例の9.を見てください。

(Ver0.701→Ver0.801)
・AlphaButtonのライブラリだけ別フォルダ(AlphaButtonフォルダ)に分けました。
・GDI+を使用しないライブラリとなりました。Gdiplus.dllは不要となります。
・リソースにpng画像を使うことが出来るようになりました。サンプル中の1つだけリソース画像を使っています。

 動作環境

[対象OS]
・Windows 2000(SP4以上)
・Windows XP(SP2以上)
・Windows Vista

 ※(注) 64bit版OS、Windows Server 2003では動作確認をしておりません。ご注意ください。 Windows2000以前では動きません。

[MFC]
・MFCを使用したライブラリですので、無料版のVisualStudio2005や2008では利用できません。

[プロジェクト]
・サンプルはVisualStudio2005のプロジェクトで作られています。
他のVisualStudio2003やVisualStudio6.0の場合は、そのまま使えませんのでプログラムを参考にしてください。
自力でリソース等を移植すれば動くとは思いますが。

 サンプルについて説明



背景が透過している事をわかり易いようにハッチ背景にしました。
(1)一番上のボタン。角が丸で背景が角だけ見えているボタンです。
(2)真ん中のボタン。ボタン全体が半透明で背景が透けて見えるボタンです。
(3)一番下のボタン。ボタン上のテキストがcaptionで書いてあるので、テキストが変更可能なボタンです。
このボタンの画像だけはリソース登録してあります。

 使い方の例

サンプルでは■で記載されている場所がアルファボタンのために書き換えた場所です。
6.〜8.に関しては、通常は不要(GDI+を使う場合だけ必要)です。

1.AlphaButton.cppとAlphaButton.hをプロジェクトに追加する。

2.ダイアログ上にボタンを配置する。

3.ボタンのコントロール変数を作成する。

4.ヘッダをインクルードする。サンプルでは、AlphaSampleDlg.hの5行目。
#include "AlphaButton.h"

5.コントロールのクラス名をCButtonからCAlphaButtonに書き換える。AlphaSampleDlg.hの37〜40行目。

6.GDI+の初期化変数を追加する。AlphaSampleDlg.hの27行目。
 ULONG_PTR m_gdiplusToken; //■GDI+制御用

7.コンストラクタにGDI+の初期化を追加。AlphaSampleDlg.cppの57〜59行目。
// ■GDI+初期化
 Gdiplus::GdiplusStartupInput gdiplusStartupInput;
 Gdiplus::GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);

8.デストラクタにGDI+の終了処理を追加。AlphaSampleDlg.cppの64〜65行目。
    // ■GDI+終了
 Gdiplus::GdiplusShutdown(m_gdiplusToken);


9.ボタン背景を透明に抜きます。Ver0.802のサンプルまで抜けてました。すいません。
ダイアログにON_WM_CTLCOLORのメッセージハンドラ(OnCtlColor)を追加します。AlphaSampleDlg.cppの195〜215行目。
このハンドラ内の処理のうち、アルファボタンとして重要なのは197〜201行目の処理です。

 CBrush nullb;
 case CTLCOLOR_BTN: // ■透過ボタンに必要な処理。
  // ボタン背景を透過する。
  nullb.CreateStockObject(NULL_BRUSH);
  pDC->SetBkMode(TRANSPARENT);
  return nullb;


10.OnInitDialogでボタンに画像データを読み込んで割り当てます。AlphaSampleDlg.cppの118〜129行目。
プログラムと同じフォルダに置いてください。
ただし、ダイアログでデバッグ中はソースと同じフォルダに置かないと読み込めません。

//■ボタンに画像を割り当てます。
 if( FALSE == m_cBtn1.LoadBitmap(_T("sample_btn1.png")) ) { // ファイルから。
  AfxMessageBox( _T("ボタン画像の読み込み失敗") );
 }
 if( FALSE == m_cBtn2.LoadBitmap(_T("sample_btn2.png")) ) { // ファイルから。
  AfxMessageBox( _T("ボタン画像の読み込み失敗") );
 }
 if( FALSE == m_cBtn3.LoadBitmap(IDR_PNG1,_T("png")) ) {  // リソースから。
  AfxMessageBox( _T("ボタン画像の読み込み失敗") );
 }
 if( FALSE == m_cBtn4.LoadBitmap(IDR_PNG2,_T("png")) ) {  // リソースから。
  AfxMessageBox( _T("ボタン画像の読み込み失敗") );
 }

11.OnInitDialogでボタンにツールチップ(説明)を設定します。AlphaSampleDlg.cppの131〜134行目。

 // ■ツールチップの設定。
 m_cBtn1.SetToolTipText(_T("角が半透明のボタンです。"));
 m_cBtn2.SetToolTipText(_T("全体が半透明のボタンです。"));
 m_cBtn3.SetToolTipText(_T("キャプションを変更できるボタンです。"));
 m_cBtn4.SetToolTipText(_T("アクアボタンです。"));

以上です。

 リソースにpngを追加する方法。

(1)リソースエディタで「リソースの追加」を行います。
(2)「リソースの追加」ダイアログでインポートを選びます。
(3)ファイルの種類を*.*にして追加したい*.pngファイルを選びます。
(4)カスタムリソースの種類にpngを追加します。

以上でリソースに追加されました。
使う場合は、LoadBitmapで読み込んでください。

 ボタン画像データの作り方。

ボタン画像は、アルファ対応ですのでアルファ付きのpngファイルを作成してください。
その場合は、同じ大きさの5つの状態の画像を1つの画像ファイルとしてまとめてます。
上から順に、通常状態、ONカーソル時、押下時、無効時、フォーカス時です。
(サンプル)


ボタン画像の作成には、姉妹ツールである「ボタン工房」を利用していただくと楽に作成することができます。
私のホームページで入手してください。
http://hp.vector.co.jp/authors/VA047235/
この画像は、「ボタン工房Ver0.904」時点のものです。 
 

 ライセンス(著作権・使用条件・免責)

ライセンスは、修正BSDライセンスを元にしています。

CAlphaButton Copyright(C)2007 ソフト屋 巣 All rights reserved.
1.ソース・コード形式であれバイナリ形式であれ、変更の有無にかかわらず、以下の条件を満たす限りにおいて、再配布および使用を許可します
1-1.ソース・コード形式で再配布する場合、上記著作権表示、本条件書および第2項の責任限定規定を必ず含めてください。
1-2.バイナリ(DLLやライブラリ等)形式で再配布する場合、上記著作権表示、本条件書および下記責任限定規定を、配布物とともに提供される文書および/または他の資料に必ず含めてください。
1-3.アプリケーションに組み込んで配布する場合は特に著作権表示は必要ありませんが、下記責任限定規定を、配布物とともに提供される文書および/または他の資料に含めてください。
2.本ソフトウェアは無保証です。自己責任で使用してください。
 3.著作権者の名前を、広告や宣伝に勝手に使用しないでください。

 サポート

 動作の不具合や要望等は、ホームページにサポート掲示板を用意しましたので、ご利用ください。できる範囲の中で対処させていただきます。不具合については使用環境を記載いただけると解析の手助けになります。 

名称 :ソフト屋 巣
URL   : http://hp.vector.co.jp/authors/VA047235/
e-mail: メールアドレス

※(注) スパムメールやウィルスメールのターゲットにされますので、WEB上に当方のメールアドレスを記載することはご遠慮ください。URLは問題ありません。

※記入例です。
#-------------------
【ソフト名】
 アルファボタン・ライブラリ

【問題点】できるだけ細かく行った操作や表示されたメッセージをお願いします。
 ボタンのグラフィックが表示されません。

【バージョン】AlphaButton.cppの先頭の方に書かれたバージョン情報の番号をお書きください。
CAlphaButton Ver0.701

【使用OS】
 Windows XP(SP2)

【問題となったプログラムの部分】
 // ■ボタンに画像を割り当てます。
 if( FALSE == m_cBtn1.LoadBitmap(_T("sample_btn1.png")) ) {
  AfxMessageBox( _T("ボタン画像の読み込み失敗") );
 }


#--------------------


 更新履歴

Ver0.802 2007/12/06 アルファ無しのbmpだと画像が壊れるバグを修正。
Ver0.801 2007/12/05 リソースのロードに対応しました。pngもリソース化できます。
Ver0.800 2007/12/05 GDI+を使わないコードに変更してみました。遅いようなら、AlphaButton.hのUSE_GDIPを変更すればGDI+に戻せます。
Ver0.701 2007/11/26 GDI+を使ったバージョンで公開。