AppWizardで作成したSDIのMFCアプリケーションで ウィンドウの左上に表示されるキャプション等の変更方法の例を示します。
作成したアプリケーションには、ふつう 一番上に青い部分があって、
MainFrm.cpp:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
〜
HICON hIcon=AfxGetApp()->LoadIcon(アイコンのリソースID);
SetIcon(hIcon,FALSE);
return 0;
}
ちなみにIDR_MAINFRAME等の場合、標準(32×32)とスモール(16×16)の2種類があり、
エディタ上部のコンボボックスで切り替えることができます。
ウィンドウの左上や デスクトップの「小さいアイコン」で使うのはスモールサイズ、
デスクトップの「大きいアイコン」は標準サイズです。
余談ですが、デスクトップで使うアイコンは、AppWizardを使わないで作った
(つまり IDR_MAINFRAME といったデフォルトのアイコンが無い)アプリケーションでも、
テキトーなIDでアイコンを描いてやってコンパイルすれば、デスクトップに反映されます。
どうやら、一番小さいIDのアイコンがデフォルトで使われるようです。
CDocumentの派生クラスの中から、
CDocument::SetTitle(文字列)
を呼び出します。
SDIの場合、単純にドキュメント名を表示しないだけなら、 CMainFrameに以下のようにコーディングすれば簡単に出来ます。
MainFrm.cpp:
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: この位置で CREATESTRUCT cs を修正して、Window クラスやスタイルを
// 修正してください。
cs.style &= ~FWS_ADDTOTITLE; //ドキュメントの名称を表示しない(SetTitle()は使用できなくなる)
return CFrameWnd::PreCreateWindow(cs);
}
CMainFrameクラスのメンバー関数の中から、
CWnd::SetWindowText(文字列)
を呼び出します。
CMainFrame::OnCreate()の最後で変えておけば、とりあえずOKかな?
CViewの派生クラスのメンバー関数の中から変えたい場合は
GetParentFrame()->SetWindowText(文字列);
とします。
ちなみに固定値でよければ、文字列リソース(String Table)のIDR_MAINFRAMEの1つめを変えるだけでいいです。
「ここの文字列\n〜\n〜\n〜\n〜\n〜\n」
最小化ボタン・最大化ボタンを無効化することは簡単に出来ます。
MainFrm.cpp:
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: この位置で CREATESTRUCT cs を修正して、Window クラスやスタイルを
// 修正してください。
cs.style &= ~WS_MINIMIZEBOX; //最小化ボタンを無効化
cs.style &= ~WS_MAXIMIZEBOX; //最大化ボタンを無効化
// cs.style &= ~WS_SYSMENU; //全ボタンを無くす
return CFrameWnd::PreCreateWindow(cs);
}
WS_SYSMENUは、システムメニューを表しています。 これを削除すると、左上のアイコンや右上のボタン類は全て無くなり、 タイトルバーを右クリックすると出てくるメニューも出なくなります。