ボタンに小さいアイコンを付けたい – プログラミング – Home

ボタンに小さいアイコンを付けたい
 
通知
すべてクリア

ボタンに小さいアイコンを付けたい


Termo
 Termo
(@Termo)
ゲスト
結合: 13年前
投稿: 3
Topic starter  

環境:VS2008、MFC

ボタンにWindows標準のシステムアイコンをつける事はできたのですが、
アイコンが大きくボタンに収まりきりません。
※ボタンのサイズは、MSGBOXの「はい」と同じサイズ

以下、私の作成した部分になります

m_btn->Create(_T("), WS_CHILD|WS_VISIBLE|BS_ICON, r_btn, this, IDC_BTN_NEW);
HICON hicon = LoadIcon(NULL, IDI_QUESTION); //はてなマークのシステムアイコン
m_btn->SetIcon(hicon);

ボタンに収まるような、小さいアイコンの付け方を教えてください。


引用解決済
トピックタグ
ロマ
 ロマ
(@ロマ)
ゲスト
結合: 18年前
投稿: 170
 

少し試してみました。こんな感じみたいです。

// ウィンドウのメンバー変数
HIMAGELIST m_hImageList;
HICON m_hIcon;

// コンストラクタでメンバー変数を初期化
m_hImageList = ImageList_Create(...);
ImageList_AddIcon(m_hImageList, hIcon);
m_hIconSM = ImageList_GetIcon(hImageList,,,);

// デストラクタでメンバー変数を削除
ImageList_Destroy(m_hImageList);
DestroyIcon(m_hIcon);

// OnCreateやOnThemeChangedで設定
if(IsThemeActive()) // VisualStyleのmanifestがなければ不要です
{
BUTTON_IMAGELIST bi;
bi.himl = m_hImageList;
bi.margin = rc; // マージン
bi.uAlign = ; // BUTTON_IMAGELIST_ALIGN_LEFTなど
m_btn->SetImageList(&bi);

m_btn->SetIcon(0); // WM_THEMECHANGEDの時に必要かもしれません
}
else
{
m_btn->SetIcon(m_hIconSM);
}


返信引用
Termo
 Termo
(@Termo)
ゲスト
結合: 13年前
投稿: 3
Topic starter  

ありがとうございます!!
頂いたアドバイスを参考に色々調べてみて、以下のように出来ました

//メンバ変数
HICON m_Icon;
CImageList m_image;

//メイン
m_btn->Create(_T("), WS_CHILD|WS_VISIBLE|BS_ICON, r_btn, this, IDC_BTN_NEW);
m_image.Create(16, 16, ILC_COLOR32 | ILC_MASK, 0, 1);

m_hIcon = LoadIcon(NULL, IDI_QUESTION); //はてなマークのシステムアイコン
m_image.Replace(-1, m_hIcon):
m_btn->SetIcon(m_image.ExtractIconW(0));

//デストラクタ
m_image.DeleteImageList();
DestroyIcon(m_hIcon):

ただし、IDI_QUESTIONのシステムアイコンは32*32しかないようで、
16*16と指定すると、無理やり縮小されるようでギザギザに表示されてしまいます。
これはもう諦めるしかないんでしょうか・・・?

ちなみに、ロマさんの内容をほぼ丸コピーした内容でも
結果は同じで、縮小ギザギザ表示になってしまいました。


返信引用
ロマ
 ロマ
(@ロマ)
ゲスト
結合: 18年前
投稿: 170
 

WindowsXPのuser32.dllをVS2003で開いて、Iconの104を見ると、
現在のアイコンイメージの種類には
16x16 16色、16x16 256色、16x16 16777216色(24bit)が含まれていました。

ということなので、どれかは取れると思います。
# ILC_COLOR32が関係するか、LoadImageでサイズを指定する必要があるのか、わかりま
せん。
# 32x32と16x16を含む自作アイコンで試した結果、私の場合16x16が取れました。
# Windows7は調べていません(Vistaは持っていません)。

あと、
1)アプリケーションが削除すべきは、ExtractIconが出力したアイコンです。
# msdnでImageList_ExtractIconの元であるImageList_GetIconのRemarksを見てください
# LoadIconの出力は、削除するとまずいようです(msdnのDestroyIcon参照)


返信引用
ロマ
 ロマ
(@ロマ)
ゲスト
結合: 18年前
投稿: 170
 

直前の投稿を取り消します。

> 縮小ギザギザ表示になってしまいました。
WM_SETICONしてタイトルバーに描かせると、
タイトルバーの方はきれいですね。

どうなっているのでしょうか。


返信引用
Termo
 Termo
(@Termo)
ゲスト
結合: 13年前
投稿: 3
Topic starter  

user32.dllにはアイコンが含まれているようですね。
ここから引っ張ってくればなんとかなりそうですが、
直に見に行くのはあまり良くないでしょうか?
当方Windows7ですが、他のOSが良くわかりません。

LoadImageでも、IDI_QUESTIONのアイコンは、
LR_DEFAULTCOLORを指定すると取得できないみたいです。
LR_SHAREDを指定すると取得できるようですが、やはりギザギザ表示になってしまいま
す。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました