質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
MFC

MFC (Microsoft Fouondation Class)とは、MicrosoftがVC++用に開発したWindows用アプリケーションのフレームワークです。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

解決済

エディットコントロールに入力された数値を計算に利用する方法等を教えてください!

don
don

総合スコア10

MFC

MFC (Microsoft Fouondation Class)とは、MicrosoftがVC++用に開発したWindows用アプリケーションのフレームワークです。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

2回答

0リアクション

0クリップ

511閲覧

投稿2022/07/25 14:22

前提

C++でMFCアプリケーションを勉強し始めた初心者です。

実現したいこと

・エディットコントロールに入力された数値を変数に受け取り、ボタンイベントの関数内で計算に利用したい。
・身長と体重のエディットコントロールに入力値がある時のみ、ボタンを有効にする。

発生している問題・エラーメッセージ

エディットコントロールに追加する変数をdouble型で定義すれば、ボタンイベント内での計算に使えるのですが、その他の処理でCEditクラスの関数を利用したいため、エディットコントロールに追加する変数をCEdit型としてコードを書きたい。
もしくは他に良い方法があればご教授願いたいです。

該当のソースコード

C++

// BMIviewerDlg.h // 実装 protected: HICON m_hIcon; // 生成された、メッセージ割り当て関数 virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); DECLARE_MESSAGE_MAP() public: afx_msg void OnBnClickedButton1(); CListCtrl m_ListCtrl; CEdit m_Height; CEdit m_Weight; CEdit m_BMI; afx_msg void OnBnClickedButton2(); afx_msg void OnBnClickedButton3(); // BMIviewerDlg.cpp // 初期状態:無効化 // エディットコントロールに入力された身長、体重からBMIを計算する関数 void CBMIviewerDlg::OnBnClickedButton1() { // ↓出来てません。 UpdateData( true ); TCHAR Buf1[128]; TCHAR Buf2[128]; TCHAR Buf3[128]; //GetWindowText( IDC_EDIT1, Buf1, 5 ); //GetWindowText( IDC_EDIT2, Buf2, 5 ); //GetWindowText( IDC_EDIT3, Buf3, 4 ); double dHeight = _tstof( Buf1 ); double dWeight = _tstof( Buf2 ); double dBMI = _tstof( Buf3 ); dBMI = ( dWeight / ( ( dHeight / 100 ) * ( dHeight / 100 ) )); if( 18.50 > dBMI ){// 痩せぎみ } if( 18.50 <= dBMI && 25.00 > dBMI ){// 普通体重 } if( 25.00 <= dBMI ){// 肥満 } UpdateData( false ); } // 初期状態:無効化 // エディットコントロール内の数値をクリア void CBMIviewerDlg::OnBnClickedButton2() { m_Height.Clear(); m_Weight.Clear(); m_BMI.Clear(); // 身長・体重の値がクリアされるため、計算ボタンと記録ボタンを無効化 CButton *button1 = ( CButton * ) GetDlgItem( IDC_BUTTON1 ); button1->EnableWindow( FALSE ); CButton *button3 = ( CButton * ) GetDlgItem( IDC_BUTTON3 ); button3->EnableWindow( FALSE ); } // 初期状態:無効化 // 身長・体重・BMI・肥満度に数値があるときにリストにそれらを記録 void CBMIviewerDlg::OnBnClickedButton3() { }

補足情報(FW/ツールのバージョンなど)

visual studioのバージョンは2022です。
MFCのダイアログベース、
スタティックライブラリでMFCを使用
マルチバイト文字セット
を利用しています。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

yominet

2022/07/25 18:11

例えば、m_Height.GetWindowText()でとれませんか?
dodox86

2022/07/26 01:19

> エディットコントロールに追加する変数をCEdit型としてコードを書きたい。 ですが、CEdit型のメンバー変数 m_Height, m_Weight, m_BMI が既に宣言されていますが、これはVisual Studioからクラスウィザードや「変数の追加」などで追加したものですか? それとも手動(自力)で書いたものでしょうか。
dodox86

2022/07/26 01:44

MFCにはDDX(Dialog Data Exchange)と言う機構がもともとあって、ダイアログボックス中のコントロール、本質問ではEDITコントロールつまりCEditのメンバー変数をおおむね自動的に割り付けて、そのメンバー変数経由でデータの操作をすることができます。 [ダイアログ データ エクスチェンジ] https://docs.microsoft.com/ja-jp/cpp/mfc/dialog-data-exchange?view=msvc-170 MFC特有の方法だしクセもあるし、分からないところに無理して使うこともないですが。
don

2022/07/26 07:01

dodox86さん それらの変数は変数の追加機能を使って追加しました! そんな機能があるんですか。 使えるようになれば便利そうなことはわかりました。 調べてみます!
dodox86

2022/07/26 07:31 編集

> それらの変数は変数の追加機能を使って追加しました! そうであれば正にDDXを使う為の操作です。使うべき、あるいはせっかくなので使えるようになっておいた方が得、でしょうね。doubleのメンバー変数を割り当てておいてEDITコントロールの入力文字列を自動的にdoubleに変換して格納することもできます。簡単な範囲チェック、エラー表示などもできます。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

MFC

MFC (Microsoft Fouondation Class)とは、MicrosoftがVC++用に開発したWindows用アプリケーションのフレームワークです。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。