• 締切済み

VC++でダイアログ表示について

VC++初心者です。 MFCアプリケーションでダイアログベースのアプリケーションを作ったのですが、ボタンクリック時にもう一つダイアログを表示しようと思っています。 以下のコードだと、うまく表示されずに画面がフリーズしてしまいます。どこを直したらいいのでしょうか。ご教授願います。 環境は、xp、Visual Studio.net 2003です。 void CMFCtestDlg::OnBnClickedButton1() {   //   CmyDialog myDL;   myDL.DoModal(); } MFCtestDlg.cpp内、#include "myDialog.h" は記述してあります。 VBの経験はあるのですが、VC++はまったくわかりません。 よろしくお願いします。

みんなの回答

  • Senna_FF
  • ベストアンサー率45% (153/334)
回答No.2

CmyDialogクラスが悪さしてるのでは? コール側は問題ないと思います。 CmyDialogではinitialize時に何か特殊なことしてます?

  • Senna_FF
  • ベストアンサー率45% (153/334)
回答No.1

CmyDialogクラスが悪さしてるのでは? コール側は問題ないと思います。 CmyDialogではinitialize時に何か特殊なことしてます?

hibachi
質問者

お礼

回答ありがとうございます。 いろいろ試した結果、ダイアログを追加する際にIDD_PROPPAGE_MEDIUMを選択したのがいけなかったようです。無事解決しました。

関連するQ&A

  • フォームの再表示について

    VC++初心者です。 ダイアログベースのアプリケーションをつくったんですが、その後ボタンクリックでモーダルダイアログを2つ順番に表示したいと思っています。 void CMFC_testDlg::OnBnClickedButton1() {   CmyDialog myDL;   ret1 = myDL.DoModal(); } で一つ目を表示 void CmyDialog::OnBnClickedOk() {   this->ShowWindow(SW_HIDE);   CmyDialog02 myDL02;   myDL02.DoModal(); } で一つ目を隠して、2つ目を表示 さらに2つ目のダイアログのボタンを押した時、2つ目を閉じて1つ目を再表示したいと思います。 void CmyDialog02::OnBnClickedOk() {   EndDialog(-1);   CmyDialog::ShowWindow(SW_SHOW); } と書いた所エラーになります。 どこがまずいんでしょうか。 エラーメッセージ:静的でないメンバ関数の呼び出しが正しくありません VBになれてしまっているため、C++の文法でどう書いていいのかわかりません。 どなたかお教えください。

  • VC++.NET DLLからのダイアログの表示

    こんばんは。 VC++.NETでDLLを作成しました。 内容はダイアログを表示させるだけの単純なもので DLLの種類はMFC拡張DLLで作成しました。 (CDIALOGを継承したクラスTESTDIALOGのコンストラクタ、デストラクタがあるだけのもの) これをテスト用の単純なMFCアプリケーションで呼び出したところ ダイアログを表示させることができましたが 別の複雑なアプリケーション(DLLからDLLを呼ぶなどしている)で 呼び出したところダイアログが表示されません。 コンパイルエラーなどもでないし 何がいけないのか分かりません。 呼び出し側ではメニューにイベントハンドラを作ってそこで TESTDIALOG dlg; dlg.DoModal(); としているだけなのですが・・・ (デバッガで追ったところMFCのdlgcore.cppのCDialog::DoModalの m_lpDialogTemplateNameが不適切なptrとなる辺りに原因はありそうなのですが何故そうなるのかわかりません。) どなたかダイアログが表示されない原因がお分かりになる方 よろしくお願いします。

  • ダイアログの表示、非表示の切り替えについて

    環境 WIN98 VC++6.0 MFC SDIにて 1.ポップアップメニューの”ダイアログ作成”をクリックすると、 void CMainFrame::OnKNew() { CInput dlg; int iID = dlg.DoModal(); } として、ダイアログを作成します。 2.次に、ダイアログのボタン押し下げにてダイアログを非表示にします。 void CInput::OnButton1() { ShowWindow(SW_HIDE); } このようなコードにおいて、非表示状態での”ダイアログ作成”クリックでは非表示から表示に切り替えることを実現するにはどのようにすれば良いのでしょうか? よろしくお願いいたします。

  • メインダイアログを表示させずにファイル選択ダイアログを表示

    VC++2005のMFCダイアログベースでプログラムを作成しています。 自動生成されたプログラムを何も変更しないまま実行すると、 メインのダイアログが表示されますが、 そのダイアログを表示させずに、ファイル選択ダイアログを表示させたいのです。 自分で実装しビルド実行したところ、期待動作をしましたが、 ファイル選択ダイアログを閉じた後に、画像のようなエラーが発生してしまいます。 エラーを発生させず、期待動作をさせる良い実装方法をご存知の方おられましたら、 ご教示お願い致します。 【変更実装(エラー発生)】 BOOL CtestApp::InitInstance() { … CtestDlg dlg; m_pMainWnd = &dlg; // INT_PTR nResponse = dlg.DoModal(); //コメントアウト dlg.OnBnClickedButton1(); //ファイル選択ダイアログを表示する関数 //if (nResponse == IDOK) //コメントアウト //else if (nResponse == IDCANCEL) //コメントアウト … } void CtestDlg::OnBnClickedButton1() { CFileDialog ReadDlg( TRUE, NULL, "*.txt", OFN_HIDEREADONLY | OFN_FILEMUSTEXIST, "txtファイル(*.txt)", this ); … }

  • VC++6.0とVB6.0の開発方法

    どうかよろしくお願いします。 早速ですが私は今大学院生であり、大学院を中退してしまった先輩の開発したアプリケーションを改造したいと考えています。しかし、そのアプリに関して説明書が無く、自分でソースコードを解読し、改造しなければなりません。 アプリは起動するとエクスプローラのような画面になり、フォルダを選択してその中のファイルの設定項目に数値を入力し、メニューバーから「実行開始」を選択すると、ある現象のシミュレーション結果を出力する、といったソフトです。 その先輩はVisual Studio 6.0を用いて、VC++6.0とVB6.0で開発しており、(多分)全てのソースコードは残っています。たまにバグが出ますが、アプリもちゃんと動きます。 私は、こういったソフト開発はVisual Studio .NET 2002を用いてVC++.netでダイアログベースのMFCアプリケーションを作ったことならあるのですが、Visual Studio 6.0は使ったことが無く、VC++6.0とVB6.0の異なる言語でひとつのアプリを作ったことは未経験です。 現在、ソースコードと格闘中ですが、.NET 2002で開発したときの拡張子slnファイルが拡張子dswに該当するということと、おそらく先輩はアルゴリズム計算部分はVCで書いて、GUIの方はVBで書いたということくらいしか分かっていません。また、アプリのソースコードが入っているフォルダには[bin][src][include][lib][vb]といったフォルダがあり、[src]の下層にはまたソースコードが大量に入ったフォルダがあり、[bin]にはバイナリファイル、実行exeファイルが大量に入っています。[vb]にはVBで記述されたソースらしきものが入っています。 以上が背景なのですが、ソフトに詳しい方に幾つか質問させてください。 (1)このソフトを改造したいとすれば、具体的にどういう手順で改造すればよいですか? (2)VCの方はdswファイルについてビルドすればコンパイルされ、[bin]にexeが出来る?のですが、VBの方はコンパイル出来ません。なぜでしょうか? (3)このような異なる大量なexeファイルを、ひとつのアプリケーションとして構築するのはどうすれば良いのですか?これらのexeファイルは一つ一つがモジュール?であり、それらを結合する…といった理解でいいのでしょうか? (4)このVisual Studio 6.0で作られたソースを、現在フリーでダウンロードできるVisual Studio 2008 Express Editionに移行して改造することは、容易にできるでしょうか? 他にもたくさん疑問はあるのですが、とりあえず以上4つの疑問にお答え頂ける方がおりましたらご教授下さい。

  • 子ダイアログのデータを親ダイアログで取得するには

    VC6.0にてMFCでダイアログベースアプリケーションを作成しています。 親ダイアログ(TestDlg.cpp)のメニューを選択すると、子ダイアログ(SetDlg.cpp)が開き、テキストボックスに文字を入力し、ボタン押下によりテキストボックスの入力数字を確定(グローバル変数(igStatu)に代入)しています。 子ウインドウで入力確定したデータを、親ダイアログにて使用したいのですが、データが受け渡されずに、親ダイアログ側にデータが入りません。 どのようにしたら、子ダイアログで設定したデータを親ダイアログで取得することができるのでしょうか? C++、MFCともに全然わかっていませんがお願いします。 グローバル変数は、TestDlg.cpp、SetDlg.cppがインクルードしているTest.h内にstatic宣言しています。 static宣言しないとリンクエラー2005になってしまいます。

  • ダイアログ最前面表示時の後ろの画面操作について

    はじめまして。 お世話になります。 開発環境:WindowsXP VC++6.0 MFC使用 ダイアログベースで画面を作成(A.exe CDialogベース)し、その画面でボタンを押下し 子画面(A_Child)を表示させます。表示方法はDoModal()で。 そのA_ChildはCDialogベースです。 A_Childダイアログが表示されている間(最前面)は、デスクトップ上の操作を 何も出来ない様にしたいのですが、方法はありますでしょうか? (例:スタート→ログオフでダイアログが表示しますよね。 その時ってそのダイアログ以外は触れないですよね。) せめて、自分たちが作成したアプリだけでも操作不可能にしたいのです。 SetWindowPos()、ModifyStyle()、色々試しましたが上手くいきません。 DoModalで表示させるのがそもそもまちがいののでしょうか? 何か方法が有りましたらよろしくお願いします。 説明が下手ですみません。

  • 複数のダイアログの作成について

    環境 WIN98 VC++6.0 MFC SDIにて 1.メニューの”ダイアログ作成”をクリックすると、 void CMainFrame::OnKNew() { CInput dlg; int iID = dlg.DoModal(); } として、ダイアログを作成します。 2.次に、ダイアログのボタン押し下げにてダイアログを非表示にします。 void CInput::OnButton1() { ShowWindow(SW_HIDE); } このようなコードにおいて、一旦非表示にした後で、また”ダイアログ作成”メニューにてダイアログを作成した場合、 1.これは新たに2個目のダイアログが作られたのでしょうか? 2.それとも、単に最初に作られたダイアログが非表示から表示状態になっただけでしょうか? 3.それとも、最初のダイアログの上に2個目のダイアログが上書きされてしまうのでしょうか? 以上よろしくお願いします。

  • ダイアログのボタンが押せない

    環境:WinXP+VC6(SP5)+MFC アプリケーションクラスで、ダイアログを次のように表示しています。 BOOL CXXXXApp::InitInstance() { ・・・・ CXXXXDlg dlg(AfxGetMainWnd()->GetDesktopWindow()); dlg.DoModal(); ・・・・ } で、ダイアログは表示されるのですが、クリックできません。 (ディスクトップもクリックできません。) Enterなどキーイベントは問題なく処理されます。 どうすれば、クリックできるようになるでしょうか? おかしな質問で申し訳ありませんが、よろしくお願いします。

  • VC++でSQL Serverに接続するにはどのようにしたらよいでしょ

    VC++でSQL Serverに接続するにはどのようにしたらよいでしょうか? DBもVisual Studioも初心者なのでまったくわかりません。 開発環境は Microsoft Visual C++ 2008 standard Edition OS XP SP3 Microsoft SQL Server プロジェクトの種類はWin32コンソールアプリケーションかMFCアプリケーションのダイアログベースです。 接続できるならどちらでもよいです。 接続の他にもDBに入れらているデータを取得する方法もわからないです。 本当に初心者なので丁寧に教えていただけると大変助かります。 よろしくお願いいたします。

専門家に質問してみよう