MFC-Windowsの基礎
この章では、Windowsの基礎について説明します。アプリケーションとも呼ばれるプログラムを作成するには、MFCのCWinAppからクラスを派生させます。CWinApp を意味する Class for a Windows Application.
新しいWin32プロジェクトを作成して、簡単な例を見てみましょう。
Step 1 − Visual Studioを開き、[ファイル]→[新規]→[プロジェクト]メニューオプションをクリックします。
Step 2 − [新しいプロジェクト]ダイアログボックスが表示されます。
Step 3 −左側のペインから、[テンプレート]→[Visual C ++]→[Win32]を選択します。
Step 4 −中央のペインで、[Win32プロジェクト]を選択します。
Step 5−「名前」フィールドにプロジェクト名「MFCWindowDemo」を入力し、「OK」をクリックして続行します。次のダイアログボックスが表示されます。
Step 6 − [次へ]をクリックします。
Step 7 −上記のダイアログボックスに表示されているオプションを選択し、[完了]をクリックします。
Step 8 −空のプロジェクトが作成されます。
Step 9 − MFCプロジェクトにするには、プロジェクトを右クリックして[プロパティ]を選択します。
Step 10 −左側のセクションで、[構成のプロパティ]→[一般]をクリックします。
Step 11 − [プロジェクトのデフォルト]セクションで[共有DLLでMFCを使用する]オプションを選択し、[OK]をクリックします。
Step 12 −新しいソースファイルを追加します。
Step 13 −プロジェクトを右クリックし、「追加」→「新規アイテム...」を選択します。
Step 14 − [テンプレート]セクションで、[C ++ファイル(.cpp)]をクリックします。
Step 15 −名前を例として設定し、[追加]をクリックします。
ウィンドウの作成
どのアプリケーションにも2つの主要なセクションがあります-
- Class
- フレームまたはウィンドウ
次の手順でウィンドウを作成しましょう-
Step 1 −アプリケーションを作成するには、MFCのCWinAppからクラスを派生させる必要があります。
#include
class CExample : public CWinApp {
BOOL InitInstance() {
return TRUE;
}
};
Step 2 −アプリケーションのコンテンツを表示するためのフレーム/ウィンドウも必要です。
Step 3 −このために、別のクラスを追加して、MFCから派生させる必要があります。 CFrameWnd クラスを作成してコンストラクターを実装し、Create()メソッドを呼び出します。これにより、次のコードに示すようにフレーム/ウィンドウが作成されます。
class CMyFrame : public CFrameWnd {
public:
CMyFrame() {
Create(NULL, _T("MFC Application Tutorial"));
}
};
Step 4 −ご覧のとおり、Create()メソッドには2つのパラメーターが必要です。1つはNULLとして渡されるクラスの名前、もう1つはタイトルバーに表示される文字列であるウィンドウの名前です。
メインウィンドウ
ウィンドウを作成した後、アプリケーションにそれを使用させるために、ポインターを使用して、ウィンドウの作成に使用されたクラスを表示できます。この場合、ポインターはCFrameWndになります。フレームウィンドウを使用するには、そのポインタをCWinThread :: m_pMainWndメンバー変数に割り当てます。これは、アプリケーションのInitInstance()実装で行われます。
Step 1 −これは、CExampleクラスでのInitInstance()の実装です。
class CExample : public CWinApp {
BOOL InitInstance() {
CMyFrame *Frame = new CMyFrame(); m_pMainWnd = Frame;
Frame->ShowWindow(SW_NORMAL);
Frame->UpdateWindow();
return TRUE;
}
};
Step 2 −以下は、Example.cppファイルの完全な実装です。
#include <afxwin.h>
class CMyFrame : public CFrameWnd {
public:
CMyFrame() {
Create(NULL, _T("MFC Application Tutorial"));
}
};
class CExample : public CWinApp {
BOOL InitInstance() {
CMyFrame *Frame = new CMyFrame();
m_pMainWnd = Frame;
Frame->ShowWindow(SW_NORMAL);
Frame->UpdateWindow();
return TRUE;
}
};
CExample theApp;
Step 3 −上記のアプリケーションを実行すると、次のウィンドウが作成されます。
Windowsスタイル
ウィンドウスタイルは、ウィンドウの外観、境界線、最小化または最大化された状態、またはその他のサイズ変更状態などの機能を制御する特性です。
シニア番号 | スタイルと説明 |
---|---|
1 | WS_BORDER 境界線のあるウィンドウを作成します。 |
2 | WS_CAPTION タイトルバーのあるウィンドウを作成します(WS_BORDERスタイルを意味します)。WS_DLGFRAMEスタイルでは使用できません。 |
3 | WS_CHILD 子ウィンドウを作成します。WS_POPUPスタイルでは使用できません。 |
4 | WS_CHILDWINDOW WS_CHILDスタイルと同じです。 |
5 | WS_CLIPCHILDREN 親ウィンドウ内で描画するときに子ウィンドウが占める領域を除外します。親ウィンドウを作成するときに使用されます。 |
6 | WS_CLIPSIBLINGS 子ウィンドウを相互に関連してクリップします。つまり、特定の子ウィンドウがペイントメッセージを受信すると、WS_CLIPSIBLINGSスタイルは、更新される子ウィンドウの領域から他のすべてのオーバーラップした子ウィンドウをクリップします。(WS_CLIPSIBLINGSが指定されておらず、子ウィンドウが重なっている場合、子ウィンドウのクライアント領域内に描画すると、隣接する子ウィンドウのクライアント領域内に描画できます。)WS_CHILDスタイルでのみ使用できます。 |
7 | WS_DISABLED 最初は無効になっているウィンドウを作成します。 |
8 | WS_DLGFRAME 二重枠でタイトルのないウィンドウを作成します。 |
9 | WS_GROUP ユーザーが矢印キーを使用してあるコントロールから次のコントロールに移動できる、コントロールのグループの最初のコントロールを指定します。最初のコントロールの後にWS_GROUPスタイルFALSEで定義されたすべてのコントロールは、同じグループに属します。WS_GROUPスタイルの次のコントロールは次のグループを開始します(つまり、1つのグループは次のグループが始まるところで終了します)。 |
10 | WS_HSCROLL 水平スクロールバーのあるウィンドウを作成します。 |
11 | WS_ICONIC 最初に最小化されるウィンドウを作成します。WS_MINIMIZEスタイルと同じです。 |
12 | WS_MAXIMIZE 最大サイズのウィンドウを作成します。 |
13 | WS_MAXIMIZEBOX [最大化]ボタンのあるウィンドウを作成します。 |
14 | WS_MINIMIZE 最初に最小化されるウィンドウを作成します。WS_OVERLAPPEDスタイルでのみ使用します。 |
15 | WS_MINIMIZEBOX [最小化]ボタンのあるウィンドウを作成します。 |
16 | WS_OVERLAPPED オーバーラップしたウィンドウを作成します。オーバーラップしたウィンドウには通常、キャプションと境界線があります。 |
17 | WS_OVERLAPPED WINDOW WS_OVERLAPPED、WS_CAPTION、WS_SYSMENU、WS_THICKFRAME、WS_MINIMIZEBOX、およびWS_MAXIMIZEBOXスタイルでオーバーラップウィンドウを作成します。 |
18 | WS_POPUP ポップアップウィンドウを作成します。WS_CHILDスタイルでは使用できません。 |
19 | WS_POPUPWINDOW WS_BORDER、WS_POPUP、およびWS_SYSMENUスタイルでポップアップウィンドウを作成します。コントロールメニューを表示するには、WS_CAPTIONスタイルをWS_POPUPWINDOWスタイルと組み合わせる必要があります。 |
20 | WS_SIZEBOX サイズの境界線があるウィンドウを作成します。WS_THICKFRAMEスタイルと同じです。 |
21 | WS_SYSMENU タイトルバーにコントロールメニューボックスがあるウィンドウを作成します。タイトルバーのあるウィンドウにのみ使用されます。 |
22 | WS_TABSTOP ユーザーがTabキーを使用して移動できる任意の数のコントロールの1つを指定します。TABキーを押すと、WS_TABSTOPスタイルで指定された次のコントロールにユーザーが移動します。 |
23 | WS_THICKFRAME ウィンドウのサイズ設定に使用できる太いフレームのウィンドウを作成します。 |
24 | WS_TILED オーバーラップしたウィンドウを作成します。重なったウィンドウには、タイトルバーと境界線があります。WS_OVERLAPPEDスタイルと同じです。 |
25 | WS_TILEDWINDOW WS_OVERLAPPED、WS_CAPTION、WS_SYSMENU、WS_THICKFRAME、WS_MINIMIZEBOX、およびWS_MAXIMIZEBOXスタイルでオーバーラップウィンドウを作成します。WS_OVERLAPPEDWINDOWスタイルと同じです。 |
26 | WS_VISIBLE 最初に表示されるウィンドウを作成します。 |
27 | WS_VSCROLL 垂直スクロールバーのあるウィンドウを作成します。 |
Step 1−スタイリングを追加する簡単な例を見てみましょう。ウィンドウを作成した後、それをユーザーに表示するために、WS_VISIBLEスタイルを適用できます。さらに、WS_OVERLAPPEDスタイルも追加します。これが実装です-
class CMyFrame : public CFrameWnd {
public:
CMyFrame() {
Create(NULL, _T("MFC Application Tutorial"), WS_VISIBLE | WS_OVERLAPPED);
}
};
Step 2 −このアプリケーションを実行すると、次のウィンドウが作成されます。
これで、最小化、最大化、および閉じるオプションが表示されなくなったことがわかります。
Windowsの場所
モニターに表示されているものを見つけるために、コンピューターはデカルト座標系と同様の座標系を使用しますが、原点は画面の左上隅にあります。この座標系を使用すると、水平軸と垂直軸の画面の左上隅からの距離によって任意の点を特定できます。
ザ・ Win32 library 次のように定義されたPOINTと呼ばれる構造を提供します-
typedef struct tagPOINT {
LONG x;
LONG y;
} POINT;
'x'メンバー変数は、画面の左側の境界からポイントまでの距離です。
'y'変数は、画面の上部境界からポイントまでの距離を表します。
Win32のPOINT構造に加えて、Microsoft Foundation Class(MFC)ライブラリはCPointクラスを提供します。
これは、POINT構造と同じ機能を提供します。C ++クラスとして、ポイントを見つけるために必要な機能を追加します。2つのコンストラクターを提供します。
CPoint();
CPoint(int X, int Y);
窓のサイズ
画面上のオブジェクトを見つけるためにポイントが使用されますが、各ウィンドウにはサイズがあります。サイズは、オブジェクトに関連する2つのメジャーを提供します。
- オブジェクトの幅。
- オブジェクトの高さ。
Win32ライブラリは、次のように定義されたSIZE構造を使用します-
typedef struct tagSIZE {
int cx;
int cy;
} SIZE;
Win32のSIZE構造に加えて、MFCはCSizeクラスを提供します。このクラスの機能はSIZEと同じですが、C ++クラスの機能が追加されています。これは、任意の方法でサイズ変数を作成できる5つのコンストラクターを提供します。
CSize();
CSize(int initCX, int initCY);
CSize(SIZE initSize);
CSize(POINT initPt);
CSize(DWORD dwSize);
Windowsの寸法
ウィンドウが表示されると、モニターの境界線に対する位置によって画面上で識別できます。ウィンドウは、その幅と高さによっても識別できます。これらの特性は、のrect引数によって指定または制御されます。Create()方法。この引数は、Win32RECT構造を介して作成できる長方形です。
typedef struct _RECT {
LONG left;
LONG top;
LONG right;
LONG bottom;
} RECT, *PRECT;
Win32のほかに RECT 構造体の場合、MFCは次のコンストラクターを持つCRectクラスを提供します-
CRect();
CRect(int l, int t, int r, int b);
CRect(const RECT& srcRect);
CRect(LPCRECT lpSrcRect);
CRect(POINT point, SIZE size);
CRect(POINT topLeft, POINT bottomRight);
ウィンドウの場所とサイズを指定する簡単な例を見てみましょう。
class CMyFrame : public CFrameWnd {
public:
CMyFrame() {
Create(NULL, _T("MFC Application Tutorial"), WS_SYSMENU, CRect(90, 120,
550, 480));
}
};
このアプリケーションを実行すると、最初の2つのパラメーターのCRectコンストラクターで指定されているように、画面の左上隅に次のウィンドウが作成されます。最後の2つのパラメーターは、ウィンドウのサイズです。
Windowsの親
現実の世界では、多くのアプリケーションが異なるWindowsで作られています。アプリケーションがさまざまなWindowsを使用する場合、ほとんどのオブジェクトは特定のWindowsに依存します。作成された最初のウィンドウ、または指定した別のウィンドウである可能性があります。このようなウィンドウは、Parent Window。他のすべてのウィンドウは、直接的または間接的にそれに依存しています。
作成しているウィンドウが別のウィンドウに依存している場合は、そのウィンドウに親があることを指定できます。
これは、CFrameWnd :: Create()メソッドのpParentWnd引数を使用して実行されます。
ウィンドウに親がない場合は、引数にNULL値を渡します。
ウィンドウが1つだけで、使用可能な親ウィンドウがない例を見てみましょう。次のコードに示すように、NULL値で引数を渡します。
class CMyFrame : public CFrameWnd {
public:
CMyFrame() {
Create(NULL, _T("MFC Application Tutorial"), WS_SYSMENU,
CRect(90, 120, 550, 480), NULL);
}
};
上記のアプリケーションを実行すると、同じ出力が表示されます。