Visual C++ による MFC プログラミング Lashkia 研究室 Lecture 5th H106013 井戸 悠二 H106044 木町 拓矢 目次 MFCとは MFCの利点・欠点 MFCでプログラミング AppWizardの使い方 コントロール ダイアログデータの更新 課題 MFCとは Microsoft Foundation Class (以下MFC) Visual C++ に付属するクラスライブラリ Windowsアプリケーションソフトの作成に有用な 多くのクラスを提供 利用形態 プログラムにMFCライブラリを組み込む 共有MFCライブラリを用いる MFCの利点 Windows API をオブジェクト指向で組める Windows アプリケーションが効率良く組める Windows OS Windows Application (MFC を用いる) Windows Application (Win32 API を用いる) MFC Windows API (Win32 API, Win64 API …etc) ※SDKの一部として提供 MFC は Windows API を C++ で ラッピングして扱いやすくしたもの ※ 扱いやすくしたもの≠簡単 MFCの欠点 互換性の問題 肥大化 MFCを使えば使うほど、Windows OS に依存する ライブラリを組み込むため 利用時の問題 内部的には結局 Windows API が使われている MFCで用意されていない部分もある CRT (C Runtime) との共存が難しい場合がある MFCでプログラミング MFCで作成出来るアプリケーション SDI : シングル ドキュメント MDI : マルチ ドキュメント ダイアログ ベース (Notepad, Paint …etc) (Word, Excel …etc) 今回は ダイアログ ベース での作成のみ 開発環境 Microsoft Visual Studio 2008 Professional Edition 前回と同様 AppWizardの使い方1 App (Application) Wizardとは 楽にスケルトンを作成するためのツール スケルトンとは アプリケーションの骨組み スケルトンに肉付けしていく AppWizard にて 「ダイアログ ベース」に設定すると 左の状態まで自動作成してくれる。 AppWizardの使い方2 新しいプロジェクト プロジェクトの種類 テンプレート プロジェクト名 : Visual C++ : MFC アプリケーション : SampleLectuer(任意) AppWizardの使い方3 アプリケーションの種類を設定 アプリケーションの種類 : ダイアログ ベース AppWizardの使い方4 スケルトンの完成 コントロールの配置 コントロールの配置 リソース ビューにて配置を行 うダイアログを選択 今回の場合は Dialog ディレクトリ内の 「IDD_SAMPLELECTURE_DIALOG」を ダブルクリックして開く ダイアログエディタからコント ロールをフォームに配置 ※ 削除方法 配置されたコントロールを選択して Deleteキー ドラッグ&ドロップ or ダブルクリックで配置 コントロールのプロパティ プロパティを設定 ID : 各コントロールを区別するための管理名 ※ 各コントロールによって プロパティの内容は違う (ちなみにこれはボタン1のプロパティ) ※ ダイアログ自身も プロパティを設定する事が可能 イベント ハンドラの追加1 イベント ハンドラを追加するには コントロールを選択して、右クリック ポップアップメニューから「イベント ハンドラの追加」 プロパティウィンドウの 「管理イベント」からも設定可能 パターン① パターン② イベント ハンドラの追加2 イベント ハンドラ ウィザードを用いる メッセージの種類を選ぶ ButtonControlに対して クリックした際の処理がしたい場合は 「BN_CLICKED」を選択 設定が終わったら 「追加して編集(A)」をクリック 自動的に以下のコードが 追加される void Cmfc_testDlg::OnBnClickedBtn() { // TODO: ここにコントロール通知ハンドラコードを追加します。 } メンバ変数の割り当て Edit Contorol にメンバ変数を設定する フォームに作ったEditBoxを右クリック 変数の追加で変数名、カテゴリ、コントロール種類等を決 める メンバ変数の割り当て Edit Contorol にメンバ変数を設定する カテゴリ 変数の種類 変数名 : Value : CString : text1 (任意) カテゴリは2種類 ・Control 型 ・Value 型 コントロールの状態を 変数で扱う場合は Value型 コントロールを関数を通して 操作したい場合は Control型 ダイアログのデータを更新1 DDX (Dialog Data eXchange ) を用いる その名の通り、ダイアログのデータを入れ替える 命令は UpdateData という関数 メンバ変数 ダイアログ → ダイアログ → メンバ変数 : UpdateData (FALSE); : UpdateData (TRUE); void CMFCDlg :: OnBnClickButton1 () { // TODO : ここにコントロール通知ハンドラ コードを追加します。 UpdateData (TRUE); // ダイアログのデータを読み出し text2 = text1; // text1 の内容を text2 にコピー UpdateData (FALSE); // メンバ変数の内容をダイアログに書き出す } // text1, text2 は Edit Control に設定されたメンバ変数(カテゴリ:Value, CString) ダイアログのデータを更新2 DDXを使わない方法 プログラム内にてコントロールを取得する CString strMsg; // 各コントロールを取得 CEdit* text1 = (CEdit*)GetDlgItem(IDC_EDIT1); CEdit* text2 = (CEdit*)GetDlgItem(IDC_EDIT2); text1->GetWindowText(strMsg); text2->SetWindowText(strMsg); // 値を取得 // 値を設定 プログラムの規模が大きくなってくると、より複雑になっていく・・・ そんな時にDDXを使う事で各コントロールを楽に管理出来る MFCを有効活用するのであればDDXは利用すべき 課題1 エディットボックスの内容をコピー 利用するコントロール Button Control Edit Control コントロールID 1個 2個 メンバ タイプ メッセージ IDC_EDIT1 text1 CString - IDC_EDIT2 text2 CString - IDC_BTN - - BN_CLICKED IDC_EDIT1 に入力された値を IDC_BTN が押されたら IDC_EDIT2 にコピーするプログラムを作成しなさい 課題2 またですが、自分の好きなものなんでもいい ので作っちゃおう! わからない事はネット等を有効活用して、習って ないことでも取り入れちゃってOKです。 出来がいい人=・・・(お察しください)。
© Copyright 2025 ExpyDoc