Mfc-windows-fundamentals

提供:Dev Guides
移動先:案内検索

MFC-Windowsの基礎

この章では、Windowsの基本について説明します。 アプリケーションとも呼ばれるプログラムを作成するには、MFCのCWinAppからクラスを派生します。 CWinApp は、* Windowsアプリケーションの*クラスを表します。

新しいWin32プロジェクトを作成して、簡単な例を見てみましょう。

  • ステップ1 *-Visual Studioを開き、[ファイル]→[新規]→[プロジェクト]メニューオプションをクリックします。
  • ステップ2 *-[新しいプロジェクト]ダイアログボックスが表示されます。

Windowsアプリケーション

  • ステップ3 *-左ペインから、テンプレート→Visual C ++→Win32を選択します。
  • ステップ4 *-中央のペインで、Win32プロジェクトを選択します。
  • ステップ5 *-[名前]フィールドにプロジェクト名「MFCWindowDemo」を入力し、[OK]をクリックして続行します。 次のダイアログボックスが表示されます。

Win32プロジェクトの選択

  • ステップ6 *-[次へ]をクリックします。

Win32アプリケーション設定

  • ステップ7 *-上記のダイアログボックスに表示されるオプションを選択し、[完了]をクリックします。

MFCWindowsDemo

  • ステップ8 *-空のプロジェクトが作成されます。
  • ステップ9 *-MFCプロジェクトにするには、プロジェクトを右クリックして[プロパティ]を選択します。

MFCWindowDemoプロパティページ

  • ステップ10 *-左側のセクションで、[構成プロパティ]→[全般]をクリックします。
  • ステップ11 *-[プロジェクトのデフォルト]セクションで[共有DLLでMFCを使用]オプションを選択し、[OK]をクリックします。
  • ステップ12 *-新しいソースファイルを追加します。
  • ステップ13 *-プロジェクトを右クリックして、[追加]→[新しいアイテム…​]を選択します。
  • ステップ14 *-[テンプレート]セクションで、[C ++ファイル(.cpp)]をクリックします。

MFCWindowDemo新しいアイテムの追加

  • ステップ15 *-名前を例として設定し、[追加]をクリックします。

ウィンドウ作成

どのアプリケーションにも2つの主要なセクションがあります-

  • クラス
  • フレームまたはウィンドウ

私たちは次の手順を使用してウィンドウを作成しましょう-

  • ステップ1 *-アプリケーションを作成するには、MFCのCWinAppからクラスを派生させる必要があります。
#include
class CExample : public CWinApp {
   BOOL InitInstance() {
      return TRUE;
   }
};
  • ステップ2 *-アプリケーションのコンテンツを表示するフレーム/ウィンドウも必要です。

ステップ3 *-このために、別のクラスを追加し、MFCの *CFrameWnd クラスから派生させ、そのコンストラクターを実装し、Create()メソッドを呼び出して、次のコードに示すようにフレーム/ウィンドウを作成する必要があります。

class CMyFrame : public CFrameWnd {
   public:
      CMyFrame() {
         Create(NULL, _T("MFC Application Tutorial"));
      }
};
  • ステップ4 *-Create()メソッドには、NULLとして渡す必要があるクラスの名前と、タイトルバーに表示される文字列であるウィンドウの名前の2つのパラメーターが必要であることがわかります。 。

メインウィンドウ

ウィンドウを作成した後、アプリケーションで使用できるようにするには、ポインターを使用して、ウィンドウの作成に使用したクラスを表示できます。 この場合、ポインターはCFrameWndになります。 フレームウィンドウを使用するには、そのポインターをCWinThread
m_pMainWndメンバー変数に割り当てます。 これは、アプリケーションのInitInstance()実装で行われます。
  • ステップ1 *-CExampleクラスのInitInstance()の実装です。
class CExample : public CWinApp {
   BOOL InitInstance() {
      CMyFrame *Frame = new CMyFrame();  m_pMainWnd = Frame;

      Frame->ShowWindow(SW_NORMAL);
      Frame->UpdateWindow();

      return TRUE;
   }
};
  • ステップ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;
  • ステップ3 *-上記のアプリケーションを実行すると、次のウィンドウが作成されます。

作成されたウィンドウ

Windowsスタイル

Windowsスタイルは、ウィンドウの外観、境界線、最小化または最大化された状態、またはその他のサイズ変更状態などの機能を制御する特性です。

以下は、ウィンドウの作成中に使用できるスタイルのリストです。

Sr.No. Style & Description
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キーを使用してユーザーが移動できるコントロールの数を指定します。 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

垂直スクロールバーを持つウィンドウを作成します。

  • ステップ1 *-スタイリングを追加する簡単な例を見てみましょう。 ウィンドウを作成した後、ユーザーに表示するために、WS_VISIBLEスタイルをそのウィンドウに適用できます。さらに、WS_OVERLAPPEDスタイルも追加します。 ここに実装があります-
class CMyFrame : public CFrameWnd {
   public:
      CMyFrame() {
         Create(NULL, _T("MFC Application Tutorial"), WS_VISIBLE | WS_OVERLAPPED);
      }
};
  • ステップ2 *-このアプリケーションを実行すると、次のウィンドウが作成されます。

作成されたウィンドウ

これで、最小化、最大化、および閉じるオプションが表示されなくなったことがわかります。

Windowsロケーション

モニターに表示されているものを見つけるために、コンピューターはデカルト座標系に似た座標系を使用しますが、原点は画面の左上隅にあります。 この座標系を使用すると、水平軸と垂直軸の画面の左上隅からの距離によって任意のポイントを見つけることができます。

  • Win32ライブラリ*は、次のように定義された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);

Windowsサイズ

画面上のオブジェクトを見つけるためにポイントが使用されますが、各ウィンドウにはサイズがあります。 サイズは、オブジェクトに関連する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の寸法

ウィンドウが表示されると、画面上でモニターの境界線に関する位置によって識別できます。 ウィンドウは、幅と高さでも識別できます。 これらの特性は、* Create()*メソッドの_rect_引数によって指定または制御されます。 この引数は、Win32 RECT構造を介して作成できる長方形です。

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に依存します。 作成された最初のウィンドウまたは指定した別のウィンドウである可能性があります。 このようなウィンドウは、*親ウィンドウ*と呼ばれます。 他のすべてのウィンドウは、直接または間接的にそれに依存しています。

  • 作成しているウィンドウが別のウィンドウに依存している場合、そのウィンドウに親があることを指定できます。
  • これは、CFrameWnd :: Create()メソッドのpParentWnd引数を使用して行われます。
  • Windowに親がない場合、引数にNULL値を渡します。

私たちは1つだけのウィンドウがあり、利用可能な親ウィンドウがないので、次のコードに示すように、NULL値で引数を渡す例を見てみましょう-

class CMyFrame : public CFrameWnd {
   public:
      CMyFrame() {
         Create(NULL, _T("MFC Application Tutorial"), WS_SYSMENU,
            CRect(90, 120, 550, 480), NULL);
      }
};

上記のアプリケーションを実行すると、同じ出力が表示されます。

作成されたアプリケーションウィンドウ