こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

[再掲載]子ダイアログの表示について

今、VS2017(VC++2017)を使って、親ダイアログ上のボタンを押すと子ダイアログを表示するプログラムを作っています。

しかし、その方法(ソースコード)がわかりません。誰か教えてください。

(追記)VC++2017に限った情報をください。

(お詫び)前回、質問文で「MS2017」と表記してしまいましたが、「VS2017」の間違いでした。すみませんでした。

投稿日時 - 2019-04-08 09:20:10

QNo.9604752

すぐに回答ほしいです

質問者が選んだベストアンサー

GetDlgItemは、コントロールIDを指定して子ウィンドウを取得するAPIです。
現在表示されているウィンドウの中にあるものが対象のため、表示されていない別のダイアログを取得することは出来ません。なのでNULLが返ってきます。

表示したいダイアログのクラスは作成しましたか?
ダイアログのクラスがCTestDlgとすると、

CTestDlg dlg;

dlg.DoModal();

で表示できます。ただし、このコードを記述するソースでCTestDlgを認識させるために、ソースの先頭部分でヘッダーファイルのインクルードをする
必要があります。ソースの最初の方を確認すると、#includeの行が複数あるはずなので、その次くらいに記述すればいいと思います。

例)
#include "CTestDlg.h"

ダイアログのクラスを作っていないなら、リソースビューで対象のダイアログを表示させて、ダイアログのコントロールを配置していない部分をダブルクリックすると、「MFCクラス追加」というウィンドウが表示されるので、「クラス名」だけ入力して他はそのままで[OK]ボタンをクリックすれば作成できます。

投稿日時 - 2019-04-09 11:47:51

お礼

丁寧な回答ありがとうございます。デバッグして実行したら無事動作しました。どうもありがとうございます。

投稿日時 - 2019-04-09 16:42:45

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

前回の質問で、サンプルコードを参考にコードを書かれたのであれば、そのコードとどんなエラーが出たのかを提示してみては?
「VC++2017に限った情報」とか言われても、ダイアログを表示するコードがVCのバージョンで劇的に変わるわけではないのですが。Visual Studioの操作であれば、バージョンで違いはあるでしょうが。

投稿日時 - 2019-04-08 14:32:47

補足

親ダイアログのボタン部分のソースコードを掲載します。
void CDialogTestDlg::OnBnClickedCall()
{
// TODO: ここにコントロール通知ハンドラー コードを追加します。
CDialog* pDE = (CDialog*)GetDlgItem(IDD_CHILD);
pDE->DoModal();
}
上記の[pDE->~」のところで、ヌルポインターになってしまい、エラーがおきます。
因みに、子ダイアログのヘッダーファイルはインクルードしてあります。

投稿日時 - 2019-04-08 21:15:40

あなたにオススメの質問