Presentation is loading. Please wait.

Presentation is loading. Please wait.

Visual C++ による MFC プログラミング

Similar presentations


Presentation on theme: "Visual C++ による MFC プログラミング"— Presentation transcript:

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です。 出来がいい人=・・・(お察しください)。


Download ppt "Visual C++ による MFC プログラミング"

Similar presentations


Ads by Google