SDIでの子ウインドウの作成 – プログラミング – Home

SDIでの子ウインドウの作成
 
通知
すべてクリア

[解決済] SDIでの子ウインドウの作成

固定ページ 1 / 2

hanabi
 hanabi
(@hanabi)
ゲスト
結合: 22年前
投稿: 39
Topic starter  

どうも以前はお世話になりました。
今回も初歩的な質問だと思いますがよろしくお願いいたします。

現在、windows2000、SDI、VC++6.0で開発を行っているのですが、
SDIでMDIのように子ウインドウを作ることができるのでしょうか。

MDIのスケルトンプログラムを参考にして考えてみたのですが、
いつまでも進展しなかったため質問させていただきました。

どなたかご教授お願いいたします。


引用未解決
トピックタグ
M&K
 M&K
(@M&K)
ゲスト
結合: 22年前
投稿: 15
 

こんなの参考になりますぅ?

http://www.kumei.ne.jp/c_lang/sdk/sdk_50.htm


返信引用
hanabi
 hanabi
(@hanabi)
ゲスト
結合: 22年前
投稿: 39
Topic starter  

M&Kさんご意見どうもありがとうございます。
そのページの存在は知っていたのですが、
私はSDKでの開発を行ったことがないため、
そのページに書いてあることがいまいち理解できなかったのです。

MFCでの開発にSDKで機能を追加していくということはできるのでしょうか。
また、MFCによるやり方があるページなどありましたら教えていただけたら幸いです。

よろしくお願いいたします。


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

> SDIでMDIのように子ウインドウを作ることができるのでしょうか。

どの程度「MDIのような」子ウィンドウを作りたいのでしょうか?


返信引用
hanabi
 hanabi
(@hanabi)
ゲスト
結合: 22年前
投稿: 39
Topic starter  

dairygoodsさん以前はお世話になりました。

MDIのスケルトンプログラムのように
何もしないものを試しに作ってみようと思いまして。

規模の大きなものは作れないとか制限があるのでしょうか?


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

> 規模の大きなものは作れないとか制限があるのでしょうか?

いいえ、MDI子ウィンドウのどの部分を真似たいのが
分からないのです。
単にタイトルバーをつけたいのか、
または、選択した子ウィンドウに応じてメニューやツールバーを
変化させるようなことをしたいのか、などなど。

とりあえず、見た目だけのウィンドウを作るなら、こんな風にします。
// メンバ変数
CWnd subWnd;

// 初期化
CRect rc(10, 10, 100, 100);
subWnd.Create(NULL, Child, WS_OVERLAPPEDWINDOW|WS_VISIBLE, rc, this, 123);


返信引用
hanabi
 hanabi
(@hanabi)
ゲスト
結合: 22年前
投稿: 39
Topic starter  

以前質問させていただいたのですが、
フローチャートを書くとその処理の実行結果を出すという
プログラムの続きをやっています。

今回サブルーチンの機能を追加しようと思いまして
今までメインウインドウにフローチャートを描いていたのですが、
新しく子ウインドウを作り、
それにサブルーチンのフローチャートを描けるようにしたいと思っています。

だからメインウインドウとほぼ同じ機能をもった子ウインドウを
作ることになると思いますので、

>選択した子ウィンドウに応じてメニューやツールバーを
>変化させるようなこと

は考えていません。

新しく作る子ウインドウごとに名前を自由につけることができる
くらいの機能があればいいと考えています。


返信引用
渋木宏明(ひどり)
 渋木宏明(ひどり)
(@渋木宏明(ひどり))
ゲスト
結合: 23年前
投稿: 196
 

>新しく作る子ウインドウごとに名前を自由につけることができる
>くらいの機能があればいいと考えています。

なら、すでに紹介されているように、SDI の View を親ウィンドウとして WS_CHILD ス
タイルを付加したウィンドウを作ればOKですね。

簡単には、View のメンバに

CWnd m_wndChild;

なんてのを持たせて、View の OnCreate() あたりで

m_wndCHild.CreateEx (0, 0, Child, WS_CHILD|WS_VISIBLE, CRect(0,0,128,128),
this, 123);

とか。


返信引用
M&K
 M&K
(@M&K)
ゲスト
結合: 22年前
投稿: 15
 

hanabiさん その後いかがですか?

私も興味が有ったので渋木宏明(ひどり)さんのアドバイス通り、
トライしてみました。

m_wndCHild.CreateEx (0, 0, Child, WS_CHILD|WS_VISIBLE,
CRect(0,0,128,128), this, 123);

のままだと何も表示されず、

m_wndCHild.CreateEx (0, 0, Child, WS_CHILD | WS_CAPTION | WS_VISIBLE,
CRect(0,0,128,128),this, 123);

に変更したらうまく行きました。
報告までです。


返信引用
hanabi
 hanabi
(@hanabi)
ゲスト
結合: 22年前
投稿: 39
Topic starter  

返事が遅くなり申し訳ありません。

渋木宏明(ひどり)さんとM&Kさんのおっしゃられたとおりにしてみたら、
無事子ウインドウが生成されました!
本当にありがとうございました。

追加の質問なんですが、
今回Viewのほうに書いたのは初めから表示するからですよね?
MDIのように「「新規作成」ボタンを押したときにウインドウを作成する」
という風にするときは、新しくウインドウ用のクラスを作成したほうがいいんでしょうか?

宜しくお願いいたします。


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

> MDIのように「「新規作成」ボタンを押したときにウインドウを作成する」
> という風にするときは、新しくウインドウ用のクラスを作成したほうがい
> いんでしょうか?

クラスを作成することと、
ボタンを押したときにウィンドウを作成することは別問題です。

ボタンを押したときにウィンドウを作成するには、
OnCreateの代わりにボタンを押したイベントハンドラでCreateすればよいです。

また、CWndはウィンドウの基本機能しかもっていませんから、
ウィンドウに何か表示したり処理をさせたりしたければ、
派生クラスを作ることになるでしょう。


返信引用
hanabi
 hanabi
(@hanabi)
ゲスト
結合: 22年前
投稿: 39
Topic starter  

ご回答ありがとうございます。

>ウィンドウに何か表示したり処理をさせたりしたければ、
>派生クラスを作ることになるでしょう

今回の場合ですとCFrameWndを基本クラスにしてクラスを作成すればいいんでしょうか?


返信引用
hanabi
 hanabi
(@hanabi)
ゲスト
結合: 22年前
投稿: 39
Topic starter  

今実際にやってみようとしたのですが、
「Create関数」と「OnCreate関数」の違いがMSDNライブラリを見ても
いまいち理解できません。

この2つの関数に大きな違いはありますか?


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

> 今回の場合ですとCFrameWndを基本クラスにしてクラスを
> 作成すればいいんでしょうか?

CFrameWndの独自機能を使いたい場合は、CFrameWndを派生します。
これまでの話からは子ウィンドウにCFrameWnd独自の機能が必要とも
思えませんので、CWndで良いと思いますが。

> 「Create関数」と「OnCreate関数」の違いがMSDNライブラリを見ても
> いまいち理解できません。

Create関数を呼び出すと、ウィンドウが作成されます。
OnCreate関数はCreate関数が呼び出されてウィンドウが作られたときに
呼び出されます。

MSDNの解説は、OnCreateを呼び出す側の立場で書かれているので、
分かり辛いですね。


返信引用
hanabi
 hanabi
(@hanabi)
ゲスト
結合: 22年前
投稿: 39
Topic starter  

>CFrameWndの独自機能を使いたい場合は、CFrameWndを派生します。
>これまでの話からは子ウィンドウにCFrameWnd独自の機能が必要とも
>思えませんので、CWndで良いと思いますが。

なるほど。それではCWndもやってみようと思います。

>Create関数を呼び出すと、ウィンドウが作成されます。
>OnCreate関数はCreate関数が呼び出されてウィンドウが作られたときに
>呼び出されます。

ということは、OnCreate関数は単独では使えないということですかね?
通常ウインドウを作成するときはどちらを使うほうがよいでしょうか?(用途により使い
分けるのでしょうけど)


返信引用
固定ページ 1 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました