ボタンの配置を変更したい

このQ&Aのポイント
  • VC++でプログラミングしています。MFC AppWizard(exe)でダイアログベースでボタンの位置を設定ファイルから読み込んで表示したいです。
  • 案1では予めボタンを作成しておき、EXE起動時に移動させる方法を検討していますが、関数の有無を調査中です。
  • 案2ではCButtonクラスのメンバを使用してボタンを表示しようとしていますが、正しく動作しません。サンプルコードやアドバイスを求めています。
回答を見る
  • ベストアンサー

ボタンの配置を変更したい

VC++でプログラミングしています。 MFC AppWizard(exe) でダイアログベースで造っています。 やりたいことは以下です。 ・設定ファイルに表示位置(座標)が書いてあり、ダイアログの初期化時に 設定ファイルを読んで、指定された位置にボタンを表示する。 私の案としては以下のものがあります。 <案1> 予めボタンを貼り付けて造り、EXE起動時に移動させる。 ただし、移動させる関数があるかは不明。 調べましたが、今のところ見つかっていません。 <案2> CButtonクラスのメンバを使用して、ボタンを表示する。 試しに以下のようなコードでやってみましたが、上手くいきませんでした。 使い方がわからず、試行錯誤しながらやってます。 CButton testButton; void CTestGamenDlg::OnButton1() { RECT Rect; Rect.left = 100; Rect.top = 100; Rect.right = 200; Rect.bottom = 200; testButton.Create("test", BS_PUSHBUTTON, Rect, this, 100); } 案1、2についての指摘、アドバイス、その他の案などありましたら 宜しくお願いします。 また、簡単なサンプルコードがあると助かります。

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

  • ベストアンサー
  • osaosa42
  • ベストアンサー率60% (20/33)
回答No.1

ボタンは、CWndが基本クラスなのでCWndの関数を使うことができます。 ということで、SetWindowPosを使って位置を移動させることができます。 使い方は、ヘルプを見てください。 それでは、がんばってください。

nabezo-
質問者

補足

アドバイスありがとうございます。 一点、ヘルプを見てもどうしても理解できないことがあります。 SetWindowPos関数はOnInitDialog関数の中でダイアログのサイズを 変更するために以下のように使っています。 SetWindowPos(NULL, 0, 0, 600, 400, SWP_NOZORDER | SWP_SHOWWINDOW); 今回、このダイアログに貼り付けられているボタンのサイズを 変更したいのですが、「このボタンの」という指定がSetWindowPos関数の どのパラメータで指定するのかがわかりませんでした。 ご迷惑おかけしますが、再度、アドバイス頂けないでしょうか。 よろしくお願いします。

その他の回答 (1)

  • osaosa42
  • ベストアンサー率60% (20/33)
回答No.2

1.クラスウイザードで、ボタンのメンバ変数(型は、CButton)を追加(メンバ名をm_Btn)します。 2.これで、m_Btn.SetWindowPosという風に使えます。

nabezo-
質問者

お礼

ありがとうございます。 大変参考になりました。 VCを始めたばかりでクラスについて勉強不足でした。

関連するQ&A

  • MFCでのボタン配置

    ダイアログではなく、直接Windowにボタンを貼り付けるために、AppWizaerdを使用して、MyAppというプロジェクトをつくり、MyAppクラスのヘッダに CButton mybutton を定義し、cppファイルのInitInstance関数内の m_pMainWnd->UpdateWindow();の下に、以下のように記述したところ、 mybutton.Create(_T("OK"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, CRect(10,10,100,100), m_pMainWnd, 1); ボタンは表示されるのですが、押しても凹んでくれません。どうしてなのでしょうか?? 環境はWinXP VisualStudio.Net2003です。

  • スレッドの作成と起動

    <プログラム環境> Windows XP VC++6.0 MFC AppWizard(exe) ダイアログベース <質問> ボタンを押すとOnButton()に入ります。 OnButton()内でワーカースレッドを起動させたいのですが、 どのようにコーディングするのでしょうか? スレッドの作成方法も分かりません・・。 宜しければご指摘お願い致します。

  • ダイアログ、ボタンについて

    VC++でプログラミングしています。 MFC AppWizard(exe) でダイアログベースで造っています。 以下の方法を教えてください。 ・EXE起動時、ダイアログのサイズを変更したい。 起動時に画面サイズをチェックして、画面いっぱいの大きさにしたいため。 ・EXE起動後、ボタンに表示している文字列を変更したい。 識者の方、ご教授願います。

  • Viewウインドウに直接ボタンを貼り付けるには

    VC++6.0 APPWizard(exe) SDI で作成したViewウインドウにボタンを貼り付けたいのですが、どうすればよいか教えてください。 普通にダイアログにボタンを貼り付ける場合のように簡単ではないのですか?

  • ボタンの表示の色、フォントを変更したい

    VC++でプログラミングしています。 MFCのダイアログベースのEXEを造っています。 ダイアログにはボタンとエディットボックスを貼り付けています。 私がやりたいのは以下のことです。 ・ボタンの色を設定したい ・ボタン、エディットボックスに表示する文字の色を設定したい ・ボタン、エディットボックスに表示する文字のフォント(サイズ)を設定したい プロパティでサイズ変更すると全体に反映されてしまうので、個々の コントロールについて制御したいと思っています。 ヘルプで調べて、それらしい関数を見つけるのですが使い方がわかりません。 VCを始めたばかりで、クラスの理解がまだ浅いです。。。 関数の説明は理解できても、「じゃあ、コードはどう書くの?」という状態です。 「○○ は ×× のメンバではありません」と、よく怒られてます。。。 識者の方、ご教授願います。 コードがどうなるのか知りたいので、簡単なサンプルコードがあると助かります。 また、質問ではないのですが、「この関数は○○をする」というのではなく、 「○○をするにはこの関数を使う」という様に調べられる、お勧めの書籍、 Webなどがありましたら教えてください。 今後の勉強に役立てたいと思っています。

  • スピンボタンの使い方

    <プログラム環境> Windows XP VC++6.0 MFC AppWizard(exe) ダイアログベース <症状> ダイアログエディタでスピンボタンを配置し、ClassWizardでCSpinButtonCtrl型のメンバ変数を追加しました。 その後コンパイルするとエラー出ないのですが、実行出来ませんでした。 デバッグをすると、「ハンドルされていない例外は、試作.exeに あります:0xC0000005: Access Violation。」 が表示されて、それ以上先には進めません。 メンバ変数を削除すると、症状は無くなります。 <質問> メンバ変数を追加するだけで何故このような症状が出るのでしょうか? スピンボタンでは 初期値40 レンジ:0~80 増加幅:10 減少幅:-10 で設定したいのですが、どのようにしたら良いのでしょか? 宜しければご指摘お願い致します。

  • 起動後直に実行するコードはどこに?

    初心者です。 VC++6.0でAppWizardを使って単純なダイアログベースのスケルトンが出来ます。 通常はこの中にボタンなどを配置しイベント処理するのですが イベントではなくプログラムが起動しフォームが表示されたら直ちに実行させる様なコードはどこの位置から書き込めば良いのでしょうか。 たとえばタイマーをスタートさせデジタル時計を1秒毎に連続で表示させる様な事をしたいのですが今一書き込む位置がわかりません。 よろしくお願いします。

  • ボタンが押された事を検知するには?

    <プログラム環境> Windows XP VC++6.0 MFC AppWizard(exe) ダイアログベース <目的> 1.ダイアログにボタン1を配置する 2.処理A(無限ループ)を開始する 3.処理Aの先頭でボタン1が押されたか判断する 4.ボタン1が押された場合処理Aを終了し、処理Bを行う というプログラムを作成する。 <質問> 目的のプログラムを作成するには、ボタン1が押された事を検知する 必要があると思うのですが、その方法が分かりません。 ボタンが押された事を検知するにはどうしたら良いのでしょうか? 宜しければご指摘お願い致します。

  • MFC VC++6.0 DestroyWindowの実装場所について

    [開発環境]:Visual C++ 6.0 現在、Visual C++ 6.0を使ったプログラミングの勉強をしています。 MFC AppWizard (exe)でSDIプログラムのtest1プロジェクト作成後、メインフレームにボタンを実装し、そのボタンを押下するとモードレスダイアログを表示するというアプリケーションを作っているのですが、ダイアログを終了させる時のDestroyWindowの実装場所と実装方法が分かりません。 ダイアログ用のクラスはCmyDialogとしていますが、ダイアログの終了ボタンを実装した場合、そのボタン処理の中すなわちCmyDialogクラスのなかの関数で行うべきなのでしょうか?それともダイアログの作成と同様にメインフレームがわの処理(CTest1Viewクラスでの処理?)として行うべきなのでしょうか?この場合にはどのような場所でどのようなタイミングで実装すればよいのか分かりません。 ご存じの方、これらについて御教授お願いします。 以下プログラムの一部を記載します。 -test1view.cppの一部-(ここでダイアログの作成と表示をしています) void CTest1View::OnButton1() { CmyDialog* myDLG = new CmyDialog; myDLG->Create(IDD_DIALOG1,this); myDLG->ShowWindow(SW_SHOW); }

  • ラジオボタンのメンバ変数

    VC++6.0でMFC AppWizard(exe)というプロジェクト、ダイアログベースでプログラミングしています。 ダイアログにラジオボタンを三つ配置し、Radio1を右クリック→プロパティ→グループにチェックを入れました。 そして、IDC_RADIO1にメンバ変数m_Radio(int)を追加してコンパイルすると「問題が発生したため終了します」というダイアログが出ます・・。 メンバ変数を削除するとコンパイルは成功します。 何が間違いでこんなエラーが出るのでしょうか? どうかよろしくお願いします。

専門家に質問してみよう