CBitmapは、ビットマップを扱うクラス・・・。
これを使って、ビットマップの読み込みや描画などができる・・・。
今回は、巨大なボタンが押されたら、巨大なビットマップをボタンに表示させる・・・。
MFCアプリケーションでこれまでと同様にCBitmapプロジェクトを作成・・・。
resフォルダの下に、icon1.icoに加えて、bitmap1.bmpを用意・・・。
Iconリソースに加えて、 Bitmapリソースもインポート・・・。
bitmap1.bmpを選択・・・。
ビットマップリソースとしてのIDは、IDB_BITMAP1・・・。
ダイアログを大きくして、
ボタンも大きく配置・・・。
プロパティのBitmapをTrueに・・・。
CBitmap.rcを見ると、
BS_BITMAPが付いている・・・。
これでビットマップを表示できる・・・。
CBitmapDlg.hにCBitmapオブジェクトのメンバを用意・・・。
あとは、Button1(IDC_BUTTON1)を押された時のハンドラに、
m_cBitmap.LoadBitmapでbitmap1.bmp(IDB_BITMAP1)をロード・・・。
GetDlgItemでIDC_BUTTON1のポインタを取得し、pButton1に格納したら、
pButton1->SetBitmap(m_cBitmap)でボタンIDC_BUTTON1にビットマップIDB_BITMAP1をセット・・・。
CButton::SetBitmapの引数型はHBITMAPなのに、CBitmapオブジェクトを渡せるのは不思議に思うかもしれない・・・。
実は、CBitmapには、
HBITMAP演算子というものがあり、CBitmapオブジェクトからHBITMAP型ハンドルへのキャストのようにハンドルが取得できるのである・・・。
起動して、最初はこうなっている・・・。
ボタンを押すと、
bitmap1.bmpが表示された・・・。
ちなみにm_cBitmapは、DeleteObjectしなくとも、デストラクタでDeleteObjectされるのを一応確認している・・・。
(使い方によっては、DeleteObjectが明示的に必要らしいが情報が錯綜している・・・。LoadBitmapだけなら、大丈夫みたい・・・。)
Sample/CBitmap.h at master · bg1bgst333/Sample · GitHub
Sample/CBitmap.cpp at master · bg1bgst333/Sample · GitHub
Sample/CBitmapDlg.h at master · bg1bgst333/Sample · GitHub
Sample/CBitmapDlg.cpp at master · bg1bgst333/Sample · GitHub
Sample/resource.h at master · bg1bgst333/Sample · GitHub
Sample/CBitmap.rc at master · bg1bgst333/Sample · GitHub
Sample/stdafx.h at master · bg1bgst333/Sample · GitHub
Sample/stdafx.cpp at master · bg1bgst333/Sample · GitHub