MFCは、C ++形式で、WindowsのAPIをカプセル化
//練習
書き込みに必要なMFCヘッダファイルの#include <AFXWIN.H>
プログラムの実行フロー:
- アプリケーションオブジェクトの例(1つのみ)
- プログラムのエントリ関数を実行するのInitInstance
- フレームにMyFrameとクラスが(自動コール彼のコンストラクタ)動的に割り当てられたスペースオブジェクト、コンストラクタ内で、CWndの通過::ウィンドウを作成するために作成します。
- Classオブジェクト表示ウィンドウ枠のCWnd ::のShowWindow
- 更新ウィンドウのCWndへFrameworkクラスオブジェクト:: UpdateWindow
- クラスオブジェクトのポインタ枠のCWinThread :: m_pMainWnd保存
ファイル名:mfc.h
書式#include <AFXWIN.H> // MFCヘッダーファイル // アプリケーションのCWinAppクラス、派生クラス のクラスのMyApp:公共のCWinApp { パブリック: 仮想 BOOLのInitInstance(); // 基底クラスの仮想関数、派生クラスだけ書き換えプログラム・エントリ・アドレスMFC }。 // フレームワーククラスCFrameWndの、MyFrameとの派生クラス をMyFrameのクラス:公共CFrameWndの{ パブリック: MyFrameとの(); // コンストラクタ DECLARE_MESSAGE_MAP()// メッセージマップマクロ、クラス宣言文で使用されなければならない、すなわち.hファイル AFX_MSG 無効ザ・OnLButtonDown(UINT、CPoint)// マウスの文は、値 AFX_MSG 無効 OnChar(UINT、 UINT、UINT)// キーボードの文 AFX_MSG 無効のOnPaint()// 絵画 };
ファイル名:mfc.cpp
#include 「mfc.h 」// クラス宣言のヘッダに対応する MyAppのアプリ; // 唯一のグローバル・アプリケーション・クラス・オブジェクトが存在する BOOLがMyAppの::のInitInstance(){ // プログラム・エントリ・アドレス をMyFrameの*フレーム= 新しい新規 MyFrameとの; // 1.クラスオブジェクトフレーム作成 フレームを - >のShowWindow(SW_SHOWNORMALを); // 2表示ウィンドウ フレーム- > UpdateWindow(); // 3.更新ウィンドウ m_pMainWnd =フレーム; // 4.アプリケーションポイントのメインウィンドウセーブポインタ、自動管理 復帰 TRUE; // trueを返します正常に初期化 } // 境界マクロ BEGIN_MESSAGE_MAP(MyFrameと、CFrameWndの) ON_WM_LBUTTONDOWN()// マウスの左ボタンが押されたキー ON_WM_CHARは()// キーボードを押し END_MESSAGE_MAP() MyFrameと::をMyFrame(){ 作成(NULL、TEXT(" MFC ")); // ウィンドウを作成 } 空をMyFrame :: OnLButtonDwon(UNIT、CPointポイント)の{ // マウスダウン / * TCHAR bufの[1024]; // TCHARは、MFCの文字列であります wsprintf(BUF、TEXT( "X =%のD、Y =%のD")、point.x、point.y); //转译 メッセージボックス(BUF); //実際には根本的なメッセージボックス、MFC区別がメッセージボックスの方法であるがMSDNに見出すことができます * / // MFCのCString文字列 のCString STR。 str.Format(TEXT(" X =%dの,,, Y =%のD ")、point.x、point.y)。// 格式化 メッセージボックス(STR); } 空をMyFrameのOnChar ::(UNITキー、UNIT、UNIT){ // キーボードのキーを押し たCString strの。 str.format(TEXT(" 押されたキーに%c " )、キー)。 メッセージボックス(STR)。 } 空をMyFrame ::のOnPaint(){ // 絵画 CPaintDC DC(この); // このプロットデバイスが指定されている // 他のCDCは、グラフィックスの描画することができます見つけるために、ヘルプドキュメントを dc.TextOutW(100、100、TEXT(" 大群のために" )); dc.Ellipse(10、10、100、100); // 楕円を描き、矩形内接円の2つのロック }
ヘルプドキュメント:「中国のマニュアルのVC ++ MFCクラスライブラリ。」トップは、階層であり、下部には、メッセージマップマクロです。
:: CFrameWndの作成:作成し、検索を見つけるには
PS:右プロジェクト - >プロパティ - >一般 - > MFCを使用しています - >共有DLLでMFCを使用します
//論
- メッセージマッピングメカニズム
テーブル来るべきニュースやメンバー関数は、MFCは、ブリッジのイベントと信号の概念を持っていない、それぞれのメッセージをマッピング機能のみを相互
PS:メッセージマップマクロ一見、中国のマニュアルの一番下。
宣言マクロ:
DECLARE_MESSAGE_MAP()
境界マクロ:
BEGIN_MESSAGE_MAP(MyFrameと、CFrameWndの)
END_MESSAGE_MAP()
プログラムの実行フロー:
- Wang氏は声明の中で書いた.h
- 王は、境界.cppファイルに書きました
- 王は、境界マクロを見つけるために、メッセージを書きました
- .hの中に書かれた関数プロトタイプ宣言
- 達成するための機能が.cppファイルに書きました
- Windows文字セット
メッセージボックス(TEXT(「AAA」));
TEXT適応コード変換(すなわち、定義をカスタマイズすることができる幅のバイトおよびマルチバイト):
右プロジェクト - >プロパティ - >一般 - >文字セット - >マルチバイト文字セット/ Unicode文字セット
シモンズ:TCHARも適応コード変換を持っています
「AAA」のマルチバイト:文字の1つのバイトの対応
L「AAA」バイト幅:文字はバイトのUnicodeの複数に対応する:UTF-8 3番目、GBK 2番目。
バイトにマルチバイト幅:メッセージボックス(L「AAA」);
//文字列の長さの統計
int型 NUM = 0 ; char * p = " AAA " ; NUM = STRLEN(P)。 wchar_t型 * P2 = " BBBB " 。 A =たwcslen(P2)。
CStringの間// CHAR *変換
C ++文字列とMFCのCString直接変換されない、*チャーを介し.c_str()。
// CHAR * - > CStringの 文字 * P3 = " CCC " 。 CStringのSTR = CStringの(P3)。 // CString->のchar * CStringA TMP = STR。 CHAR * PP = tmp.GetBuffer()。