Download presentation
1
Visual C++ による MFC プログラミング
Lashkia 研究室 Lecture 5th H106013 井戸 悠二 H106044 木町 拓矢
2
目次 MFCとは MFCの利点・欠点 MFCでプログラミング AppWizardの使い方 コントロール ダイアログデータの更新 課題
3
MFCとは Microsoft Foundation Class (以下MFC) Visual C++ に付属するクラスライブラリ
Windowsアプリケーションソフトの作成に有用な多くのクラスを提供 利用形態 プログラムにMFCライブラリを組み込む 共有MFCライブラリを用いる
4
MFCの利点 MFC は Windows API を C++ で ラッピングして扱いやすくしたもの
Windows OS Windows API (Win32 API, Win64 API …etc) ※SDKの一部として提供 Windows Application (MFC を用いる) MFC Windows Application (Win32 API を用いる) MFC は Windows API を C++ で ラッピングして扱いやすくしたもの ※ 扱いやすくしたもの≠簡単
5
MFCの欠点 互換性の問題 肥大化 利用時の問題 MFCを使えば使うほど、Windows OS に依存する ライブラリを組み込むため
内部的には結局 Windows API が使われている MFCで用意されていない部分もある CRT (C Runtime) との共存が難しい場合がある
6
MFCでプログラミング MFCで作成出来るアプリケーション 今回は ダイアログ ベース での作成のみ 開発環境
SDI : シングル ドキュメント (Notepad, Paint …etc) MDI : マルチ ドキュメント (Word, Excel …etc) ダイアログ ベース 今回は ダイアログ ベース での作成のみ 開発環境 Microsoft Visual Studio 2008 Professional Edition 前回と同様
7
AppWizardの使い方1 App (Application) Wizardとは 楽にスケルトンを作成するためのツール スケルトンとは
アプリケーションの骨組み スケルトンに肉付けしていく AppWizard にて 「ダイアログ ベース」に設定すると 左の状態まで自動作成してくれる。
8
AppWizardの使い方2 新しいプロジェクト プロジェクトの種類 : Visual C++ テンプレート : MFC アプリケーション
プロジェクト名 : SampleLectuer(任意)
9
AppWizardの使い方3 アプリケーションの種類を設定 アプリケーションの種類 : ダイアログ ベース DLL
アプリケーションの種類 : ダイアログ ベース DLL ダイナミック リンク ライブラリ (DLL) は、関数とデータを含んだモジュールの集合です。プログラム ファイル (.exe ファイルや .dll ファイルなど) は、これらのモジュールを実行時にロードします (つまり、必要なモジュールが呼び出し元プロセスのアドレス空間にマッピングされます)。DLL は、次の 2 種類の関数で定義されます。
10
AppWizardの使い方4 スケルトンの完成
11
コントロールの配置 コントロールの配置 リソース ビューにて配置を行うダイアログを選択 ダイアログエディタからコントロールをフォームに配置
今回の場合は Dialog ディレクトリ内の 「IDD_SAMPLELECTURE_DIALOG」を ダブルクリックして開く ※ 削除方法 配置されたコントロールを選択して Deleteキー ドラッグ&ドロップ or ダブルクリックで配置
12
コントロールのプロパティ プロパティを設定 ID : 各コントロールを区別するための管理名 ※ 各コントロールによって
プロパティの内容は違う (ちなみにこれはボタン1のプロパティ) ※ ダイアログ自身も プロパティを設定する事が可能
13
イベント ハンドラの追加1 イベント ハンドラを追加するには コントロールを選択して、右クリック
ポップアップメニューから「イベント ハンドラの追加」 プロパティウィンドウの 「管理イベント」からも設定可能 パターン① パターン②
14
イベント ハンドラの追加2 イベント ハンドラ ウィザードを用いる メッセージの種類を選ぶ ButtonControlに対して
クリックした際の処理がしたい場合は 「BN_CLICKED」を選択 設定が終わったら 「追加して編集(A)」をクリック 自動的に以下のコードが 追加される void Cmfc_testDlg::OnBnClickedBtn() { // TODO: ここにコントロール通知ハンドラコードを追加します。 }
15
メンバ変数の割り当て Edit Contorol にメンバ変数を設定する フォームに作ったEditBoxを右クリック
変数の追加で変数名、カテゴリ、コントロール種類等を決める
16
メンバ変数の割り当て Edit Contorol にメンバ変数を設定する カテゴリ : Value 変数の種類 : CString
変数名 : text1 (任意) カテゴリは2種類 ・Control 型 ・Value 型 コントロールの状態を 変数で扱う場合は Value型 コントロールを関数を通して 操作したい場合は Control型
17
ダイアログのデータを更新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) DDX(dialog data exchange)とは、ダイアログ上のコントロールの初期化と、コントロールとのデータのやりとりを単純化するための仕組みです。 ここで言う「コントロールの初期化」とは、コントロールのサブクラス化や、ウィンドウハンドルをコントロールクラスに設定することを意味します。また、「コントロールとのデータのやりとり」とは、指定した変数の値をコントロールに設定したり、逆にコントロールから取得した値を指定した変数に代入することを意味します。
18
ダイアログのデータを更新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は利用すべき
19
課題1 エディットボックスの内容をコピー 利用するコントロール Button Control 1個 Edit Control 2個
コントロールID メンバ タイプ メッセージ IDC_EDIT1 text1 CString - IDC_EDIT2 text2 IDC_BTN BN_CLICKED IDC_EDIT1 に入力された値を IDC_BTN が押されたら IDC_EDIT2 にコピーするプログラムを作成しなさい
20
課題2 またですが、自分の好きなものなんでもいいので作っちゃおう!
わからない事はネット等を有効活用して、習ってないことでも取り入れちゃってOKです。 出来がいい人=・・・(お察しください)。
Similar presentations
© 2025 SlidePlayer.com Inc.
All rights reserved.