VC_Icon のバックアップ(No.1) - アールメカブ

アールメカブ


VC_Icon のバックアップ(No.1)


Programming

アイコン作成その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 に変更した