アイコン作成その1
Win32Application で 空のファイルをプロジェクトにした場合のアイコンの変更方法
1 挿入 新規リソース Icon を作成
大小、一つのファイルに収められる(新規デバイスイメージボタンでスモールを追加) デフォルトのIDは IDI_ICON1
2 これで resouce.h ができるので、Header Files に取り込む
Src.sr を Resource files にとりこむ(ソースも可?) (一度閉じると,できていることもある)
3 Winmain.cpp ファイル冒頭に resource.h をインクルード
4 Winmain関数 に
wc.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_ICON1); // by ISHIDA wcl.hIconSm = NULL を追加 // by ISHIDA
cppフォルダのサンプルプロジェクト IconTest?、FirstWind_orig
mfXApplication SDI でドキュメントサポートをはずした場合の、アイコンの変更 // MainFrm.cpp で 以下の変更 BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { if( !CFrameWnd::PreCreateWindow(cs) ) return FALSE; // TODO: この位置で CREATESTRUCT cs を修正して、Window クラスやスタイルを // 修正してください。 cs.dwExStyle &= ~WS_EX_CLIENTEDGE; //cs.lpszClass = AfxRegisterWndClass(0); まずここをコメントアウト by ishida
/* by ishida 次に SDI のアプリで、ドキュメントサポートチェックをはずした場合、 画面左上アイコンはウインドウズの絵に 決まってしまう。これを変更するには、まずsmallIconを作成し(ここではIDI_ICON1)、 以下のようにデフォルトの関数を上書きする。参考になるのは、プロジェクト Win32Applicaito、型 単純な Hello型 アプリ作成時の Win32App_Hello.cpp内の ATOM MyRegisterClass?( HINSTANCE hInstance ) 関数の記述である。
cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW, ::LoadIcon(cs.hInstance, (LPCTSTR)IDR_MAINFRAME), HBRUSH(COLOR_WINDOW+1), :: LoadIcon(cs.hInstance, (LPCTSTR)IDI_ICON1) ); // ishida //cs.x = 200; cs.y = 200; //cs.cx = 500; cs.cy = 500; // ishida return TRUE; }
CPP フォルダのサンプルプロジェクト forest
その2
4月30日 アイコンの変更 その2
ダイアログ形式プログラムのアイコンを変えるには一番単純には MAINFRAME を一度消して、別の大小アイコンセットをこの名前に変える。
そうでなければ
Dlgクラスのコンストラクタ内の
//m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
を書き換え。
CDialog::OnInitDialog(); InitialDlg() 内の //SetIcon(m_hIcon, FALSE); // 小さいアイコンを設定
を
SetIcon(m_hIcon, TRUE); // 小さいアイコンを設定
と書き換え。
また .rc ファイル内で
///////////////////////////////////////////////////////////////////////////// // // Icon // // Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems.
次の行を削除してしまう
//IDR_MAINFRAME ICON DISCARDABLE "res\\ishida_string.ico" IDI_ICON1 ICON DISCARDABLE "res\\icon1.ico" ///////////////////////////////////////////////////////////////////////////// /
さらに
IDD_ABOUTBOX DIALOG DISCARDABLE 0, 0, 235, 55 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "ishida_stringのバージョン情報" FONT 9, "MS Pゴシック" BEGIN ICON IDI_ICON1,IDC_STATIC,11,17,20,20 LTEXT "ishida_string Version 1.0",IDC_STATIC,40,10,119,8, SS_NOPREFIX LTEXT "Copyright (C) 2001",IDC_STATIC,40,25,119,8 DEFPUSHBUTTON "OK",IDOK,178,7,50,14,WS_GROUP END
その3
5月11日 Dlgベースプログラムで、単純にIDR_MAINFRAMEを削除し、インポートしたIcoファイルのプロパティー名をIDR_MAINFRAMEに変更しただけの場合、起動用のアイコンも、また起動時のフレーム左上のアイコンも同じになってしまうので、 Dlgクラス内部のOnInitDialog?(); 関数で以下のように設定変更する。
// ウィンドウがダイアログでない時は自動的に設定しません。 SetIcon(m_hIcon, TRUE); // 大きいアイコンを設定 SetIcon(m_hIcon, TRUE); // 小さいアイコンを設定 // ishida TRUE に変更した