- ベストアンサー
SDIのクライアント領域に子ウィンドウを生成するには?
環境 Win98 VC++6.0 MFCにて http://www.kumei.ne.jp/c_lang/sdk/sdk_50.htm ↑のように、SDIにてクライアント領域に子ウィンドウを生成するには、MFCの場合どうすれば良いのでしょうか? いつも質問ばかりで申し訳ありません。 ご存知の方お願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
1.CWndの派生クラスを作成する(以下Child) 2.作成したいタイミングでChiled::Create()を呼ぶ (サンプルと一緒だったら親ウィンドウのOnCrete) Createのパラメータのスタイルに、サンプルの子ウィンドウ作成の ところの、WS_なんとかと書いてある数行をそのまま記述する。 #WS_CHILDとWS_CAPTIONが重要です。
その他の回答 (2)
- taka_tetsu
- ベストアンサー率65% (1020/1553)
>言われていることの意味は分かるのですが、実際のコードをどう書いたら良いのか分かりません。 CViewの派生クラスのOnCreateに、さっき試されたのとまったく同じコードを書くだけですよ。 すでに、メインのウィンドウと、Viewの親子関係はMFCによって作られています。 あとは、子ウィンドウを作成し、Viewと子ウィンドウの親子関係と作るだけです。 親子関係をつくるといっても、Create()の引数には、さっきと同じくthisを指定するだけですけども。
お礼
回答ありがとうございます。 以下のようにやってみましたが、何も表示されませんでした。 1.CxxxView のメンバ変数に CWnd m_MyWnd; を追加 2.CxxxViewにOnCreateを追加し、以下を記述 int CxxxView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; // TODO: この位置に固有の作成用コードを追加してください m_MyWnd.CreateEx (0, 0, "Child", WS_CHILD|WS_VISIBLE, CRect(0,0,100,100), this, NULL); return 0; } <補足> WS_CHILDをWS_POPUPにすると実行時にエラーメッセージが出るものの、親ウィンドウの外にウィンドウが出来ます。
補足
WS_CHILD | WS_CAPTION | WS_VISIBLE, に変更し、うまく行きました。 ありがとう御座いました。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
そういえば、MFCはSDIのウィンドウの白いところ、別ウィンドウでしたね。すっかり忘れてました。 なんで、親ウィンドウをCViewの派生クラスにしてください。 つまり、キャプションつきのウィンドウ→View→作成したいウィンドウ という親子関係にしてみてください。 それでも表示されなかったら、ツールのSpy++で確認してください。
お礼
回答ありがとうございます。 >つまり、キャプションつきのウィンドウ→View→作成したいウィンドウ >という親子関係にしてみてください 言われていることの意味は分かるのですが、実際のコードをどう書いたら良いのか分かりません。 具体的に教えていただけませんか。 よろしくお願いします。
お礼
taka_tetsuさん いつも回答ありがとうございます。 親ウィンドウと同じようなウィンドウを作るMFCでのPGは出来ているのですが、ウィンドウスタイルをWS_CHILDとWS_CAPTIONに変えても、なにも表示されません。 SDIベースで子ウィンドウを作ることは無理なのでしょうか? 今回は勉強のためにトライしており、もともと出来ないのであれば、それでも良いのですが。