Win32APIとMFC H107102 古田雅基 H107048 佐藤一樹 H107126 山下洋平 目次 MFCとは ∙ MFCの利点と欠点 ∙ MFCでプログラミング AppWizard コントロール イベントハンドラ MFCとは Microsoft Foundation Class • VisualC++に付属するクラスライブラリ • Windowsアプリケーションの作成に有用なクラ スを提供している MFCの利点 WindowsAPIをオブジェクト指向でプログラ ムできる Win32API MFC Application WindowsOS Win32API MFCはWindowsAPIをC++でラッピングして 使いやすくした MFCの欠点 互換性 • MFCを使えば、使っただけWindowsOSに依存 肥大化 • ライブラリを組み込むためファイル要領の肥大化 利用時の問題 • 内部的には結局Win32API • MFCが用意していない部分もある AppWizard App (Application) Wizardとは • スケルトンを作成するためのツール • スケルトンとは アプリケーションの骨組み AppWizard にて 「ダイアログ ベース」に設定すると 左の状態まで自動作成してくれる。 AppWizard 新しいプロジェクト • プロジェクトの種類 • テンプレート • プロジェクト名 : Visual C++ : MFC アプリケーション : 任意のもの AppWizard アプリケーションの種類 AppWizard スケルトン完成 コントロールの配置 コントロールの配置 • リソース ビューにて配置を行 うダイアログを選択 今回の場合は Dialog ディレクトリ内の 「IDD_SAMPLELECTURE_DIALOG」を ダブルクリックして開く • ダイアログエディタからコント ロールをフォームに配置 ※ 削除方法 配置されたコントロールを選択して Deleteキー(プログラム的には消えな いときも) ドラッグ&ドロップ or ダブルクリックで配置 コントロールのプロパティ プロパティの設定 • ID : 各コントロールを区別するための管理名 ※ 各コントロールによって プロパティの内容は違う (ちなみにこれはボタン1のプロパティ) ※ ダイアログ自身も プロパティを設定する事が可能 イベント ハンドラ イベント ハンドラを追加するには • コントロールを選択して、右クリック • ポップアップメニューから「イベント ハンドラの追加」 プロパティウィンドウの 「管理イベント」からも設定可能 イベント ハンドラ イベント ハンドラ ウィザードを用いる • メッセージの種類を選ぶ ButtonControlに対して クリックした際の処理がしたい場合は 「BN_CLICKED」を選択 設定が終わったら 「追加して編集(A)」をクリック 自動的に右記のコードが 生成される void Cmfc_testDlg::OnBnClickedBtn() { // TODO: ここにコントロール通知ハンドラコードを追加します。 } メンバ変数 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 簡単な計算機をつくろう • このようなフィールドを作って、四則演算ができる ようにしよう 課題3 課題3は自由課題となるので、何か自由にプ ログラムしてみよう 参考URL http://www.g-ishihara.com/mfc_ge_02.htm
© Copyright 2024 ExpyDoc