MFC MDIウインドウのタイトルを個別につける – プログラミング – Home

MFC MDIウインドウのタイトルを個...
 
通知
すべてクリア

[解決済] MFC MDIウインドウのタイトルを個別につける


なで
 なで
(@なで)
ゲスト
結合: 21年前
投稿: 3
Topic starter  

はじめまして

私は今、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ウインドウに固定タイトルをつけるにはどのようなコードをかけばよいのでしょうか

ご教授よろしくお願いします。


引用未解決
トピックタグ
てつや
 てつや
(@てつや)
ゲスト
結合: 22年前
投稿: 34
 

以下参照
http://home.att.ne.jp/banana/akatsuki/doc/mfc/mfc12/


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

そもそもMDIを採用するのが正解なのかが良く分かりません。
話を聞いているとSDIにして子ウインドウを自前で作成しても良いようにも
思えます。
MDIは、一度に複数のドキュメントを扱う場合に採用するインターフェイスですが、
基本的に同じビューを持ったドキュメントを複数開けるようになっているので
同じタイトルが載った子ウインドウを区別するためにそういった仕組みがあると
思います。
MDIにこだわる必要が無いのであれば、別の方法を取るのも手だと思います。
どうしてもその部分を何とかしたいのであれば、
MFCのソースをデバッガで追いかけて見るのも一つの方法です。
どういう状況でそういった事が起こっているのかわかれば、抑制する方法も
見えてくるかもしれません。


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

てつやさん PATIOさん ご返答ありがとうございます。

以下参照
http://home.att.ne.jp/banana/akatsuki/doc/mfc/mfc12/

試してみたのですが、状況に変化がおこってくれませんでした。

>>そもそもMDIを採用するのが正解なのかが良く分かりません。

各操作ウインドウ(ダイアログも可)をウインドウ領域でクリップ
しようと思い、とりあえずMDIウインドウにしてしまいました。
SDIでもMDIのように子ウインドウをクリップすることは
できるのでしょうか?


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

>>SDIでもMDIのように子ウインドウをクリップすることは
>>できるのでしょうか?

やってみたところできました。お騒がせしました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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