• ベストアンサー

MFCでinputbox

先ほどの図書館システムを質問したものですが、MFCには簡単にInputboxを出せる関数はあるのでしょうか?それともダイアログを小さくするとか...? 今考えてみたら、SDKで出来そうですよね。SDKのどの関数がVBでいうInputboxに相当するのでしょうか?また,その関数はどうやって呼べばいいのでしょうか?

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

  • ベストアンサー
  • syousuke
  • ベストアンサー率61% (13/21)
回答No.2

関数は、xxxApp::InitInstance()内の記述方法ですよね? ログインダイアログをm_pMainWndにするのもなんですので LoginDlg login; int nResponse = login.DoModal(); if (nResponse == IDOK) { CMainDlg dlg; m_pMainWnd = &dlg; } でOKだと思います。

northcurlcurl
質問者

お礼

上記のコード通り自分のコードに書き込んでも上手く行かず、嘆いてばかりいたのですが、BreakPointを置きながら、プログラムの動きを追っていったら、Dlg.DoModal()を書き忘れてることに気づきました...。syousukeさん、アドバイスありがとうございました。

その他の回答 (1)

  • syousuke
  • ベストアンサー率61% (13/21)
回答No.1

VBのInputBoxは、Cでは簡単には行かないと思います。 MFCでは、おっしゃる通り、ダイアログエディタで作るしかないでしょう。 SDKだともっとめんどくさくて、リソースファイルを作ってやるか、CreateWindowを使って、やるかだとおもいます。 CreateWindow関数の方法では、最初にCreateWindowでダイアログ形式のウインドウを作って 次に戻り値のhWndを親にして、エディットボタンのクラスでCreateWindowを呼べばOKだと思います。

northcurlcurl
質問者

補足

さっそくの回答ありがとうございます。 結局MFCで新しいダイアログボックスを作ることにしたのですが、このInputBoxはログイン認証のためのもので、認証が成功すると(OKボタンが押されると)、メインのダイアログを動かすようにしたいのですが、どのように呼べばいいのでしょうか? LoginDlg dlg; m_pMainWnd = &dlg; int nResponse = dlg.DoModal(); if (nResponse == IDOK) { MainDlg Main_dlg; m_pMainWnd = &Main_dlg; } でよろしいのでしょうか...?

関連するQ&A

  • SDKやMFCでの開発について

    私はサンデープログラマなので趣味でSDKなどで簡単なプログラミングをしています。MFCにも挑戦しようかと思っているところなのですが、いかんせんVisualと名前がついているのにSDKもMFCもぜんぜんVisualではありませんので開発にかなり時間がかかってしまいます。ダイアログベースでのプログラミングがあるかとは思いますが、コントロールのインターフェースの制御などに制限があるように思えます。 ●やはりソフトハウスなどでは画面(ウィンドウ)を作るとき、 コントロールの位置など直接確認できないので、 その専門の人(画面を作る人たち)がいて、 コントロールの位置を設定して(CreateWidnow関数などのTop,Left引数の位置に座標を設定して) いちいちその度にビルドをし、コントロールの位置を確認して画面を制作しているのでしょうか? ●また、私はC#に興味があります。それはなぜかというと、SDKや特にMFCに比べて、やはりVBのように画面を作りやすくするため、VBのようなデザイン画面を取り入れたり、XMLなどを操作できるようにしたり、MFCのようにオブジェクト指向でWindowsの性能を最大限に引き出すことができる(まとまった一連の動作はオブジェクトで実行し、単機能の動作は直接APIにアクセスし実行することができる)VBとMFCとJAVAのいいところをすべて網羅した言語のように思えます。この認識は正しいのでしょうか?

  • C言語記述されたものをMFCに移植

    C言語(SDK)で、記述されたソースコードを C++(MFC)で記述したいのですが、 ダイアログベースでSDKだとEnableWindowなどの 処理が増えて、バグの要因となってしまい自分自身で 最後は状態が分からなくなってしまうことがあります、 それで、MFCにして処理を減らそうと思いました。 基本的にはXXXDlg.cppに書きますが、 関数だけのファイルをMFCとして書き換えたいのですが、 メンバを使うことができません。 XXXDlg.hをincludeしたのですが、駄目でした。 どのようにしたらよろしいのでしょうか?

  • VC++6.0からVBで作成したActiveX.DLL内の関数が呼出しできない

    VB6.0で作成したActiveX.DLLをVC++6.0(Win32SDK)側で 呼び出すプログラムを作成中です。 VB側(DLL)では問題なく作成できています。 Classに1つPublic関数を作成しただけです。 (Instancingは5MultiUseにしてあります) しかし、VC++側の呼出しでDLL内の関数が 呼び出せないのです。 LoadLibraryExでDLL自体のハンドルは取得できるのですが GetProcAddressで関数の取得時にNULLが返ってきてしまいます。 今まで試したことは ・VBからの呼出しはOK ・MFCだとOK ・SDKでもuser32.dll呼出しのサンプルは関数も実行できる です。 今からMFCへ以降するのは厳しいのでSDkでの方法を 知りたいです。 VB側が悪いのかもしれませんが、関数1つですし、 いじるところもほとんどないので多分VC++側だと 思っています。 なにか注意点とか確認するところをおしえていただければ 幸いです。 環境 Windows2000 SP3 VB6.0 SP5 VC++6.0 SP5 Win32SDK

  • MFCのexeのプログラムを MFCのdllに書き換えたい

    VC++6.0を使用しています 新規作成 MFC AppWizard(exe) 新規 OK [ステップ1] ダイアログベース 次へ [ステップ2/4] 次へ [ステップ3/4] 次へ [ステップ4/4] 終了 で作られた、雛型のexeをそっくりMFCのDLLに書き換えたい と考えています exeで作られたアプリを他のユーザーがVB6.0からDLLとして呼び出したいので書き換えて欲しいと頼まれました MFCのDLLも雛型は簡単に出来上がるのですが 以下の関数を独立したオブジェクトにして、VB6.0からDLLの関数VBFUNC1として呼び出したいのですが、VBから呼び出すと AfxEnableControlContainer();でアサートで引っ掛かってしまいます ダイアログを使用したMFCのEXEをDLLとして使う場合の、コーディングについてご指南ください BOOL CAaaApp::VBFUNC1() //BOOL CAaaApp::InitInstance() {   AfxEnableControlContainer(); #ifdef _AFXDLL   Enable3dControls(); #else   Enable3dControlsStatic(); #endif   CAaaDlg dlg;   m_pMainWnd = &dlg;   int nResponse = dlg.DoModal();   if (nResponse == IDOK)   {   }   else if (nResponse == IDCANCEL)   {   }   return FALSE; }

  • VisualBasic でInputbox関数を使う方法について

    入力ボックスを表示し、その中に入力された数値を変数に格納したいのですが、.NETのときは動作したのですが、VB2005ですと、エラーとなってしまいます。何か設定項目があるのでしょうか?ご教示お願い致します。 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim i As Decimal i = InputBox("メッセージ", "値を取得") End Sub End Class なお、helpから検索したVisual Basic 言語リファレンスの「InputBox 関数 (Visual Basic)参照 使用例」に掲載されているソースをそのまま実行してもエラーが帰ってきます。

  • InputBox関数について

    VBAの勉強中です。 教えてください。 INPUTBOX関数で、何も入力しないでの入力も可、とするコードはどうなるでしょうか。 言葉を変えて言えば、入力ボックスが未入力の状態でOKボタンを押すということです。 例えば以下のようにすると、当然ながら「キャンセル」と判断されます。 Sub Test()  Dim myData As String  myData = InputBox("入力してください")   If myData = "" Then     MsgBox "キャンセル"   Else     MsgBox "入力OK"   End If End Sub ■■尚、今回は、メソッドではなくて関数での質問になりますのでその点よろしくお願いします。  

  • InputBoxでの日本語オン、オフ設定方法

    InputBoxでの日本語オン、オフ自動設定方法が 知りたいです。 具体的には、 エクセルでいうところの、 データ(D)→入力規則(L)→「データの入力規則」ダイアログ内の 日本語タブで日本語入力オン、の設定を、 VB6.0 CCEのプロパティで設定したいです。 例)・InputBoxを2回連続で入力するとき 最初のInputBoxで、自動的に日本語入力オン (Enterキーで入力終了後) 次のInputBoxで、自動的に日本語入力オフ 開発環境:VB6.0 CCE です。 詳しい方、宜しくお願い致します。

  • Win32でInputBoxを実装するには?

    Win2000+ActivePerl 5.8.7 の環境です。 PerlでGUIということで、メッセージボックスであれば、次のようにして実現できました。 ------------ use Win32; my $msg = $ARGV[0]; my $icon = $ARGV[1]; my $caption = $ARGV[2]; my $result = Win32::MsgBox($msg, $ico, $caption); print "$result\n"; ------------ これと同様に、InputBoxのようなこと -------------------------------- ダイアログウィンドウを表示し、文字列の入力を促して、 Enterすると、スクリプト内の関数戻り値として、その文字列を 取得できるようなもの。 -------------------------------- が出来ないでしょうか。 ネット上色々と探し回ってみましたが、単純には見つかりませんでした。 ( Haven't yet implemented function inputbox...) 何か自分で組み合わせて作成する必要があるのでしょうか? (DOS窓経由であれば、単純に、$txt=<STDIN>; で取れるのですが) よろしくご教示ください。

    • ベストアンサー
    • Perl
  • InputboxメソッドでRangeオブジェクトを取得

    WinXP、Excel2002です。 InputboxメソッドでRangeオブジェクトを取得 しようとしています。 ヘルプを見て、 Set myRange = Application.InputBox(prompt := "Sample", type := 8) を適用したのですが、これではダイアログのボタンで キャンセルすると、Setの部分でエラーになってしまいます。 これを回避するため、いろいろ考えましたが、結局On Error Resume Nextでエラーを無視することにしました。 私が初心者なもので、キャンセルや不正な入力のときのもっと適切なやり方があるのではと思い質問させていただきます。 みなさんは、inputboxでキャンセルや不正な入力があったとき、どのようにプログラムされているのでしょうか?

  • inputboxの日本語入力切替について

    VBAのinputbox関数についての質問です inputboxを使ってデータの入力をしたいのですが、日本語入力のONとOFFを自動的に切り替えられる記述はありませんでしょうか。 現在の記述は sub 入力() Dim simei As String simei = InputBox("氏名を入力してください") range("b5").Value = Simei End su のような感じです。inputboxを表示するまえに、言語バーの日本語入力がONの状態になるようにしたいのですが…。よろしくお願いします。

専門家に質問してみよう