トップページ⇒tech
15コメント6KB

VC++6.0(MFC) SDIでのフレーム生成

■ このスレッドは過去ログ倉庫に格納されています
0001machotoNGNG
SDIアプリケーションでMainFrame生成後、さらにもう一つ
フレーム(CFrameWnd)を生成し、そこにさらにViewを表示させたいのですが
どのようにして良いのかわからなくて質問してみました。

フレームの生成のみなら↓みたいにしてできたのですが
------------------------------------------------------------
m_pTopoFrm = new CTopoFrm(); // CTopoFrmはCFrameWndの派生クラスです
m_pTopoFrm->Create(NULL,"テストフレームタイトル",
WS_OVERLAPPEDWINDOW,CRect(100, 100, 100+270, 100+85));

m_pTopoFrm->ShowWindow(SW_SHOW);
m_pTopoFrm->UpdateWindow();

------------------------------------------------------------
これにView(Document)の関連付け等・・・がわからないので
何方か教えてください。
お願いします。
0002デフォルトの名無しさんNGNG
MFC基準とおりにやるならドキュメントテンプレート(CDocTemplate)
を使うが、CTopoFrmクラスにCViewの派生クラスをメンバとして設定し、
CTopoFrm::OnCreateのラストでフレームの子ウインドウとして表示
しても目的は達成できると思われ。
0003デフォルトの名無しさんNGNG
>>1
おいらも同じことをやろうとして断念した。
結局、CFrameWndの派生クラスに直接処理を書いちゃったよ。

1さんは何をしたくて、Viewの関連付けをしたいのですか?
0004デフォルトの名無しさんNGNG
何故テンプレートをとばそうとするのかと言う方が謎だ。
無駄な苦労。
0005machotoNGNG
>>3
いやちょっとC/C++の関数フローをGDIで描画しようと思ってるんですけどね。
その表示用のViewクラスもできているんですけど、メインフレームには
ソースを表示させたいので、このフロー表示Viewは別フレームに表示させたい
んですよ。

2さんの言うとおりCFrameWndの派生クラスのOnCreate()で
やるのも手なんですけど、言われているようにドキュメントテンプレートから
生成させるという解説がMSDNの中でもされていますし、それがセオリー通りの
ような気もします。でもそれが・・・・わかんないっす。
どなたかこの方法のサンプルか助言とかして頂けないですか?
0006デフォルトの名無しさんNGNG
モードレスダイアログを作って、適当なGenericウィンドウを貼り付けて
それを継承(あるいはサブクラス化)してViewクラスと等価な機能を
実装すればいいではないか?
もちろん制御はメインのViewクラスからすることになるだろうけど。

ていうか個人的にはMDIを使わない理由の方が興味あったり(w
0007デフォルトの名無しさんNGNG
関係ないけどWindowsのMDIはUIとしてクソだと思う。
はっきりいって親フレームウィンドウ邪魔。
なんであんな設計にしたのかね。
昔のVB、DelphiやBulderのIDEみたくツールバー風窓+αの方が良い。
0008デフォルトの名無しさんNGNG
MDI糞説に俺も一票。
なんで親と子の2段しかないのかね?
好きなだけ階層化させてくれや。
あれなら全部対等な窓しかないSDIのほうがすっきり。

MultiDocumentってのがいかさまくさい。
単に並べてるだけじゃないか。
どうせならStructurizedDocumentとかNetworkDocumentとか
(綴り間違だったら御免)やってみそ。
そういう表現が欲しいことも結構あるぞ。
0009>7-8NGNG
そうそう、あの親フレームの子窓と重なる灰色部分ってなんの
役にも立たない。今でも壁紙表示させたりする程度かな?
どうせならあの部分削除して後ろの窓表示させてくれ。
マルチSDI>>>>>>>>>>>>>>>>>>>>>MDI
0010デフォルトの名無しさんNGNG
実は俺MDI結構好き。
ただし
http://hp.vector.co.jp/authors/VA006374/DocBar.htm
こういうモノが入っているという前提で。

これが入ってないと使えないって話もあるが(w

#ん?つまり標準では糞、ってことか(藁
0011>>10NGNG
これってWord2000とExcel2000で実装されてるやつですよね?
自分は好きだけど、意外と嫌いという人も多いね。
00128NGNG
>>10
ナイス。なるほど、タスクバーを入れ子(笑)にしたわけね。

ちなむとそれ、どんなキー操作でDoc間を行き来できるんでしょか?
タスクだとAlt+Tabだけど。
あ。Alt+W+なんとか(ありがちなWindow切り替え)、ってのは無しね(笑)
0013デフォルトの名無しさんNGNG
CXxxFrame *Xxx_frame;
CXxxDoc *partDoc=new CXxxDoc;
Xxx_frame=new CXxxFrame;
CCreateContext Context;
Context.m_pNewViewClass=RUNTIME_CLASS(CXxxView);
Context.m_pCurrentDoc=partDoc;
Context.m_pNewDocTemplate=NULL;
Context.m_pLastView=NULL;
Context.m_pCurrentFrame=NULL;
Xxx_frame->LoadFrame(IDR_Xxx,WS_OVERLAPPEDWINDOW|FWS_ADDTOTITLE,NULL,&Context);
Xxx_frame->InitialUpdateFrame(partDoc,TRUE); // Viewへ

厨房の頃のコードなので、正しいかどうかは確認してください。
001410NGNG
>>12
MDIの標準Window切換ショートカット Ctrl+F6 で行けます。
0015デフォルトの名無しさんNGNG
>>14
どもっす。おお。ほんとだ動く。>Word

ところでF使わないキーバインドは存在しますか?
Fなんてうぜぇものは出来るだけ使いたくないんで。
#HHKまんせー
■ このスレッドは過去ログ倉庫に格納されています