電子書籍の厳選無料作品が豊富!

今 WinXP VC++6.0 MFC のダイアログベースのソフトで
ダイアログリソース上のボタンのプロパティで
ビットマップが設定されている状態で
ボタンにビットマップ表示→アイコン表示を切替えようと思って
HICON CMyButton::SetIconID(UINT iconID)
{
//スタイル変更
UINT style=GetButtonStyle();
style&=~BS_BITMAP;
style|=BS_ICON;
SetButtonStyle(style);

//ボタンに画像を貼付る
HICON hIcon=AfxGetApp()->LoadIcon(iconID);
hIcon=SetIcon(hIcon);
}
としたのですがアイコン表示されませんでした。
アイコンかビットマップかどっちかに
すればいいのはわかってるのですが、
SetButtonStyleはCreate後にボタンスタイルを
替えられないんでしょうか?

A 回答 (1件)

 こんばんは。



 XP上でVisual Studio 2008にて試してみましたが、無理なようです。
 SetButtonStyle()メソッドの代わりにModifyStyle()メソッドを使用してみたところ、出来ました。
 以下参考程度に。

HICON CMyButton::SetIconID(UINT iconID)
{
//スタイル変更
this->ModifyStyle(BS_BITMAP, BS_ICON);

//ボタンに画像を貼付る
HICON hIcon = AfxGetApp()->LoadIcon(iconID);
hIcon = this->SetIcon(hIcon);
return hIcon;
}
    • good
    • 0
この回答へのお礼

回答有難うございます。
CWndにModifyStyleという関数があったのですね。
VC++6.0 MFCでも
下記コードでリソース上でBS_BITMAPからもBS_TEXTからも動きました。
有難うございました。
HICON CMyButton::SetIconID(UINT iconID)
{
UINT style=GetButtonStyle();
//スタイルをアイコンにする
if(style&BS_BITMAP) //ビットマップの場合
{
HBITMAP hBitmap = GetBitmap();
if(hBitmap) ::DeleteObject(hBitmap);
ModifyStyle(BS_BITMAP,BS_ICON);
}
else if (style&BS_ICON)
;//アイコンの場合は何も変えない
else
ModifyStyle(BS_TEXT,BS_ICON);//アイコンでもビットマップでも無い場合
//ボタンに画像を貼付る
HICON hIcon=AfxGetApp()->LoadIcon(iconID);
hIcon=SetIcon(hIcon);
return hIcon;
}

お礼日時:2009/11/09 11:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!