- 締切済み
MFC 分割ウィンドウのそれぞれ窓の描画に関して
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個なければ、いけないのでしょうか?? わかりずらい説明で申し訳ないですが、宜しくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- FAY
- ベストアンサー率49% (95/193)
MFCのクラスをそのまま使うってことはないかもしれないけど あえてそれを無視して、という前提で。 左側は ((CEditView *)m_wndSplitter.GetPane(0,0))->SetWindowText("左だよ"); 右側の上は ((CEditView *)m_wndSplitter1.GetPane(0,0))->SetWindowText("上だよ"); 右側の下は ((CEditView *)m_wndSplitter1.GetPane(1,0))->SetWindowText("下だよ"); かな。 #実際はSetWindowTextなんか使わないと思うけど、 #ここは一例ということで。
- FAY
- ベストアンサー率49% (95/193)
エクスプローラのように それぞれのペインに表示させるものが違うのならば #1さんのおっしゃるようにそれぞれの表示に 対応するCViewの派生クラスが必要でしょう。 すぺて同じ形式の表示ならば同じCViewの派生クラスにしてもいいかな。 どちらにしても、CSplitterWnd::GetPane() で目的のペインのViewを取得して描画をすればいいかと。
お礼
ご回答ありがとうございます。 CSplitterWnd::GetPane()で分割の列と行を取得して、そこに描画すると いう事は調べている内に出てきてはいたのですが、具体的にどのように したらいいのでしょうか??すみませんがご教授宜しくお願いいたします。 現在は、説明しにくいですが、3つのウィンドウすべてEditViewクラスに していて、3つのウィンドウにTextOutなどで、staticに描画する事は出来るのですが、受信したMsgをリアルタイムに表示させたりする事が出来ません。宜しくお願いいたします。
- itemi_qche
- ベストアンサー率71% (5/7)
多分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); みたいにすれば,できます。 それ以外の方法もあるのかもしれませんが, 自分はこうしてます。
お礼
ご回答ありがとうございます。 回答していただいた内容で、 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クラスには表示出来ません。 説明がわかりずらいかも知れませんが、宜しくお願いいたします。
お礼
何か勘違いしていたみたいで、基本クラスを派生して、Viewオブジェクトを 指定してやることで、Msgを描画出来ました。 アドバイスありがとうございました。