More Related Content
PPTX
PPTX
Orange Cube 自社フレームワーク 2015/3 PDF
PDF
PPTX
PDF
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~ PPTX
PDF
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~ What's hot
PDF
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~ PPTX
PDF
PPTX
PDF
KEY
PDF
C# コーディングガイドライン 2013/02/26 PDF
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines PDF
PDF
Layout analyzerでのgroovyの利用について PDF
DoActionからJava VMバイトコードに変換する話 PDF
PDF
ActionScriptを使わないFlash勉強会 #1(前日版) PDF
Eclipse ADTとAndroidStudio両方で動かせる開発環境構築 PDF
node+socket.io+enchant.jsでチャットゲーを作る PDF
Synthesijer zynq qs_20150316 PDF
PDF
PPTX
PDF
Synthesijer jjug 201504_01 Viewers also liked
PDF
PPTX
PDF
PDF
わんくま名古屋#36 (20150725) Windows 10 ユニバーサル Windows アプリ開発入門 PPTX
20130302 わんくま勉強会大阪 tfsを使ってみよう PDF
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~ PPTX
PDF
わんくま名古屋#33(20141115) モノ作り半生 PDF
20150912わんくま大阪-Firefox OSの「いま」と「これから」 Similar to わんくまT78 mfcを始めようとしてみた
PPTX
PPT
PPTX
T69 c++cli ネイティブライブラリラッピング入門 PDF
PDF
WPF/Silverlight視点で視るMetroスタイルのXAML PDF
PPTX
わんくま名古屋#28(20130824) c#で、ライフゲームを高速化してみるよ PPTX
An other world awaits you PDF
PPT
PDF
PPTX
PDF
Windows 7 UX Applications PPTX
Visual Studio による開発環境・プログラミングの進化 PDF
PDF
[2000/10] .NET Technical Briefing 2000 / Visual Studio .NET Part I PDF
PDF
PPTX
PDF
Unity2015_No10_~UGUI&Audio~ わんくまT78 mfcを始めようとしてみた
- 1.
- 2.
自己紹介
• HN:暁 紫電
•本名: 伊藤 伸男
• 職業: フリーランス・プログラ
マー
使用言語
C++
C++/CLI
C#
わんくま同盟 東京勉強会 #78
- 3.
本日のアジェンダ
• MFCとは?
• なんでいまさらMFC
• MFCの利点/欠点
• とりあえずプロジェクトを作ってみる
• ダイアログベース
• まとめ
わんくま同盟 東京勉強会 #78
- 4.
- 5.
- 6.
- 7.
MFCの欠点
• MSDNに初心者向けチュートリアルがな
い
– MFC自体をある程度使える前提で
新し目の機能(リボンインターフェースなど)に
対応というようなチュートリアルはある
– 初心者向けに0から作るようなチュートリアル
がない。
– 各技術項目を読んで理解する必要がある。
わんくま同盟 東京勉強会 #78
- 8.
MFCの欠点
• リファレンスもない。
パブリック クラスメンバーおよびプロテクト ク
ラス
メンバーは、アプリケーション プログラムや派生
クラスでよく使われるものだけを取り上げていま
す。 全クラス メンバーの一覧は、クラスのヘッ
ダー ファイルを参照してください。
http://msdn.microsoft.com/ja-jp/library/d06h2x6e.aspx
ソース読め
わんくま同盟 東京勉強会 #78
- 9.
MFCの欠点(by wikipedia)
• CDocument,CView 等の基本的なクラスの
仕様が難解である。
• Windowsメッセージ、コマンド等の
Win32 APIの基本を理解していることが前
提。
• すべての構造体、クラスおよび列挙型など
がグローバル名前空間に存在している。
• マクロが多用されているため、識別子の衝
突、競合が発生しやすい。
わんくま同盟 東京勉強会 #78
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
デフォルトプロジェクト
• デザイナが開いていない
• .cppファイル 11個
• .hファイル 13個
• リソースファイル 27個
わんくま同盟 東京勉強会 #78
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
シンプルプロジェクト
• 相変わらずデザイナなし
• .cppファイル 5個
• .hファイル 7個
• リソースファイル 7個
わんくま同盟 東京勉強会 #78
- 34.
- 35.
- 36.
デザイナなし・まとめ
• ウィザードの最初の画面をいじるだけだと
最小限のものは作れない。
• 本当に最小限のプロジェクトを作ろうとす
ると
めんどくさそう
• そもそも最小限の状態から作り始めるもの
じゃないかもしれない。
• ウィザードで雛形を作ってそれを元にして
アプリケーションを作っていくべき?
わんくま同盟 東京勉強会 #78
- 37.
- 38.
- 39.
- 40.
- 41.
最初からボタンが2つ
クリックするとダイアログが
閉じアプリケーションが終了
します。
DialogResult的な物
わんくま同盟 東京勉強会 #78
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
とりあえずなんか作る
• ボタンをクリックするとテキストボックス
の中身がメッセージダイアログで表示され
る
• ダイアログボックスを閉じるとテキストコ
ントロールにそのテキストボックスの中身
を表示する。
• WinFormsであればコントロールに対応す
る変数を操作すればすぐ出来る簡単なアプ
リ
わんくま同盟 東京勉強会 #78
- 48.
- 49.
コントロールに対応した変数が作られていない。
// CDialog1Dlg ダイアログ
classCDialog1Dlg : public CDialogEx
{
// ~略~
public:
afx_msg void OnBnClickedOk();
afx_msg void OnBnClickedCancel();
virtual BOOL PreTranslateMessage(MSG* pMsg);
afx_msg void OnBnClickedButton1();
};
わんくま同盟 東京勉強会 #78
- 50.
- 51.
変数のカテゴリ
• Value
主に表示している文字列に対応した変
数
int,CString等
• Control
配置したコントロールに対応したクラ
ス
CStatic,CButton,CEdit等
わんくま同盟 東京勉強会 #78
- 52.
変数の追加結果
// CDialog1Dlg ダイアログ
classCDialog1Dlg : public CDialogEx
{
// ~略~
public:
afx_msg void OnBnClickedOk();
afx_msg void OnBnClickedCancel();
virtual BOOL PreTranslateMessage(MSG* pMsg);
afx_msg void OnBnClickedButton1();
CEdit TextBox1; //テキストボックスに対応したControll変数
CString LabelText; //ラベルの文字列に対応したValue変数
};
わんくま同盟 東京勉強会 #78
- 53.
DDX/DDV
• 変数を追加するとDoDataExchange()に
DDX/DDV系関数の呼び出しが追加される。
void CDialog1Dlg::DoDataExchange(CDataExchange*
pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EDIT1, TextBox1);
DDX_Text(pDX, IDC_RESULT, LabelText);
DDV_MaxChars(pDX, LabelText, 10);
}
わんくま同盟 東京勉強会 #78
- 54.
DDX/DDV
• DDX: DialogData eXchange
変数の内容を実際のコントロールに反
映、
コントロールの内容を変数に反映させ
る。
• DDV: Dialog data validation
データの妥当性検査
わんくま同盟 東京勉強会 #78
- 55.
- 56.
- 57.
- 58.
問題点
• 追加した変数すべてのDDX/DDVが
DoDataExchange()に含まれるので
ひとつの変数に関してだけ更新したいとき
でもすべての変数に対して更新されてしま
う。
• 変数が多くなると、更新したいわけではな
い変数に対する処理のせいで
動作が重くなる可能性がある。
わんくま同盟 東京勉強会 #78
- 59.
CWnd::GetDlgItem(int nID )
•CWnd::GetDlgItemを用いることで、
DoDataExChange()を使わずに、コント
ロールと関連付けられた変数へのポインタ
を取得できる。
void CDialog1Dlg::OnBnClickedButton1()
{
CEdit* pTextBox = (CEdit*)this->GetDlgItem(IDC_EDIT1);
CStatic* pLabel = (CStatic*)this->GetDlgItem(IDC_LABEL);
CString str;
pTextBox->GetWindowTextW(str);
AfxMessageBox(str,IDOK);
pLabel->SetWindowTextW(str);
}
わんくま同盟 東京勉強会 #78
- 60.
ダイアログベース・まとめ
• 基本的には設定ダイアログ等を作るためのも
の
• アプリ自体の作成に使うなら、必要に応じて
OnOK OnCancelが呼び出されないように修
正。
• 変数の追加、
DDX/DDV関数でコントロールを操作する。
• DoDataExChange()の肥大化が気になる場合
はGetDlgItem()でコントロール対応クラスへ
のポインタを取得 わんくま同盟 東京勉強会 #78
- 61.
最後に
• ありがた迷惑設計だけど慣れればどうにか
なりそう
• でも本格的に使うならフレームワーク的な
ものを作ったほうがいいかもしれない
• でもそれって自分でWinAPIを自分でラッ
プして使うのとあまり変わりないのでは?
わんくま同盟 東京勉強会 #78