dポイントプレゼントキャンペーン実施中!

MFCプログラミング初心者ですが、宜しくお願いいたします。

---------------プログラム環境---------------
WinXP2 Visula Studio 2005 Pro
--------------------------------------------

現在、上記の環境で、SDIプログラムを書いています。
ご教示していただきたいことは、分割ウィンドウにおけるそれぞれの窓の
表示内容を変えたいということです。TCP/IPのプログラムで、受信したMessageをstrstrなどで振り分けて、各々の窓に表示したいのですが、
どういう風にやればいいのですか??
なお、一つのViewに受信メッセージを表示させることは出来ました。
非常に困っています。

現在、CMainFrame::OnCreateClient(~~~)とMainFrame.cppに書き、
ウィンドウを3分割にしております。

m_wndSplitter.CreateStatic(this,1,2);
m_wndSplitter.CreateStatic(&m_wndSplitter,2,1,WS_CHILD | WS_VISIBLE,WS_BORDER,m_wndSplitter.IdFromRowCol(0,1));

m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(??View)),~~
m_wndSplitter1.CreateView(0,0,RUNTIME_CLASS(??View)),~~
m_wndSplitter1.CreateView(1,0,RUNTIME_CLASS(??View)),~~

この用に記述しております。

説明しずらいのですが、??Viewの箇所にスケルトンの時にできていたView
クラスを入れてやると、そのエリアに受信メッセージが表示されます。
初心者なので、まと外れかもしれませんが、新しいViewクラスを作成して
なにかやれば、よいのでしょうか?? 現在3つのウィンドウにそれぞれの
メッセージを表示させたいので、Viewクラスはそれぞれ3個なければ、いけないのでしょうか??
わかりずらい説明で申し訳ないですが、宜しくお願いいたします。

A 回答 (3件)

MFCのクラスをそのまま使うってことはないかもしれないけど


あえてそれを無視して、という前提で。

左側は
((CEditView *)m_wndSplitter.GetPane(0,0))->SetWindowText("左だよ");
右側の上は
((CEditView *)m_wndSplitter1.GetPane(0,0))->SetWindowText("上だよ");
右側の下は
((CEditView *)m_wndSplitter1.GetPane(1,0))->SetWindowText("下だよ");
かな。

#実際はSetWindowTextなんか使わないと思うけど、
#ここは一例ということで。
    • good
    • 0
この回答へのお礼

何か勘違いしていたみたいで、基本クラスを派生して、Viewオブジェクトを
指定してやることで、Msgを描画出来ました。
アドバイスありがとうございました。

お礼日時:2007/06/12 17:36

エクスプローラのように


それぞれのペインに表示させるものが違うのならば
#1さんのおっしゃるようにそれぞれの表示に
対応するCViewの派生クラスが必要でしょう。

すぺて同じ形式の表示ならば同じCViewの派生クラスにしてもいいかな。

どちらにしても、CSplitterWnd::GetPane()
で目的のペインのViewを取得して描画をすればいいかと。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
CSplitterWnd::GetPane()で分割の列と行を取得して、そこに描画すると
いう事は調べている内に出てきてはいたのですが、具体的にどのように
したらいいのでしょうか??すみませんがご教授宜しくお願いいたします。

現在は、説明しにくいですが、3つのウィンドウすべてEditViewクラスに
していて、3つのウィンドウにTextOutなどで、staticに描画する事は出来るのですが、受信したMsgをリアルタイムに表示させたりする事が出来ません。宜しくお願いいたします。

お礼日時:2007/06/12 10:27

多分3つ必要ですよ。


たとえば,分割して片方をEditView(C***EditView),
片方をView(C***View)にするときは,

m_spWnd.CreateView(0, 0, RUNTIME_CLASS(C***View), CSize(100, 0), pContext);
m_spWnd.CreateView(0, 1, RUNTIME_CLASS(CEdit***View), CSize(0, 0), pContext);

みたいにすれば,できます。

それ以外の方法もあるのかもしれませんが,
自分はこうしてます。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
回答していただいた内容で、
m_spWnd.CreateView(0,0,RUNTIME_CLASS(C***View),CSize(100,0),pContext);
m_spWnd.CreateView(0,1,RUNTIME_CLASS(C***2View),CSize(0,0),pContext);

で、例えばC***Viewの中に、OnDraw関数を使って、
pDC->TextOut(0,0,"窓1");

C***2Viewの中に、
         pDC->TextOut(0,0,"窓2");

と、staticに描画する事は出来るのですが、あるTCP/IPの受信メッセージを、それぞれの窓に表示することが、出来ません。
受信したメッセージをそれぞれ振り分けて、それぞれの窓に表示したいの
です。 現在一つの窓にはメッセージを表示出来ているのですが、
新しく作ったEditViewクラスには表示出来ません。

説明がわかりずらいかも知れませんが、宜しくお願いいたします。
 

お礼日時:2007/06/12 10:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!