2011-01-06 4 views
0

リソースエディタを使用してダイアログソースを作成することはできますか?次にこのダイアログを別のダイアログに(おそらく複数回)入れますか?ダイアログ内でダイアログを設計することは可能ですか?どちらも再ソースエディタで作成しましたか?

ここに背景があります。私はC++プログラム(Windows)を作成する必要があります。ユーザは、同様のデータのセットをダイアログに入力する必要があります。簡単に言うと、このデータセットの要素は、編集コントロールとスクロールバーで構成されています。この組み合わせ(編集+スクロールバー)は、データセットの各要素のダイアログに配置する必要があるため、1つの編集コントロールと1つのスクロールバーで簡単なダイアログを作成し、このダイアログを複数回"親"ダイアログ。

これはまったく可能です。どんな指針も大変ありがとうございます。

+0

これは、ポイントアンドクリックデザイナーでのUserControlの概念です。多分、ダイアログは、そのような形の短いものに叩かれることがあります。確かに、子ウィンドウになるようには設計されていません。おそらくもっと大きな疑問は、あなたが生のuser32 C++プログラムでWinformsをとてもシンプルにすることを試みている理由です。それは5分、あなたの人生の1週間です。ダイアログでこれを実行しようとすると、さらに多くのことが起こります。 –

答えて

2

はい、これを行うことができます。

ダイアログエディタで、親ダイアログボックスで "Control Parent"フラグを設定します。 (これにより、タブキーが子ダイアログ内のアイテムを親ダイアログのように循環させることができます)

ダイアログエディタで子ダイアログが設定されていることを確認してください。視覚的には、エディタでは境界線のないダイアログのように見えます。

実行時に、CreateDialog(またはCreateDialogParamなど)を使用して、親ダイアログの子として子ダイアログを作成します。 CreateDialogを呼び出すときは、各ウィンドウのdialogprocを指定します。

多くの場合、子ダイアログのprocsは、メインウィンドウのダイアログproc(SendMessageではなく直接呼び出す)にメッセージを転送するだけのことですが、注意する必要があります。明らかに、ダイアログ内のコントロールIDはすべて同じで、親のhWnd(おそらく親のhWndによって)を区別する必要があるため、単一の親で同じダイアログの複数のコピーを作成する場合は特に注意する必要があります。

ただし、親にメッセージを転送する必要はありません。私は通常、ダイアログのロジックのほとんどが広がる代わりに1つの場所にあるように、通常はそれを行います。

EDIT:子ダイアログ、ウィンドウクラスなどの作成に関する修正されたステートメント私は、ダイアログと通常のウィンドウを混ぜて、この場合より複雑なものにしていました。それについて申し訳ありません!

+0

私は、通常、タブコントロールの内容の子ダイアログを作成するだけで済むかもしれません。私はプログラムで生成するか、ダイアログボックスでコントロールを繰り返す場合は、コードを作成し、実行時にコントロールを作成し、リソースエディタをまったく使用しないでください。しかし、コントロールのサイジングとスペーシングに関するすべてのルールをルックアップする必要があるため(APIがないため)、レイアウトを行うのは苦労します。 –

+0

私は理解しているかどうかわかりません:私は 'CreateWindow'(どこで登録されたクラス)を呼び出さなければならないのかわかりません。私がウィンドウクラスを登録しなければならなかったが、私が正しく思い出したのは、ダイアログのカスタムコントロールを最後に実行したときに、ウィンドウが "システム"によって作成されたことです。 –

+0

@Renéお詫び申し上げます。あなたはクラスを登録する必要はありません。暗黙的にシステムダイアログクラスを使用し、DialogProcをCreateDialog(http://msdn.microsoft.com/en-us/library/ms645434%28v=vs.85%29.aspx)に直接渡す必要があります。私は通常の非ダイアログウィンドウを考えていました。私はそれを修正するために私の答えを編集しました。 –

関連する問題