■掲示板に戻る■
■過去ログ倉庫めにゅーに戻る■
VC++6.0(MFC) SDIでのフレーム生成
- 1 名前: machoto 投稿日: 2001/04/19(木) 16:54
- 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)の関連付け等・・・がわからないので
何方か教えてください。
お願いします。
- 2 名前: デフォルトの名無しさん 投稿日: 2001/04/19(木) 19:20
- MFC基準とおりにやるならドキュメントテンプレート(CDocTemplate)
を使うが、CTopoFrmクラスにCViewの派生クラスをメンバとして設定し、
CTopoFrm::OnCreateのラストでフレームの子ウインドウとして表示
しても目的は達成できると思われ。
- 3 名前: デフォルトの名無しさん 投稿日: 2001/04/19(木) 20:50
- >>1
おいらも同じことをやろうとして断念した。
結局、CFrameWndの派生クラスに直接処理を書いちゃったよ。
1さんは何をしたくて、Viewの関連付けをしたいのですか?
- 4 名前: デフォルトの名無しさん 投稿日: 2001/04/19(木) 23:46
- 何故テンプレートをとばそうとするのかと言う方が謎だ。
無駄な苦労。
- 5 名前: machoto 投稿日: 2001/04/20(金) 01:39
- >>3
いやちょっとC/C++の関数フローをGDIで描画しようと思ってるんですけどね。
その表示用のViewクラスもできているんですけど、メインフレームには
ソースを表示させたいので、このフロー表示Viewは別フレームに表示させたい
んですよ。
2さんの言うとおりCFrameWndの派生クラスのOnCreate()で
やるのも手なんですけど、言われているようにドキュメントテンプレートから
生成させるという解説がMSDNの中でもされていますし、それがセオリー通りの
ような気もします。でもそれが・・・・わかんないっす。
どなたかこの方法のサンプルか助言とかして頂けないですか?
- 6 名前: デフォルトの名無しさん 投稿日: 2001/04/20(金) 01:52
- モードレスダイアログを作って、適当なGenericウィンドウを貼り付けて
それを継承(あるいはサブクラス化)してViewクラスと等価な機能を
実装すればいいではないか?
もちろん制御はメインのViewクラスからすることになるだろうけど。
ていうか個人的にはMDIを使わない理由の方が興味あったり(w
- 7 名前: デフォルトの名無しさん 投稿日: 2001/04/20(金) 02:54
- 関係ないけどWindowsのMDIはUIとしてクソだと思う。
はっきりいって親フレームウィンドウ邪魔。
なんであんな設計にしたのかね。
昔のVB、DelphiやBulderのIDEみたくツールバー風窓+αの方が良い。
- 8 名前: デフォルトの名無しさん 投稿日: 2001/04/20(金) 04:23
- MDI糞説に俺も一票。
なんで親と子の2段しかないのかね?
好きなだけ階層化させてくれや。
あれなら全部対等な窓しかないSDIのほうがすっきり。
MultiDocumentってのがいかさまくさい。
単に並べてるだけじゃないか。
どうせならStructurizedDocumentとかNetworkDocumentとか
(綴り間違だったら御免)やってみそ。
そういう表現が欲しいことも結構あるぞ。
- 9 名前: >7-8 投稿日: 2001/04/20(金) 04:32
- そうそう、あの親フレームの子窓と重なる灰色部分ってなんの
役にも立たない。今でも壁紙表示させたりする程度かな?
どうせならあの部分削除して後ろの窓表示させてくれ。
マルチSDI>>>>>>>>>>>>>>>>>>>>>MDI
- 10 名前: デフォルトの名無しさん 投稿日: 2001/04/20(金) 10:15
- 実は俺MDI結構好き。
ただし
http://hp.vector.co.jp/authors/VA006374/DocBar.htm
こういうモノが入っているという前提で。
これが入ってないと使えないって話もあるが(w
#ん?つまり標準では糞、ってことか(藁
- 11 名前: >>10 投稿日: 2001/04/21(土) 08:45
- これってWord2000とExcel2000で実装されてるやつですよね?
自分は好きだけど、意外と嫌いという人も多いね。
- 12 名前: 8 投稿日: 2001/04/21(土) 12:33
- >>10
ナイス。なるほど、タスクバーを入れ子(笑)にしたわけね。
ちなむとそれ、どんなキー操作でDoc間を行き来できるんでしょか?
タスクだとAlt+Tabだけど。
あ。Alt+W+なんとか(ありがちなWindow切り替え)、ってのは無しね(笑)
- 13 名前: デフォルトの名無しさん 投稿日: 2001/04/23(月) 12:18
- 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へ
厨房の頃のコードなので、正しいかどうかは確認してください。
- 14 名前: 10 投稿日: 2001/04/23(月) 12:18
- >>12
MDIの標準Window切換ショートカット Ctrl+F6 で行けます。
- 15 名前: デフォルトの名無しさん 投稿日: 2001/04/23(月) 15:05
- >>14
どもっす。おお。ほんとだ動く。>Word
ところでF使わないキーバインドは存在しますか?
Fなんてうぜぇものは出来るだけ使いたくないんで。
#HHKまんせー