はじめまして
私は今、VC++6.0 Enterprize MFCにてMDIウインドウのプログラムを作っているのですが
初期化時に複数のウインドウ(それぞれ別々のコントロールが配置された)を立ち上げて
それぞれのタイトルに固定の名前をつけようと以下のコードを書きました。
//タイトルを変える為にSetDefaultTitleをオーバーライドするクラス
class CMyDocTemplate:public CMultiDocTemplate
{
private:
char * DocTitle;
public:
CMyDocTemplate(UINT nIDResource, CRuntimeClass* pDocClass, CRuntimeClass*
pFrameClass, CRuntimeClass* pViewClass ,char * nDocTitle)
:CMultiDocTemplate(nIDResource,pDocClass,pFrameClass,pViewClass)
{
DocTitle = new char [strlen(nDocTitle) + 1];
strcpy(DocTitle,nDocTitle);
}
~CMyDocTemplate(void){
if(DocTitle){delete [] DocTitle;DocTitle = NULL;}
}
virtual void SetDefaultTitle( CDocument* pDocument ){
pDocument->SetTitle(DocTitle);
}
};
CApp::InitInstance()
//中略
CMyDocTemplate* pDocTemplate;
pDocTemplate = new CMyDocTemplate(
IDR_MDIDIRTYPE1,
RUNTIME_CLASS(CMDIDirectX2Doc),
RUNTIME_CLASS(CChildFrame), // カスタム MDI 子フレーム
RUNTIME_CLASS(CMDIDirectXView),
タイ1);
AddDocTemplate(pDocTemplate);
pDocTemplate = new CMyDocTemplate(
IDR_MDIDIRTYPE2,
RUNTIME_CLASS(CMDIDirectX2Doc),
RUNTIME_CLASS(CChildFrame), // カスタム MDI 子フレーム
RUNTIME_CLASS(CMDIDirectX2View),
タイ2);
AddDocTemplate(pDocTemplate);
pDocTemplate = new CMyDocTemplate(
IDR_MDIDIRTYPE3,
RUNTIME_CLASS(CMDIDirectX2Doc),
RUNTIME_CLASS(CChildFrame), // カスタム MDI 子フレーム
RUNTIME_CLASS(TESTVIEW),
タイ3);
AddDocTemplate(pDocTemplate);
// TODO: この位置にコマンド ハンドラ用のコードを追加してください
CDocTemplate* pDocTemp[3];
// ドキュメントテンプレート (3種類) の取得
POSITION pos = GetFirstDocTemplatePosition();
for (int n = 0; n < 3; n++){
pDocTemp[n] = GetNextDocTemplate(pos);
}
// ビュー1 の作成,ドキュメントとフレームの保存
CDocument* pDoc = pDocTemp[0]->OpenDocumentFile(NULL);
CFrameWnd* pActive = ((CMDIFrameWnd*)m_pMainWnd)->MDIGetActive();
// pActive->SetWindowText(ビュー1);
// ビュー3 の作成
CFrameWnd* pFrame2 = pDocTemp[2]->CreateNewFrame(pDoc, pActive);
pDocTemp[1]->InitialUpdateFrame(pFrame2, pDoc);
// pFrame2->SetWindowText(ビュー3);
// ビュー2 の作成
CFrameWnd* pFrame1 = pDocTemp[1]->CreateNewFrame(pDoc, pActive);
pDocTemp[1]->InitialUpdateFrame(pFrame1, pDoc);
// pFrame1->SetWindowText(ビュー2);
}
結果はタイ1:?というように?の部分に連番がふられた状態になりました。
SetWindowText関数も一番最後に実行したもののみ表示されますが、
ウインドウが非アクティブになると元に戻る状態です。
MDIウインドウに固定タイトルをつけるにはどのようなコードをかけばよいのでしょうか
ご教授よろしくお願いします。
そもそもMDIを採用するのが正解なのかが良く分かりません。
話を聞いているとSDIにして子ウインドウを自前で作成しても良いようにも
思えます。
MDIは、一度に複数のドキュメントを扱う場合に採用するインターフェイスですが、
基本的に同じビューを持ったドキュメントを複数開けるようになっているので
同じタイトルが載った子ウインドウを区別するためにそういった仕組みがあると
思います。
MDIにこだわる必要が無いのであれば、別の方法を取るのも手だと思います。
どうしてもその部分を何とかしたいのであれば、
MFCのソースをデバッガで追いかけて見るのも一つの方法です。
どういう状況でそういった事が起こっているのかわかれば、抑制する方法も
見えてくるかもしれません。
てつやさん PATIOさん ご返答ありがとうございます。
以下参照
http://home.att.ne.jp/banana/akatsuki/doc/mfc/mfc12/
試してみたのですが、状況に変化がおこってくれませんでした。
>>そもそもMDIを採用するのが正解なのかが良く分かりません。
各操作ウインドウ(ダイアログも可)をウインドウ領域でクリップ
しようと思い、とりあえずMDIウインドウにしてしまいました。
SDIでもMDIのように子ウインドウをクリップすることは
できるのでしょうか?
>>SDIでもMDIのように子ウインドウをクリップすることは
>>できるのでしょうか?
やってみたところできました。お騒がせしました。