プロが教えるわが家の防犯対策術!

開発環境:vista Visual Studio 2012 C言語

メインのダイアログから、他のダイアログにデータを渡したい場合(もしくはその逆)は、どうすればよいのでしょうか。
受け渡しするものを、すべてグローバルにする方法は思いつくのですが、これ以外の方法ではどのようにすればよいのでしょうか。
参考になるサイトやAPIなどを教えてください。

例えば、
アプリケーションで、設定のメニューバーを押すと、ダイアログが出てきて設定をするというイメージです。この場合、ユーザが設定した値をメインのダイアログに渡しているということですよね。

A 回答 (2件)

>この値をポインターとして認識させ、構造体に入れる。


>(ここの部分が分からないです。単純にアドレス渡しみたいな感じかなと思いやってみると「二項演算子 '=' : 型 'LPARAM' の右オペランドを扱う演算子が見つかりません」と出てきてしまって。)

普通にキャストするだけです。

static LPSettingData lpSD = NULL;
 case WM_INITDIALOG:
  lpSD = reinterpret_cast<LPSettingData>(lParam);

みたいな感じで。
# DialogBoxParam()で渡してましたな。私の場合。 モーダルダイアログだったので。
# モードレスダイアログの場合はCreateDialogParam()などで渡した構造体変数の寿命に注意する必要があります。
# ローカル変数のような寿命の短いモノを使うとアクセスするときには…なんてコトになりかねませんのでご注意を。
    • good
    • 0
この回答へのお礼

何度もお付き合い頂き、ありがとうございました。

無事にデータを渡すことが出来ました。今、モードレスダイアログで行っているので、今度モーダルダイアログの方もやってみます。また、注意事項等もいただき、本当に助かりました。

これからも、言語勉強を頑張っていきたいと思います。

お礼日時:2012/08/31 10:24

Win32APIってコトでいいんでしょうかね?



>アプリケーションで、設定のメニューバーを押すと、ダイアログが出てきて設定をするというイメージです。この場合、ユーザが設定した値をメインのダイアログに渡しているということですよね。

私のやっている方法だと…
メインダイアログ(というか呼び出し側)で構造体などに突っ込んで、
構造体のアドレスをCreateDialogParam()のLPARAMとして渡します。
設定ダイアログの方では、WM_INITDIALOGのLPARAMで受け取った値を構造体へのポインタとしてアクセス、ポインタをstatic変数なりに保存しておきます。
設定ダイアログを閉じるときに、設定内容を構造体に設定してIDOKなどの戻り値で呼び出し側に返します。
設定された値を呼び出し側で取り出して適用します。
# IDCANCELで戻ってきた場合は破棄します。(というか設定ダイアログ側で反映させない)

モードレスダイアログの場合は…独自メッセージなりで処理でしょうかねぇ。
SendMessage()で構造体とかやりとり…でしょうか。
# PostMessage()ではなく。<渡した構造体なりの寿命の問題がありますからPostMessage()では危険。
    • good
    • 0
この回答へのお礼

大変ありがとうございました。

おかげさまで、どのようにすれば、値の受け渡しが出来るのかがよく分かりました。ただ、一つだけ問題が・・・。こちらの方も、教えていただけたら幸いです。

>LPARAMで受け取った値を構造体へのポインタとしてアクセス、ポインタをstatic変数なりに保存しておきます。

ここの部分が分からないです。いろいろと試してみたりしたのですけれど。LPARAMで受け取った値をどう処理すればよいのかが。

CreateDialogParam()のLPARAMで構造体のアドレスを渡す。
    ↓
ダイアログ側で、LPARAMのところに構造体のアドレスが入ってくる。
    ↓
この値をポインターとして認識させ、構造体に入れる。
(ここの部分が分からないです。単純にアドレス渡しみたいな感じかなと思いやってみると「二項演算子 '=' : 型 'LPARAM' の右オペランドを扱う演算子が見つかりません」と出てきてしまって。)

お礼日時:2012/08/30 10:49

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング