Mfc-quick-guide
MFC-概要
Microsoft Foundation Class(MFC)ライブラリは、Microsoft Windowsオペレーティングシステム用のアプリケーションの作成を簡素化するための一連の関数、定数、データ型、およびクラスを提供します。 このチュートリアルでは、MFCを使用してWindowsベースのアプリケーションを起動および作成する方法についてすべて学習します。
前提条件
私たちはあなたが次のことを知っていると仮定しました-
- Windowsのプログラミングについて少し。
- C ++でのプログラミングの基本。
- オブジェクト指向プログラミングの基礎を理解します。
MFCとは何ですか?
Microsoft Foundation Class Library(MFC)は、Microsoft Windowsでプログラミングするための「アプリケーションフレームワーク」です。 MFCは、以下に必要なコードの多くを提供します-
- Windowsの管理。
- メニューとダイアログボックス。
- 基本的な入出力を実行します。
- データオブジェクトのコレクションなどの保存
アプリケーション固有のコードをMFCフレームワークに追加することにより、C ++アプリケーションのMFCフレームワークの基本機能を簡単に拡張またはオーバーライドできます。
MFCフレームワーク
- MFCフレームワークは、Windowsプログラミングを簡素化するために設計された再利用可能なクラスのセットを提供します。
- MFCは、日常のプログラミングで使用される文字列、ファイル、コレクションなど、多くの基本的なオブジェクトのクラスを提供します。
- また、ウィンドウ、コントロール、デバイスコンテキストなどの一般的なWindows APIおよびデータ構造のクラスも提供します。
- このフレームワークは、ActiveXやドキュメントビュー処理などのより高度な機能のための強固な基盤も提供します。
- さらに、MFCは、アプリケーションアーキテクチャ階層を構成するクラスを含むアプリケーションフレームワークを提供します。
なぜMFCなのか?
MFCフレームワークは、Windowsのエキスパートプログラマーの作業を基盤とする強力なアプローチです。 MFCフレームワークには次の利点があります。
- 開発時間を短縮します。
- コードの移植性が向上します。
- また、プログラミングの自由度と柔軟性を低下させることなく、途方もないサポートを提供します。
- 「プログラムするのが難しい」ユーザーインターフェイス要素とテクノロジに簡単にアクセスできます。
- MFCは、データアクセスオブジェクト(DAO)とOpen Database Connectivity(ODBC)によるデータベースプログラミング、およびWindowsソケットによるネットワークプログラミングを簡素化します。
MFC-環境設定
Microsoft Visual C は、Microsoft Windowsオペレーティングシステム用のアプリケーションを作成するために使用されるプログラミング環境です。 C アプリケーションでMFCフレームワークを使用するには、Microsoft Visual C またはMicrosoft Visual Studioをインストールしておく必要があります。 Microsoft Visual Studioには、Microsoft Visual C 環境も含まれています。
Microsoftは、SQL Serverを含むVisual Studioの無料版を提供しており、https://www.visualstudio.com/en-us/downloads/download-visual-studio-vs.aspx [[[1]] studio-vs.aspx]。
インストール手順は次のとおりです。
- ステップ1 *-Visual Studioがダウンロードされたら、インストーラーを実行します。 次のダイアログボックスが表示されます。
- ステップ2 *-[インストール]をクリックして、インストールプロセスを開始します。
- ステップ3 *-Visual Studioが正常にインストールされると、次のダイアログボックスが表示されます。
- ステップ4 *-このダイアログボックスを閉じ、必要に応じてコンピューターを再起動します。
- ステップ5 *-[スタート]メニューからVisual Studioを開きます。次のダイアログボックスが開きます。 初めて起動する場合、準備に時間がかかります。
- ステップ6 *-次に、Visual Studioのメインウィンドウが表示されます。
- ステップ7 *-これで、アプリケーションを開始する準備ができました。
MFC-VC ++プロジェクト
この章では、さまざまなタイプのVC プロジェクトについて説明します。 Visual Studioには、いくつかの種類のVisual C プロジェクトテンプレートが含まれています。 これらのテンプレートは、基本的なプログラム構造、メニュー、ツールバー、アイコン、参照を作成し、作成するプロジェクトの種類に適したステートメントを含めるのに役立ちます。 次に、テンプレートの主要な機能の一部を示します。
- これらのプロジェクトテンプレートの多くにウィザードが用意されており、作成時にプロジェクトをカスタマイズできます。
- プロジェクトが作成されたら、アプリケーションをビルドして実行できます。
- プロジェクトを作成するためにテンプレートを使用する必要はありませんが、ほとんどの場合、プロジェクトテンプレートを使用する方が効率的です。 *提供されたプロジェクトファイルと構造は、最初から作成するよりも変更する方が簡単です。
MFCでは、次のプロジェクトテンプレートを使用できます。
Sr.No. | Project Template & Description |
---|---|
1 |
MFCアプリケーションは、Microsoft Foundation Class(MFC)ライブラリに基づいたWindows用の実行可能アプリケーションです。 MFCアプリケーションを作成する最も簡単な方法は、MFCアプリケーションウィザードを使用することです。 |
2 |
MFC ActiveX Control ActiveXコントロールプログラムは、特定の種類の機能を親アプリケーションに提供するように設計されたモジュラープログラムです。 たとえば、ダイアログ、ツールバー、またはWebページで使用するボタンなどのコントロールを作成できます。 |
3 |
MFC DLL MFC DLLは、複数のアプリケーションで同時に使用できる関数の共有ライブラリとして機能するバイナリファイルです。 MFC DLLプロジェクトを作成する最も簡単な方法は、MFC DLLウィザードを使用することです。 |
以下は、MFCアプリケーションの作成にも使用できる一般的なテンプレートです-
Sr.No. | Project Template & Description |
---|---|
1 |
Empty Project プロジェクトは、アプリケーションの構築に必要なすべての論理的なコンテナです。 その後、必要に応じて、ソリューションに新規または既存のプロジェクトを追加できます。 |
2 |
Custom Wizard Visual C ++カスタムウィザードは、新しいカスタムウィザードを作成する必要があるときに使用するツールです。 カスタムウィザードを作成する最も簡単な方法は、カスタムウィザードを使用することです。 |
MFC-はじめに
この章では、機能するMFCの例を見ていきます。 MFCアプリケーションを作成するには、ウィザードを使用してプロジェクトをカスタマイズできます。 アプリケーションを最初から作成することもできます。
プロジェクトテンプレートを使用してプロジェクトを作成する
Visual Studioで利用可能なプロジェクトテンプレートを使用してプロジェクトを作成する手順は次のとおりです。
- ステップ1 *-Visual Studioを開き、[ファイル]→[新規]→[プロジェクト]メニューオプションをクリックします。
- ステップ2 *-[新しいプロジェクト]ダイアログボックスが開いていることがわかります。
- ステップ3 *-左ペインから、テンプレート→Visual C ++→MFCを選択します
- ステップ4 *-中央のペインで、MFCアプリケーションを選択します。
- ステップ5 *-[名前]フィールドにプロジェクト名「MFCDemo」を入力し、[OK]をクリックして続行します。 次のダイアログが表示されます。
- ステップ6 *-[次へ]をクリックします。
- ステップ7 *-上記のダイアログボックスに表示されるオプションを選択し、[次へ]をクリックします。
- ステップ8 *-すべてのオプションをオフにして、[完了]ボタンをクリックします。
これで、MFCウィザードがデフォルトでこのダイアログボックスとプロジェクトファイルを作成することがわかります。
- ステップ9 *-このアプリケーションを実行すると、次の出力が表示されます。
最初からプロジェクトを作成する
MFCアプリケーションを最初から作成することもできます。 MFCアプリケーションを作成するには、次の手順に従う必要があります。
- ステップ1 *-Visual Studioを開き、[ファイル]→[新規]→[プロジェクト]メニューオプションをクリックします。
- ステップ2 *-[新しいプロジェクト]ダイアログボックスが表示されます。
- ステップ3 *-左ペインから、テンプレート→Visual C ++→一般を選択します。
- ステップ4 *-中央のペインで、空を選択します
- ステップ5 *-[名前]フィールドにプロジェクト名「MFCDemoFromScratch」を入力し、[OK]をクリックして続行します。 空のプロジェクトが作成されていることがわかります。
- ステップ6 *-MFCプロジェクトにするには、プロジェクトを右クリックして[プロパティ]を選択します。
- ステップ7 *-左側のセクションで、[構成プロパティ]→[全般]をクリックします。
- ステップ8 *-[プロジェクトのデフォルト]セクションで[共有DLLでMFCを使用]オプションを選択し、[OK]をクリックします。
- ステップ9 *-現在は空のプロジェクトです。 C ++ファイルを追加する必要があります。 そのため、プロジェクトを右クリックして、[追加]→[新しいアイテム…]を選択します
ステップ10 *-中央のペインで[ C ++ File(.cpp)*]を選択し、[名前]フィールドにファイル名を入力して、[追加]ボタンをクリックします。
ステップ11 *-[ソースファイル]フォルダの下に *main.cpp ファイルが追加されました。
- ステップ12 *-このファイルに次のコードを追加しましょう。
- ステップ13 *-このアプリケーションを実行すると、コンソールに次の出力が表示されます。
MFC-Windowsの基礎
この章では、Windowsの基本について説明します。 アプリケーションとも呼ばれるプログラムを作成するには、MFCのCWinAppからクラスを派生します。 CWinApp は、* Windowsアプリケーションの*クラスを表します。
新しいWin32プロジェクトを作成して、簡単な例を見てみましょう。
- ステップ1 *-Visual Studioを開き、[ファイル]→[新規]→[プロジェクト]メニューオプションをクリックします。
- ステップ2 *-[新しいプロジェクト]ダイアログボックスが表示されます。
- ステップ3 *-左ペインから、テンプレート→Visual C ++→Win32を選択します。
- ステップ4 *-中央のペインで、Win32プロジェクトを選択します。
- ステップ5 *-[名前]フィールドにプロジェクト名「MFCWindowDemo」を入力し、[OK]をクリックして続行します。 次のダイアログボックスが表示されます。
- ステップ6 *-[次へ]をクリックします。
- ステップ7 *-上記のダイアログボックスに表示されるオプションを選択し、[完了]をクリックします。
- ステップ8 *-空のプロジェクトが作成されます。
- ステップ9 *-MFCプロジェクトにするには、プロジェクトを右クリックして[プロパティ]を選択します。
- ステップ10 *-左側のセクションで、[構成プロパティ]→[全般]をクリックします。
- ステップ11 *-[プロジェクトのデフォルト]セクションで[共有DLLでMFCを使用]オプションを選択し、[OK]をクリックします。
- ステップ12 *-新しいソースファイルを追加します。
- ステップ13 *-プロジェクトを右クリックして、[追加]→[新しいアイテム…]を選択します。
- ステップ14 *-[テンプレート]セクションで、[C ++ファイル(.cpp)]をクリックします。
- ステップ15 *-名前を例として設定し、[追加]をクリックします。
ウィンドウ作成
どのアプリケーションにも2つの主要なセクションがあります-
- クラス
- フレームまたはウィンドウ
私たちは次の手順を使用してウィンドウを作成しましょう-
- ステップ1 *-アプリケーションを作成するには、MFCのCWinAppからクラスを派生させる必要があります。
- ステップ2 *-アプリケーションのコンテンツを表示するフレーム/ウィンドウも必要です。
ステップ3 *-このために、別のクラスを追加し、MFCの *CFrameWnd クラスから派生させ、そのコンストラクターを実装し、Create()メソッドを呼び出して、次のコードに示すようにフレーム/ウィンドウを作成する必要があります。
- ステップ4 *-Create()メソッドには、NULLとして渡す必要があるクラスの名前と、タイトルバーに表示される文字列であるウィンドウの名前の2つのパラメーターが必要であることがわかります。 。
メインウィンドウ
- ウィンドウを作成した後、アプリケーションで使用できるようにするには、ポインターを使用して、ウィンドウの作成に使用したクラスを表示できます。 この場合、ポインターはCFrameWndになります。 フレームウィンドウを使用するには、そのポインターをCWinThread
- m_pMainWndメンバー変数に割り当てます。 これは、アプリケーションのInitInstance()実装で行われます。
- ステップ1 *-CExampleクラスのInitInstance()の実装です。
- ステップ2 *-以下は、Example.cppファイルの完全な実装です。
- ステップ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スタイルも追加します。 ここに実装があります-
- ステップ2 *-このアプリケーションを実行すると、次のウィンドウが作成されます。
これで、最小化、最大化、および閉じるオプションが表示されなくなったことがわかります。
Windowsロケーション
モニターに表示されているものを見つけるために、コンピューターはデカルト座標系に似た座標系を使用しますが、原点は画面の左上隅にあります。 この座標系を使用すると、水平軸と垂直軸の画面の左上隅からの距離によって任意のポイントを見つけることができます。
- Win32ライブラリ*は、次のように定義されたPOINTと呼ばれる構造を提供します-
- 「x」メンバー変数は、画面の左端からポイントまでの距離です。
- 「y」変数は、画面の上端からポイントまでの距離を表します。
- Win32のPOINT構造に加えて、Microsoft Foundation Class(MFC)ライブラリはCPointクラスを提供します。
- これにより、POINT構造体と同じ機能が提供されます。 C ++クラスとして、ポイントを見つけるために必要な機能を追加します。 2つのコンストラクターを提供します。
Windowsサイズ
画面上のオブジェクトを見つけるためにポイントが使用されますが、各ウィンドウにはサイズがあります。 サイズは、オブジェクトに関連する2つの指標を提供します。
- オブジェクトの幅。
- オブジェクトの高さ。
Win32ライブラリは、次のように定義されたSIZE構造を使用します-
Win32のSIZE構造に加えて、MFCはCSizeクラスを提供します。 このクラスにはSIZEと同じ機能がありますが、C ++クラスの機能が追加されています。 任意の方法でサイズ変数を作成できる5つのコンストラクターを提供します。
Windowsの寸法
ウィンドウが表示されると、画面上でモニターの境界線に関する位置によって識別できます。 ウィンドウは、幅と高さでも識別できます。 これらの特性は、* Create()*メソッドの_rect_引数によって指定または制御されます。 この引数は、Win32 RECT構造を介して作成できる長方形です。
Win32の RECT 構造に加えて、MFCは次のコンストラクタを持つCRectクラスを提供します-
ウィンドウの位置とサイズを指定する簡単な例を見てみましょう
このアプリケーションを実行すると、最初の2つのパラメーターのCRectコンストラクターで指定されているように、画面の左上隅に次のウィンドウが作成されます。 最後の2つのパラメーターは、ウィンドウのサイズです。
Windows親
現実の世界では、多くのアプリケーションは異なるWindowsで構成されています。 アプリケーションがさまざまなWindowsを使用する場合、ほとんどのオブジェクトは特定のWindowsに依存します。 作成された最初のウィンドウまたは指定した別のウィンドウである可能性があります。 このようなウィンドウは、*親ウィンドウ*と呼ばれます。 他のすべてのウィンドウは、直接または間接的にそれに依存しています。
- 作成しているウィンドウが別のウィンドウに依存している場合、そのウィンドウに親があることを指定できます。
- これは、CFrameWnd :: Create()メソッドのpParentWnd引数を使用して行われます。
- Windowに親がない場合、引数にNULL値を渡します。
私たちは1つだけのウィンドウがあり、利用可能な親ウィンドウがないので、次のコードに示すように、NULL値で引数を渡す例を見てみましょう-
上記のアプリケーションを実行すると、同じ出力が表示されます。
MFC-ダイアログボックス
この章では、ダイアログボックスについて説明します。 Windows用アプリケーションは、ダイアログボックスを介してユーザーと頻繁に通信します。 * CDialogクラス*は、ダイアログボックスを管理するためのインターフェイスを提供します。 Visual C ++ダイアログエディターを使用すると、ダイアログボックスを簡単に設計し、ダイアログテンプレートリソースを作成できます。
- ダイアログオブジェクトの作成は2段階の操作です-
- ダイアログオブジェクトを構築します。
- ダイアログウィンドウを作成します。
新しいWin32プロジェクトを作成して、簡単な例を見てみましょう。
- ステップ1 *-Visual Studioを開き、[ファイル]→[新規]→[プロジェクト]メニューオプションをクリックします。
- ステップ2 *-[新しいプロジェクト]ダイアログボックスが表示されます。
- ステップ3 *-左ペインから、テンプレート→Visual C ++→Win32を選択します。
- ステップ4 *-中央のペインで、Win32プロジェクトを選択します。
- ステップ5 *-[名前]フィールドにプロジェクト名「MFCDialogDemo」を入力し、[OK]をクリックして続行します。 次のダイアログが表示されます。
- ステップ6 *-[次へ]をクリックします。
- ステップ7 *-上記のダイアログボックスに表示されるオプションを選択し、[完了]をクリックします。
- ステップ8 *-空のプロジェクトが作成されます。
- ステップ9 *-MFCプロジェクトにするには、プロジェクトを右クリックして[プロパティ]を選択します。
- ステップ10 *-左側のセクションで、[構成プロパティ]→[全般]をクリックします。
- ステップ11 *-[プロジェクトのデフォルト]セクションで[共有DLLでMFCを使用]オプションを選択し、[OK]をクリックします。
- ステップ12 *-新しいソースファイルを追加します。
- ステップ13 *-プロジェクトを右クリックして、[追加]→[新しいアイテム]を選択します。
- ステップ14 *-[テンプレート]セクションで、[C ++ファイル(.cpp)]をクリックします
- ステップ15 *-名前を例として設定し、[追加]をクリックします。
- ステップ16 *-アプリケーションを作成するには、クラスを追加し、MFCのCWinAppから派生させる必要があります。
ダイアログボックスの作成
- ステップ1 *-ダイアログボックスを作成するには、ソリューションエクスプローラーで[リソースファイル]フォルダーを右クリックし、[追加]→[リソース]を選択します。
- ステップ2 *-[リソースの追加]ダイアログボックスで、[ダイアログ]を選択し、[新規]をクリックします。
- ステップ3 *-ダイアログボックスでは、実際にプログラムで作成する前に準備が必要です。
- ステップ4 *-ダイアログボックスは、最初にテキストファイル(リソースファイル)として手動で作成できます。
- ステップ5 *-リソースファイルの下に作成されたMFCDialogDemo.rcファイルを確認できます。
- ステップ6 *-リソースファイルはデザイナーで開いています。 同じファイルをテキストファイルとして開くことができます。 リソースファイルを右クリックして、[アプリケーションから開く]を選択します。
- ステップ7 *-ソースコード(テキスト)エディターを選択し、[追加]ボタンをクリックします。
- ステップ8 *-デザイナーに戻り、ダイアログを右クリックして[プロパティ]を選択します。
- ステップ9 *-多くのオプションから選択する必要があります。
- ステップ10 *-他のほとんどのコントロールと同様に、ダイアログボックスを識別する必要があります。 通常、ダイアログボックスの識別子(ID)はIDD_で始まります。IDをIDD_EXAMPLE_DLGに変更します。
ダイアログの場所
ダイアログボックスは、アプリケーション上に「物理的に」配置する必要があります。 通常、ダイアログボックスは他のコントロールの親として作成されるため、その場所は親ウィンドウまたはデスクトップとの関係に依存します。
プロパティウィンドウを見ると、X PosとY Posの2つのフィールドがあります。
- Xは、モニターの左境界からダイアログボックスの左境界までの距離です。
- Yは、モニターの上部境界からダイアログボックスの上部境界までの距離です。
デフォルトでは、これらのフィールドはゼロに設定されています。 上記のように変更することもできます。
これらの2つの寸法を0に指定すると、ダイアログボックスの左と上の境界が設定され、オブジェクトが画面の中央中央に表示されます。
ダイアログボックスの寸法
ダイアログボックスの寸法は、その幅と高さを指します。 デザイナーウィンドウのマウスを使用して、幅と高さのサイズを変更できます。
ステータスバーで幅と高さの変化を確認できます。
ダイアログボックスのメソッド
画面にダイアログボックスを表示するために使用される基本クラスは、CDialogクラスです。 ダイアログボックスを作成するには、CDialogからクラスを派生する必要があります。 CDialogクラス自体は、次の3つのコンストラクタを提供します-
別のクラスCExampleDlgを作成し、CDialogから派生させます。 次のコードに示すように、デフォルトのコンストラクタデストラクタを実装します。
- 次のコードに示すように、CExample
- InitInstance()メソッドでこのダイアログをインスタンス化する必要があります。
モーダルダイアログボックス
ダイアログボックスには、 modeless と modal の2種類があります。 モーダルおよびモードレスダイアログボックスは、作成および表示に使用されるプロセスによって異なります。
モードレスダイアログボックス
- モードレスダイアログボックスの場合、ダイアログクラスで独自のパブリックコンストラクターを提供する必要があります。
- モードレスダイアログボックスを作成するには、パブリックコンストラクターを呼び出してから、ダイアログオブジェクトのCreateメンバー関数を呼び出してダイアログリソースを読み込みます。
- コンストラクターの呼び出し中または呼び出し後にCreateを呼び出すことができます。 ダイアログリソースにプロパティWS_VISIBLEがある場合、ダイアログボックスがすぐに表示されます。
- そうでない場合は、ShowWindowメンバー関数を呼び出す必要があります。
モーダルダイアログ
- モーダルダイアログボックスを作成するには、CDialogで宣言されている2つのパブリックコンストラクターのいずれかを呼び出します。
- 次に、ダイアログオブジェクトの DoModal メンバー関数を呼び出して、ダイアログボックスを表示し、ユーザーが[OK]または[キャンセル]を選択するまでダイアログボックスとの対話を管理します。
- DoModalによるこの管理は、ダイアログボックスをモーダルにするものです。 モーダルダイアログボックスの場合、DoModalはダイアログリソースを読み込みます。
- *ステップ1 *-ダイアログボックスをモーダルとして表示するには、CExample
- InitInstance()イベントで、ダイアログ変数を使用してDoModal()メソッドを呼び出します-
- ステップ2 *-これはExample.cppファイルの完全な実装です。
- ステップ3 *-上記のコードをコンパイルして実行すると、次のダイアログボックスが表示されます。
ダイアログベースのアプリケーション
Microsoft Visual Studioは、主にダイアログボックスに基づくアプリケーションを作成する簡単な方法を提供します。 Visual Studioで利用可能なプロジェクトテンプレートを使用して、ダイアログベースのプロジェクトを作成する手順を次に示します-
- ステップ1 *-Visual Studioを開き、[ファイル]→[新規]→[プロジェクト]メニューオプションをクリックします。 [新しいプロジェクト]ダイアログボックスが表示されます。
- ステップ2 *-左ペインから、テンプレート→Visual C ++→MFCを選択します。
- ステップ3 *-中央のペインで、MFCアプリケーションを選択します。
- ステップ4 *-[名前]フィールドにプロジェクト名「MFCModalDemo」を入力し、[OK]をクリックして続行します。 次のダイアログボックスが表示されます。
- ステップ5 *-[次へ]をクリックします。
- ステップ6 *-上記のダイアログボックスに表示されるオプションを選択し、[次へ]をクリックします。
- ステップ7 *-ボックスの最大化や最小化など、ダイアログボックスで選択するオプションをすべてチェックし、[次へ]をクリックします。
- ステップ8 *-[次へ]をクリックします。
- ステップ9 *-これらの2つのクラスを生成します。 クラスの名前を変更して、[完了]をクリックできます。
- ステップ10 *-MFCウィザードがデフォルトでこのダイアログボックスとプロジェクトファイルを作成することがわかります。
- ステップ11 *-このアプリケーションを実行すると、次の出力が表示されます。
MFC-Windowsリソース
- リソース*は、コンパイラが画像、音声、マウスカーソル、ダイアログボックスなどのオブジェクトを管理できるようにするテキストファイルです。 Microsoft Visual Studioは、プログラミングに使用されるのと同じ環境で必要なツールを提供することにより、リソースファイルの作成を特に簡単にします。 つまり、通常、外部アプリケーションを使用してリソースファイルを作成または構成する必要はありません。 以下は、リソースに関連するいくつかの重要な機能です。
- リソースは、ユーザーに情報を提供するインターフェース要素です。
- ビットマップ、アイコン、ツールバー、およびカーソルはすべてリソースです。
- 一部のリソースは、メニューからの選択やダイアログボックスへのデータ入力などのアクションを実行するために操作できます。
- アプリケーションは、互いに独立して動作するさまざまなリソースを使用できます。これらのリソースは、*。rc拡張子を持つテキストファイルにグループ化されます。
- ほとんどのリソースは、[リソースの追加]ダイアログボックスから目的のリソースを選択して作成されます。
- [リソースの追加]ダイアログボックスには、要件に従って使用できるリソースの広範なリストが表示されますが、使用できないものが必要な場合は、プログラムを実行する前に* .rcファイルに手動で追加できます。
識別子
- 識別子*は、名前が通常IDで始まる定数整数であるシンボルです。 整数値(シンボル値)にマッピングされたテキスト文字列(シンボル名)の2つの部分で構成されます。
- シンボルは、ソースコード内およびリソースエディタで作業している間、リソースとユーザーインターフェイスオブジェクトを説明する記述的な方法を提供します。
- 新しいリソースまたはリソースオブジェクトを作成すると、*リソースエディター*は、IDC_DIALOG1などのリソースのデフォルト名を提供し、それに値を割り当てます。
- 名前と値の定義は、Resource.hファイルに保存されます。
ステップ1 *-ダイアログボックスを作成し、そのIDが *IDD_EXAMPLE_DLG である最後の章の CMFCDialogDemo の例を見てみましょう。
- ステップ2 *-ソリューションエクスプローラーに移動すると、ヘッダーファイルの下にresource.hファイルが表示されます。 エディタでこのファイルを開くことで続行すると、ダイアログボックスの識別子とその整数値も表示されます。
アイコン
- アイコン*は、アプリケーションを表すウィンドウで使用される小さな画像です。 2つの主なシナリオで使用されます。
- ウィンドウのフレームでは、タイトルバーのウィンドウ名の左側に表示されます。
- Windowsエクスプローラー、デスクトップ、マイコンピューター、またはコントロールパネルウィンドウ。
MFCModalDemoの例を見ると、次のスナップショットに示すように、Visual Studioがタイトルバーにデフォルトアイコンを使用していることがわかります。
以下の手順に従って、独自のアイコンを作成できます-
- ステップ1 *-プロジェクトを右クリックして[追加]→[リソース]を選択すると、[リソースの追加]ダイアログボックスが表示されます。
- ステップ2 *-アイコンを選択して[新規]ボタンをクリックすると、次のアイコンが表示されます。
- ステップ3 *-ソリューションエクスプローラーで、リソースビューに移動し、MFCModalDemo>アイコンを展開します。 2つのアイコンが表示されます。 IDR_MAINFRAMEはデフォルトのもので、IDI_ICON1は新しく作成されたアイコンです。
- ステップ4 *-新しく作成されたアイコンを右クリックし、[プロパティ]を選択します。
- ステップ5 *-IDI_ICON1はこのアイコンのIDです。このIDをIDR_MYICONに変更しましょう。
- ステップ6 *-必要に応じて、デザイナーでこのアイコンを変更できます。 同じアイコンを使用します。
- ステップ7 *-このアイコンを保存します。
- ステップ8 *-次のコードのように見えるCMFCModalDemoDlg.cppファイルのCMFCModalDemoDlgコンストラクターに移動します。
- ステップ9 *-デフォルトのアイコンがコンストラクターにロードされていることがわかります。 次のコードに示すように、IDR_ MYICONに変更します。
- ステップ10 *-上記のコードをコンパイルして実行すると、ダイアログボックスに新しいアイコンが表示されます。
メニュー
- メニュー*を使用すると、論理的で見つけやすい方法でコマンドを配置できます。 メニューエディターを使用すると、完成したアプリケーションのメニューバーによく似たメニューバーを直接操作して、メニューを作成および編集できます。 メニューを作成するには、以下の手順に従ってください-
- ステップ1 *-プロジェクトを右クリックして、[追加]→[リソース]を選択します。 [リソースの追加]ダイアログボックスが表示されます。
- ステップ2 *-メニューを選択し、[新規]をクリックします。 メニューバーに「ここに入力」を含む四角形が表示されます。
- ステップ3 *-ファイル、編集などのメニューオプションを記述します。 次のスナップショットに示すように。
- ステップ4 *-リソースビューでメニューフォルダーを展開すると、メニューID IDR_MENU1が表示されます。 この識別子を右クリックして、IDM_MAINMENUに変更します。
- ステップ5 *-すべての変更を保存します。
- ステップ6 *-このメニューをダイアログボックスに添付する必要があります。 ソリューションエクスプローラーでDialogフォルダーを展開し、ダイアログボックス識別子をダブルクリックします。
- ステップ7 *-[プロパティ]にメニューフィールドが表示されます。 上記のように、ドロップダウンからメニュー識別子を選択します。
- ステップ8 *-このアプリケーションを実行すると、メニューオプションを含む次のダイアログボックスが表示されます。
ツールバー
- ツールバー*は、ユーザーがメニューを使用する代わりにボタンをクリックすることでフォーム上でいくつかのアクションを実行できるようにするWindowsコントロールです。
- ツールバーは、最もアクセスしやすいアクションをボタンとして提供することにより、ユーザーの仕事を簡素化する便利なボタンのグループを提供します。
- ツールバーは、このような一般的なアクションをユーザーに近づけることができます。
- 通常、ツールバーはメインメニューの下に表示されます。
- ボタンを装備することもできますが、ボタンまたはボタンの一部にキャプションが付いている場合があります。
- ツールバーには、他のタイプのコントロールを装備することもできます。
ツールバーを作成するには、次の手順を実行します。
- ステップ1 *-プロジェクトを右クリックして、[追加]→[リソース]を選択します。 [リソースの追加]ダイアログボックスが表示されます。
- ステップ2 *-ツールバーを選択し、[新規]をクリックします。 次の画面が表示されます。
- ステップ3 *-次のスクリーンショットに示すように、デザイナーでツールバーを設計し、IDも指定します。
- ステップ4 *-CMFCModalDemoDlgクラスにこれらの2つの変数を追加します。
- ステップ5 *-CMFCModalDemoDlg.hファイルのCMFCModalDemoDlgの完全な実装を次に示します-
- *ステップ6 *-次のコードに示すようにCMFCModalDemoDlg
- OnInitDialog()を更新します。
- ステップ7 *-このアプリケーションを実行します。 ツールバーを含む次のダイアログボックスが表示されます。
加速器
- アクセスキー*は、マウスの代わりにキーボードを使用することにより、ユーザーがメニューアクションをより速く実行できるようにする文字です。 これは通常、ユーザーがマウスをどこにでも配置する必要がないため高速であり、アクションの実行にかかる時間を短縮します。
- ステップ1 *-アクセスキーを作成するには、メニュー項目の左側にアンパサンド「&」を入力します。
- ステップ2 *-すべてのメニューオプションに対してこのステップを繰り返します。 このアプリケーションを実行し、Altキーを押します。 すべてのメニューオプションの最初の文字に下線が付いていることがわかります。
ショートカットキー
ショートカットキーは、上級ユーザーがメニュー項目に対して実行するアクションを実行するために使用するキーまたはキーの組み合わせです。 ほとんどのショートカットは、Ctrlキーと文字キーを同時に押すことの組み合わせです。 たとえば、Ctrl + N、Ctrl + O、またはCtrl +D。
ショートカットを作成するには、メニューキャプションを構成する文字列の右側で、メニュー項目を右クリックしてプロパティを選択します。
[キャプション]フィールドに\ tを入力し、次に[新規]メニューオプションのように目的の組み合わせを入力します。 すべてのメニューオプションに対してこの手順を繰り返します。
アクセラレータテーブル
アクセラレータテーブルは、テーブルの各アイテムが識別子、ショートカットキー、およびアクセラレータキーの種類を指定する定数を組み合わせたアイテムのリストです。 他のリソースと同様に、アクセラレータテーブルは.rcファイルに手動で作成できます。 アクセラレータテーブルを作成する手順は次のとおりです。
ステップ1 *-アクセラレータテーブルを作成するには、ソリューションエクスプローラーで .rcファイルを右クリックします。
- ステップ2 *-アクセラレータを選択して、[新規]をクリックします。
- ステップ3 *-IDコンボボックスの矢印をクリックし、メニュー項目を選択します。
- ステップ4 *-修飾子ドロップダウンからCtrlを選択します。
- ステップ5 *-[キー]ボックスをクリックし、両方のメニューオプションに対応するキーを入力します。
また、新しいメニュー項目イベントハンドラーをテストに追加します。 [新規]メニューオプションを右クリックします。
- ステップ6 *-クラス、メッセージタイプ、ハンドラー名を指定できます。 とりあえず、そのままにして[追加と編集]ボタンをクリックします。
- ステップ7 *-[イベントハンドラーの追加]を選択します。
- ステップ8 *-CMFCModalDemoDlg.cppファイルの最後に追加されたイベントが表示されます。
- ステップ9 *-*今*シンプルなメニューオプションメッセージを表示するメッセージボックスを追加しましょう。
作業中にアクセラレータテーブルを開始するには、次のCMFCModalDemoAppに示すように、HACCEL変数とProcessMessageFilterを追加します。
- *ステップ10 *-CMFCModalDemoApp
- InitInstance()でアクセラレータと次の呼び出しをロードします。
- ステップ11 *-ProcessMessageFilterの実装です。
- ステップ12 *-上記のコードをコンパイルして実行すると、次の出力が表示されます。
- ステップ13 *-Altキーを押してからFキーを押し、次にNキーを押すか、Ctrl + Nを押します。 次のメッセージが表示されます。
MFC-プロパティシート
- プロパティシート*はタブダイアログボックスとも呼ばれ、プロパティページを含むダイアログボックスです。 各プロパティページはダイアログテンプレートリソースに基づいており、コントロールが含まれています。 上部にタブがあるページに囲まれています。 タブはページに名前を付け、その目的を示します。 ユーザーはプロパティシートのタブをクリックして、コントロールのセットを選択します。
プロパティページを作成するには、ダイアログベースのMFCプロジェクトを作成して、簡単な例を見てみましょう。
プロジェクトが作成されたら、プロパティページを追加する必要があります。
Visual Studioでは、[リソースの追加]ダイアログボックスを表示し、[ダイアログ]ノードを展開してIDD_PROPPAGE_Xアイテムの1つを選択することにより、プロパティページのリソースを簡単に作成できます。
- ステップ1 *-ソリューションエクスプローラーでプロジェクトを右クリックし、[追加]→[リソース]を選択します。
- ステップ2 *-IDD_PROPPAGE_LARGEを選択し、[新規]をクリックします。
ステップ3 *-上記のように、このプロパティページのIDとキャプションをそれぞれ *IDD_PROPPAGE_1 と*プロパティページ1 *に変更します。
- ステップ4 *-デザイナーウィンドウのプロパティページを右クリックします。
- ステップ5 *-[クラスの追加]オプションを選択します。
- ステップ6 *-クラス名を入力し、基本クラスのドロップダウンリストからCPropertyPageを選択します。
- ステップ7 *-[完了]をクリックして続行します。
- ステップ8 *-上記の手順に従って、IDD_PROPPAGE_2およびCaption Property Page 2のプロパティページをもう1つ追加します。
- ステップ9 *-2つのプロパティページが作成されました。 その機能を実装するには、プロパティシートが必要です。
プロパティシートは、プロパティページをグループ化し、エンティティとして保持します。
プロパティシートを作成するには、以下の手順に従ってください-
- ステップ1 *-プロジェクトを右クリックして、[追加]> [クラス]メニューオプションを選択します。
- ステップ2 *-左ペインからVisual C ++→MFCを選択し、テンプレートペインでMFCクラスを選択して、[追加]をクリックします。
- ステップ3 *-クラス名を入力し、基本クラスのドロップダウンリストからCPropertySheetを選択します。
- ステップ4 *-[完了]をクリックして続行します。
- ステップ5 *-このプロパティシートを起動するには、メインプロジェクトクラスで以下の変更が必要です。
- ステップ6 *-CMFCPropSheetDemo.cppファイルに次の参照を追加します。
- *ステップ7 *-CMFCPropSheetDemoApp
- InitInstance()メソッドを次のコードに示すように変更します。
- ステップ8 *-CMFCPropSheetDemo.cppファイルの完全な実装を次に示します。
- ステップ9 *-上記のコードをコンパイルして実行すると、次のダイアログボックスが表示されます。 このダイアログボックスには、2つのプロパティページが含まれています。
MFC-Windowsレイアウト
- コントロールのレイアウト*は、アプリケーションのユーザビリティにとって非常に重要かつ重要です。 アプリケーションでGUI要素のグループを配置するために使用されます。 レイアウトを選択する際に考慮すべき特定の重要な事項があります-
- 子要素の位置。
- 子要素のサイズ。
コントロールを追加する
新しいダイアログベースのMFCプロジェクトMFCLayoutDemoを作成しましょう。
- ステップ1 *-プロジェクトが作成されると、次の画面が表示されます。
- ステップ2 *-ダイアログボックスからTODOを削除します。
- ステップ3 *-左側にあるツールボックスからいくつかのコントロールをドラッグします。
(次のスナップショットに示すように、1つの静的テキストと1つのエディットコントロールをドラッグします)。
- ステップ4 *-静的テキストのキャプションを名前に変更します。
制御グリッド
コントロールグリッドはガイドグリッドドットであり、設計時に追加するコントロールの配置に役立ちます。
コントロールグリッドを有効にするには、次のスナップショットに示すように、ツールバーの[グリッドの切り替え]ボタンをクリックする必要があります。
サイズ変更のコントロール
ダイアログボックスにコントロールを追加すると、デフォルトのサイズまたはそれを描画したサイズのいずれかが想定されます。 フォームまたはダイアログボックス上のコントロールのサイズを支援するために、Visual Studioは黒い点で作られた視覚的なグリッドを提供します。
コントロールのサイズを変更するには、つまり特定の幅または高さを指定するには、いずれかのハンドルにマウスを置き、目的の方向にドラッグします。
この点線のグリッドを使用して、コントロールのサイズを変更できます。
コントロールの位置
ダイアログボックスまたはフォームに配置するコントロールは、指定された場所を想定しています。 ほとんどの場合、これらのポジションは実用的ではありません。 好きな位置に移動できます。
さらにいくつかのコントロールを追加しましょう-
- ステップ1 *-コントロールを移動するには、目的の位置に到達するまで、クリックして目的の方向にドラッグします。
- ステップ2 *-コントロールのグループを移動するには、最初にそれらを選択します。 次に、選択範囲を目的の場所にドラッグします。 静的テキストと編集コントロールを選択しましょう。
- ステップ3 *-これらの選択したコントロールを左側に移動します。
コントロールの配置を支援するために、Visual Studioには次のボタンを備えたダイアログツールバーがあります。
- ステップ1 *-これらすべてのコントロールを選択して、チェックボックスと静的テキストコントロールを左に揃えます。
- ステップ2 *-[形式]→[整列]→[左]を選択します。
- ステップ3 *-これらのコントロールがすべて左に揃えられていることがわかります。
タブの順序
フォームまたはダイアログボックスに追加するコントロールは、追加された順序に従った順序で配置されます。 新しいコントロールを配置するセクションまたは領域に関係なくコントロールを追加すると、既存のコントロールの最後に順番に配置されます。 修正しないと、ユーザーはコントロールの操作に苦労します。 コントロールナビゲーションのシーケンスは、タブオーダーとも呼ばれます。
タブを変更するには、[フォーマット]→[タブ順序]メニューオプションを使用するか、Ctrl + Dショートカットを使用します。 Ctrl + Dを押しましょう。
これで、これらすべてのコントロールがこのダイアログボックスに追加される順序を確認できます。 コントロールの順序または順序を変更するには、ナビゲートする順序ですべてのコントロールをクリックします。
この例では、最初にチェックボックスをクリックし、続いて名前とアドレスの編集コントロールをクリックします。 次に、次のスナップショットに示すように、[OK]および[キャンセル]をクリックします。
このアプリケーションを実行すると、次の出力が表示されます。
MFC-コントロール管理
MFCアプリケーションでは、アプリケーションに視覚的にコントロールを追加した後、コード内でコントロールを参照する場合、そのコントロールに基づいて、または関連付けられた変数を宣言できます。 MFCライブラリを使用すると、アプリケーションで使用される一部のコントロールの2種類の変数を値またはコントロール変数として宣言できます。
- 1つの変数は、コントロールに保存されている情報に使用されます。これは、*コントロール変数/インスタンス*とも呼ばれます。
- 他の変数は Control Value Variable として知られています。 ユーザーは、この変数を使用して、そのコントロールに対して何らかのアクションを実行できます。
制御変数/インスタンス
制御変数は、制御を管理するクラスに基づく変数です。 たとえば、ボタンコントロールはCButtonクラスに基づいています。
これらの概念を実際のプログラミングで見るために、MFCダイアログベースのプロジェクトMFCControlManagementを作成しましょう。
プロジェクトが作成されると、デザイナーウィンドウに次のダイアログボックスが表示されます。
- ステップ1 *-次のスナップショットに示すように、TODO行を削除し、1つのチェックボックスと1つの編集コントロールをドラッグします。 チェックボックスのキャプションを[制御を有効にする]に変更します。
- ステップ2 *-チェックボックスを右クリックします。
- ステップ3 *-[変数の追加]を選択します。
- ステップ4 *-メンバー変数の追加ウィザードが表示されます。
このダイアログボックスでさまざまなオプションを選択できます。 チェックボックスの場合、変数タイプはCButtonです。 このダイアログボックスではデフォルトで選択されています。
同様に、コントロールIDもデフォルトで選択されています。カテゴリコンボボックスで[コントロール]を選択し、[変数名]編集ボックスにm_enableDisableCheckと入力して[完了]をクリックする必要があります。
- ステップ5 *-同様に、次のスナップショットに示されている設定で編集コントロールのコントロール変数を追加します。
ダイアログクラスのヘッダーファイルを確認します。 新しい変数が追加されたことがわかります。
制御値変数
コントロールに対して宣言できる別のタイプの変数は、値変数です。 すべてのコントロールが値変数を提供するわけではありません。
- 値変数は、参照するコントロールに格納されている値のタイプを処理できる必要があります。
- たとえば、テキストベースのコントロールはテキストの処理に使用されるため、テキストベースのデータ型を宣言できます。 通常、これはCString変数になります。
チェックボックスと編集制御のためにこのタイプの変数を見てみましょう。
- ステップ1 *-チェックボックスを右クリックして、変数の追加を選択します。
- ステップ2 *-変数のタイプはBOOLです。 [カテゴリ]ドロップダウンリストから[値]を選択します。
- ステップ3 *-[完了]をクリックして続行します。
- ステップ4 *-同様に、次のスナップショットに示すように、編集コントロールの値変数を設定で追加します。
- ステップ5 *-変数タイプにCString、変数名フィールドにm_editControlValと入力します。
- ステップ6 *-これらの変数がヘッダーファイルに追加されたことを確認できます。
イベントハンドラーの制御
コントロールをアプリケーションに追加した後、視覚的に追加するか動的に作成するかに関係なく、ユーザーがコントロールに対して実行できるアクションの処理方法も決定します。
- 既にクラスに関連付けられているプロジェクトダイアログボックスの場合、イベントハンドラーを作成するときにいくつかのショートカットを利用できます。
- デフォルトのコントロール通知イベントまたは適用可能なWindowsメッセージのいずれかのハンドラーをすばやく作成できます。
チェックボックスのイベントハンドラーを追加した同じ例を見てみましょう。
- ステップ1 *-通知イベントを処理するコントロールを右クリックします。
- ステップ2 *-ショートカットメニューで、[イベントハンドラーの追加]をクリックして、イベントハンドラーウィザードを表示します。
- ステップ3 *-[メッセージタイプ]ボックスでイベントを選択して、[クラス]リストボックスで選択したクラスに追加します。
- ステップ4 *-[関数ハンドラー名]ボックスでデフォルト名を受け入れるか、選択した名前を入力します。
- ステップ5 *-[追加と編集]をクリックして、イベントハンドラーを追加します。
- ステップ6 *-CMFCControlManagementDlg.cppファイルの最後に次のイベントが追加されました。
コントロール管理
これまで、コントロールをアプリケーションに追加する方法を見てきました。 ユーザーの要件に応じてこれらのコントロールを管理する方法について説明します。 特定のイベントハンドラーで制御変数/インスタンスを使用できます。
- ステップ1 *-次の例を見てみましょう。 ここでは、チェックボックスがオン/オフになったときに編集コントロールを有効/無効にします。
- ステップ2 *-チェックボックスクリックイベントハンドラーを追加しました。 ここに実装があります-
- *ステップ3 *-ダイアログが作成されたら、CMFCControlManagementDlg
- OnInitDialog()に次のコードを追加する必要があります。 これにより、これらのコントロールが管理されます。
- ステップ4 *-CMFCControlManagementDlg.cppファイルの完全な実装です。
- ステップ5 *-上記のコードをコンパイルして実行すると、次の出力が表示されます。 デフォルトでは、チェックボックスはオフになっています。 これにより、編集コントロールも無効になります。
- ステップ6 *-[コントロールを有効にする]チェックボックスをオンにします。 これにより、編集コントロールが自動的に有効になります。
MFC-Windowsコントロール
- Windowsコントロール*は、ユーザーがデータを入力または操作するために対話できるオブジェクトです。 これらは通常、ダイアログボックスまたはツールバーに表示されます。 コントロールのさまざまな種類があります-
- ユーザーにテキストを表示したり、ユーザーにテキストを要求したりするために使用される text based control 。
- *リストベースのコントロール*はアイテムのリストを表示します。
- progress based control は、アクションの進行状況を示すために使用されます。
- *静的コントロール*を使用して、色、写真、または上記のカテゴリに定期的に収まらない何かを表示できます。
Sr.No. | Controls & Description |
---|---|
1 |
静的コントロールは、ユーザーの直接の介入なしに情報をユーザーに表示するオブジェクトです。 色、幾何学的形状、またはアイコン、ビットマップ、アニメーションなどの画像を表示するために使用できます。 |
2 |
アニメーションコントロールは、AVI形式でオーディオクリップを表示するウィンドウです。 AVIクリップは、映画のような一連のビットマップフレームです。 アニメーションコントロールは単純なAVIクリップのみを再生でき、サウンドはサポートしていません。 CAnimateCtrl クラスで表されます。 |
3 |
ボタン*は、ユーザーがアクションを開始するためにクリックするオブジェクトです。 ボタンコントロールは CButtonクラス*で表されます。 |
4 |
ビットマップボタン*は、その表面に画像または画像とテキストを表示します。 これは通常、ボタンを少し明確にすることを目的としています。 ビットマップボタンは、CButtonから派生した CBitmapButtonクラス*を使用して作成されます。 |
5 |
|
6 |
|
7 |
リストボックス*には、ユーザーが表示および選択できるファイル名などのアイテムのリストが表示されます。 リストボックスは CListBoxクラス*で表されます。 単一選択リストボックスでは、ユーザーは1つの項目のみを選択できます。 複数選択リストボックスでは、さまざまなアイテムを選択できます。 ユーザーがアイテムを選択すると、そのアイテムが強調表示され、リストボックスが親ウィンドウに通知メッセージを送信します。 |
8 |
|
9 |
|
10 |
チェックボックスは、ユーザーがアイテムの値をtrueまたはfalseに設定または変更できるWindowsコントロールです。 |
11 |
画像リスト*は、同じサイズの画像のコレクションであり、各画像はゼロベースのインデックスで参照できます。 画像リストは、アイコンまたはビットマップの大きなセットを効率的に管理するために使用されます。 画像リストは CImageListクラス*で表されます。 |
12 |
|
13 |
|
14 |
|
15 |
|
16 |
アップダウンコントロールを管理します。 |
17 |
|
18 |
|
19 |
|
20 |
日付と時刻のピッカーコントロール( CDateTimeCtrl )は、特定の日付を入力または選択する直感的で認識可能な方法を実装します。 コントロールのメインインターフェイスは、機能がコンボボックスに似ています。 ただし、ユーザーがコントロールを展開すると、(デフォルトで)月間カレンダーコントロールが表示され、ユーザーは特定の日付を指定できます。 日付を選択すると、月間カレンダーコントロールが自動的に消えます。 |
21 |
アプリケーションの画像を表示する必要がある場合、Visual C ++はそのための特別なコントロールを提供します。 |
22 |
|
23 |
|
24 |
|
25 |
ツリービューコントロール*は、ドキュメントの見出し、インデックスのエントリ、ディスク上のファイルやディレクトリなど、アイテムの階層リストを表示するウィンドウです。 各アイテムはラベルとオプションのビットマップ画像で構成され、各アイテムにはサブアイテムのリストを関連付けることができます。 ユーザーはアイテムをクリックすることにより、関連するサブアイテムのリストを展開したり折りたたんだりできます。 *CTreeCtrl クラスで表されます。 |
26 |
リストビューコントロールの機能をカプセル化します。リストビューコントロールは、アイコン(イメージリストから)とラベルで構成されるアイテムのコレクションを表示します。 CListCtrl クラスで表されます。 リストコントロールは、4つのビューのいずれかを使用してアイテムのリストを表示することで構成されます。 |
MFC-メッセージとイベント
アプリケーションはさまざまなオブジェクトで構成されています。 ほとんどの場合、複数のアプリケーションがコンピューターで実行されており、オペレーティングシステムは常にいくつかの割り当てを実行するように求められます。 予測できないほど多くの要求が提示される可能性があるため、オペレーティングシステムはオブジェクトに任せて、必要なもの、必要な場合、および期待される動作または結果を指定します。
概要
- Microsoft Windowsオペレーティングシステムは、1つのオブジェクトを処理する必要がある要求の種類と、別のオブジェクトが必要とする割り当ての種類を予測できません。
- これらすべての割り当てと要求を管理するために、オブジェクトはメッセージを送信します。
- 各オブジェクトには、どのメッセージをいつ送信するかを決定する責任があります。
- メッセージを送信するには、コントロールがイベントを作成する必要があります。
- この2つを区別するために、メッセージの名前は通常、ウィンドウメッセージを表すWM_で始まります。
- 通常、イベントの名前はOnで始まり、アクションを示します。
- イベントは、メッセージを送信するアクションです。
メッセージの地図
Windowsはメッセージ指向のオペレーティングシステムであるため、Windows環境のプログラミングの大部分はメッセージ処理に関係しています。 キーストロークやマウスクリックなどのイベントが発生するたびに、メッセージがアプリケーションに送信され、アプリケーションでイベントを処理する必要があります。
- コンパイラーがメッセージを管理するには、それらをクラス定義に含める必要があります。
- 次のコードに示すように、クラス定義の最後に DECLARE_MESSAGE_MAP マクロを提供する必要があります。
- 実際のメッセージは、DECLARE_MESSAGE_MAP行のすぐ上にリストする必要があります。
- メッセージを実装するには、プログラムが使用しているメッセージのテーブルを作成する必要があります。
- この表では、2つの区切りマクロを使用しています。
- BEGIN_MESSAGE_MAP で始まり、 END_MESSAGE_MAP マクロで終わります。
- BEGIN_MESSAGE_MAPマクロは、次のコードに示すように、クラスの名前とクラスの派生元のMFCクラスの2つの引数を取ります。
新しいWin32プロジェクトを作成して、簡単な例を見てみましょう。
- ステップ1 *-MFCプロジェクトを作成するには、プロジェクトを右クリックして[プロパティ]を選択します。
- ステップ2 *-左側のセクションで、[構成プロパティ]→[全般]をクリックします。
- ステップ3 *-[プロジェクトのデフォルト]セクションで[共有DLLでMFCを使用]オプションを選択し、[OK]をクリックします。
- ステップ4 *-新しいソースファイルを追加する必要があります。
- ステップ5 *-プロジェクトを右クリックして、[追加]→[新しいアイテム]を選択します。
- ステップ6 *-[テンプレート]セクションで、[C ++ファイル(.cpp)]をクリックします。
- ステップ7 *-[追加]をクリックして続行します。
ステップ8 *-次に、。cppファイルに次のコードを追加します。
Windowsメッセージ
ウィンドウの作成、ウィンドウの表示など、Windowsメッセージにはさまざまな種類があります。 一般的に使用されるWindowsメッセージの一部を次に示します。
以下に、さまざまな種類のウィンドウメッセージを示します。
Message | Map entry | Description |
---|---|---|
WM_ACTIVATE | ON_WM_ACTIVATE() | The framework calls this member function when a CWnd object is being activated or deactivated. |
WM_ACTIVATEA PP | ON_WM_ACTIVATEAPP() | The framework calls this member function to all top-level windows of the task being activated and for all top-level windows of the task being deactivated. |
WM_APPCOMM AND | ON_WM_APPCOMMAND() | The framework calls this member function when the user generates an application command event. |
WM_CANCELMODE | WM_CANCELMODE() | The framework calls this member function to inform CWnd to cancel any internal mode. |
WM_CHILDACTIVATE | ON_WM_CHILDACTIVATE() | If the CWnd object is a multiple document interface (MDI) child window, OnChildActivate is called by the framework when the user clicks the window’s title bar or when the window is activated, moved, or sized. |
WM_CLIPBOAR DUPDATE | ON_WM_CLIPBOARDUPDATE() | The framework calls this member function when the contents of the clipboard have changed. |
WM_CLOSE | ON_WM_CLOSE() | The framework calls this member function as a signal that the CWnd or an application is to terminate. |
WM_CONTEXTMENU | ON_WM_CONTEXTMENU() | Called by the framework when the user has clicked the right mouse button (rightclicked) in the window. |
WM_COPYDATA | ON_WM_COPYDATA() | This member function is called by the framework to copy data from one application to another. |
WM_CREATE | ON_WM_CREATE() | The framework calls this member function when an application requests that the Windows window be created by calling the Create or CreateEx member function. |
WM_CTLCOLOR | ON_WM_CTLCOLOR() | The framework calls this member function when a child control is about to be drawn. |
WM_DELETEITEM | ON_WM_DELETEITEM() | The framework calls this member function to inform the owner of an owner-draw list box or combo box that the list box or combo box is destroyed or that items have been removed. |
WM_DESTROY | ON_WM_DESTROY() | he framework calls this member function to inform the CWnd object that it is being destroyed. |
WM_DRAWITEM | ON_WM_DRAWITEM() | The framework calls this member function for the owner of an owner-draw button control, combo-box control, list-box control, or menu when a visual aspect of the control or menu has changed. |
WM_DROPFILES | ON_WM_DROPFILES() | The framework calls this member function when the user releases the left mouse button over a window that has registered itself as the recipient of dropped files. |
WM_ENABLE | ON_WM_ENABLE() | The framework calls this member function when an application changes the enabled state of the CWnd object. Syntax. |
WM_HELPINFO | ON_WM_HELPINFO() | Handles F1 Help within the application (using the current context). |
WM_HOTKEY | ON_WM_HOTKEY() | The framework calls this member function when the user presses a system-wide hot key. |
WM_HSCROLL | ON_WM_HSCROLL() | The framework calls this member function when the user clicks a window’s horizontal scroll bar. |
WM_KEYDOWN | ON_WM_KEYDOWN() | The framework calls this member function when a nonsystem key is pressed. |
WM_KEYUP | ON_WM_KEYUP() | The framework calls this member function when a nonsystem key is released. |
WM_KILLFOCUS | ON_WM_KILLFOCUS() | The framework calls this member function immediately before losing the input focus. |
WM_LBUTTONDBLCLK | ON_WM_LBUTTONDBLCLK() | The framework calls this member function when the user double-clicks the left mouse button. |
WM_LBUTTONDOWN | ON_WM_LBUTTONDOWN() | The framework calls this member function when the user presses the left mouse button. |
WM_LBUTTONUP | ON_WM_LBUTTONUP() | The framework calls this member function when the user releases the left mouse button. |
WM_MBUTTONDBLCLK | ON_WM_MBUTTONDBLCLK() | The framework calls this member function when the user double-clicks the middle mouse button. |
WM_MBUTTONDOWN | ON_WM_MBUTTONDOWN() | The framework calls this member function when the user presses the middle mouse button. |
WM_MBUTTONUP | ON_WM_MBUTTONUP() | The framework calls this member function when the user releases the middle mouse button. |
WM_MENUSELECT | ON_WM_MENUSELECT() | If the CWnd object is associated with a menu, OnMenuSelect is called by the framework when the user selects a menu item. |
WM_MOUSEACTIVATE | ON_WM_MOUSEACTIVATE() | The framework calls this member function when the cursor is in an inactive window and the user presses a mouse button. |
WM_MOUSEHOVER | ON_WM_MOUSEHOVER() | The framework calls this member function when the cursor hovers over the client area of the window for the period of time specified in a prior call to TrackMouseEvent. |
WM_MOUSEHWHEEL | ON_WM_MOUSEHWHEEL() | The framework calls this member when the current window is composed by the Desktop Window Manager (DWM), and that window is maximized. |
WM_MOUSELEAVE | ON_WM_MOUSELEAVE() | The framework calls this member function when the cursor leaves the client area of the window specified in a prior call to TrackMouseEvent. |
WM_MOUSEMOVE | ON_WM_MOUSEMOVE() | The framework calls this member function when the mouse cursor moves. |
WM_MOVE | ON_WM_MOVE() | The framework calls this member function after the CWnd object has been moved. |
WM_PAINT | ON_WM_PAINT() | The framework calls this member function when Windows or an application makes a request to repaint a portion of an application’s window. |
WM_SETFOCUS() | ON_WM_SETFOCUS( ) | The framework calls this member function after gaining the input focus. |
WM_SIZE( ) | ON_WM_SIZE( ) | The framework calls this member function after the window’s size has changed. |
WM_TIMER | ON_WM_TIMER() | The framework calls this member function after each interval specified in the SetTimer member function used to install a timer. |
WM_VSCROLL | ON_WM_VSCROLL() | The framework calls this member function when the user clicks the window’s vertical scroll bar. |
WM_WINDOWPOSCHANGED | ON_WM_WINDOWPOSCHANGED() | The framework calls this member function when the size, position, or Z-order has changed as a result of a call to the SetWindowPos member function or another window-management function. |
ウィンドウ作成の簡単な例を見てみましょう。
- ステップ1 *-ON_WM_CREATEを作成するには、afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);を追加します。以下に示すように、DECLARE_MESSAGE_MAP()の前。
- ステップ2 *-BEGIN_MESSAGE_MAP(CMainFrame、CFrameWnd)の後でEND_MESSAGE_MAP()の前にON_WM_CREATE()を追加します
- ステップ3 *-これがOnCreate()の実装です
ステップ4 *-これで、。cppファイルは次のコードのようになります。
- ステップ5 *-上記のコードをコンパイルして実行すると、次の出力が表示されます。
- ステップ6 *-[OK]をクリックすると、メインウィンドウが表示されます。
コマンドメッセージ
グラフィカルアプリケーションの主な機能の1つは、ユーザーがマシンと対話できるようにするWindowsコントロールとリソースを提示することです。 学習するコントロールの例は、ボタン、リストボックス、コンボボックスなどです。
前のレッスンで紹介したリソースの1つのタイプはメニューです。 このようなコントロールとリソースは、ユーザーがクリックすると独自のメッセージを開始できます。 Windowsコントロールまたはリソースから発せられるメッセージは、コマンドメッセージと呼ばれます。
コマンドメッセージの簡単な例を見てみましょう。
アプリケーションに新しいドキュメントを作成する機能を提供するために、CWinAppクラスはOnFileNew()メソッドを提供します。
ここにメソッド定義があります-
キーボードメッセージ
- キーボード*は、コンピューターに接続されているハードウェアオブジェクトです。 デフォルトでは、認識可能な記号、文字、その他の文字をコントロールに入力するために使用されます。 キーボードの各キーには、記号、文字、またはそれらの組み合わせが表示され、キーの用途を示すことができます。 ユーザーは通常、プログラムに信号を送信するキーを押します。
各キーには、オペレーティングシステムが認識できるコードがあります。 このコードは*仮想キーコード*と呼ばれます。
____仮想キーコードは次のとおりです。
Sr.No. | Constant/value & Description |
---|---|
1 |
VK_LBUTTON 左マウスボタン |
2 |
VK_RBUTTON 右マウスボタン |
3 |
VK_CANCEL コントロールブレーク処理 |
4 |
VK_MBUTTON 中マウスボタン(3ボタンマウス) |
5 |
VK_BACK BACKSPACEキー |
6 |
VK_RETURN キーを入力してください |
7 |
VK_TAB Tabキー |
8 |
VK_CLEAR クリアキー |
9 |
VK_SHIFT シフトキー |
10 |
VK_CONTROL Ctrlキー |
11 |
VK_MENU ALTキー |
12 |
VK_PAUSE 一時停止キー |
13 |
VK_CAPITAL Caps Lockキー |
14 |
VK_ESCAPE ESCキー |
15 |
VK_SPACE スペースキー |
16 |
VK_PRIOR PAGE UPキー |
17 |
VK_NEXT Page Downキー |
18 |
VK_END ENDキー |
19 |
VK_HOME ホームキー |
20 |
VK_LEFT 左矢印キー |
21 |
VK_UP 上矢印キー |
22 |
VK_RIGHT 右矢印キー |
23 |
VK_DOWN 下矢印キー |
24 |
VK_SELECT SELECTキー |
25 |
VK_PRINT 印刷キー |
26 |
VK_EXECUTE 実行キー |
27 |
VK_SNAPSHOT 印刷画面キー |
28 |
VK_INSERT INSキー |
29 |
VK_DELETE DELキー |
30 |
VK_NUMPAD0 テンキー0キー |
31 |
VK_NUMPAD1 テンキー1キー |
32 |
VK_NUMPAD2 テンキー2キー |
33 |
VK_NUMPAD3 テンキー3キー |
34 |
VK_NUMPAD4 テンキー4キー |
35 |
VK_NUMPAD5 数字キーパッド5キー |
36 |
VK_NUMPAD6 テンキー6キー |
37 |
VK_NUMPAD7 テンキー7キー |
38 |
VK_NUMPAD8 テンキー8キー |
39 |
VK_NUMPAD9 テンキー9キー |
40 |
VK_MULTIPLY 乗算キー |
41 |
VK_ADD キーを追加 |
42 |
VK_SEPARATOR 区切りキー |
43 |
VK_SUBTRACT 減算キー |
44 |
VK_DECIMAL 10進数のキー |
45 |
VK_DIVIDE 分割キー |
46 |
VK_F1 F1キー |
47 |
VK_F2 F2キー |
48 |
VK_F3 F3キー |
49 |
VK_F4 F4キー |
50 |
VK_F5 F5キー |
52 |
VK_F6 F6キー |
53 |
VK_F7 F7キー |
54 |
VK_F8 F8キー |
55 |
VK_F9 F9キー |
56 |
VK_F10 F10キー |
57 |
VK_F11 F11キー |
58 |
VK_F12 F12キー |
59 |
VK_NUMLOCK NUM LOCKキー |
60 |
VK_SCROLL スクロールロックキー |
61 |
VK_LSHIFT 左Shiftキー |
62 |
VK_RSHIFT 右Shiftキー |
63 |
VK_LCONTROL 左コントロールキー |
64 |
VK_RCONTROL 右コントロールキー |
キーを押すと、https://docs.microsoft.com/en-us/windows/desktop/inputdev/wm-keydown [WM_KEYDOWN]またはhttps://docs.microsoft.com/en-us/windows/desktop/が発生しますinputdev/wm-syskeydown [WM_SYSKEYDOWN]メッセージがスレッドメッセージに配置されます。 これは次のように定義することができます-
簡単な例を見てみましょう。
- ステップ1 *-これがメッセージです。
- ステップ2 *-OnKeyDown()の実装です。
- ステップ3 *-上記のコードをコンパイルして実行すると、次の出力が表示されます。
- ステップ4 *-Enterキーを押すと、次のメッセージが表示されます。
マウスメッセージ
マウスは、コンピューターに接続されている別のオブジェクトで、ユーザーがマシンと対話できるようにします。
- マウスの左ボタンが押された場合、ON_WM_LBUTTONDOWNメッセージが送信されます。 このメッセージの構文は次のとおりです-
- afx_msg void OnLButtonDown(UINT nFlags、CPointポイント)
- マウスの右ボタンが押された場合、ON_WM_RBUTTONDOWNメッセージが送信されます。 その構文は-
- afx_msg void OnRButtonDown(UINT nFlags、CPointポイント)
- 同様に、左マウスを離すと、ON_WM_LBUTTONUPメッセージが送信されます。 その構文は-
- afx_msg void OnLButtonUp(UINT nFlags、CPointポイント)
- 右マウスボタンを離すと、ON_WM_TBUTTONUPメッセージが送信されます。 その構文は-
- afx_msg void OnRButtonUp(UINT nFlags、CPointポイント)
簡単な例を見てみましょう。
- ステップ1 *-次のコードに示すように、CMainFrameクラス定義に次の2つの関数を追加します。
- ステップ2 *-次の2つのメッセージマップを追加します。
- ステップ3 *-これが関数の定義です。
- ステップ4 *-このアプリケーションを実行すると、次の出力が表示されます。
- ステップ5 *-[OK]をクリックすると、次のメッセージが表示されます。
- ステップ6 *-このウィンドウを右クリックします。 これで、マウスの右ボタンを放すと、次のメッセージが表示されます。
MFC-Activexコントロール
- ActiveXコントロールコンテナ*は、実行するActiveX(以前のOLE)コントロールの環境を提供する親プログラムです。
- ActiveXコントロールは、Microsoft ActiveXテクノロジーを使用したコントロールです。
- ActiveXはプログラミング言語ではなく、アプリケーションが情報を共有する方法に関する一連のルールです。
- プログラマは、C、C ++、Visual Basic、Javaなどのさまざまな言語でActiveXコントロールを開発できます。
- MFCの有無にかかわらずActiveXコントロールを含むことができるアプリケーションを作成できますが、MFCを使用する方がはるかに簡単です。
MFCダイアログベースのアプリケーションにActiveXコントロールを追加する簡単な例を見てみましょう。
- ステップ1 *-デザイナーウィンドウでダイアログを右クリックし、[ActiveXコントロールの挿入]を選択します。
- ステップ2 *-Microsoft Picture Clip Controlを選択し、[OK]をクリックします。
- ステップ3 *-ピクチャコントロールのサイズを変更し、[プロパティ]ウィンドウで[ピクチャ]フィールドをクリックします。
- ステップ4 *-写真を含むフォルダーを参照します。 任意の画像を選択します。
- ステップ5 *-このアプリケーションを実行すると、次の出力が表示されます。
別の簡単な例を見てみましょう。
- ステップ1 *-デザイナーウィンドウのダイアログを右クリックします。
- ステップ2 *-[ActiveXコントロールの挿入]を選択します。
- ステップ3 *-Microsoft ProgressBar Control 6.0を選択し、[OK]をクリックします。
ステップ4 *-プログレスバーを選択し、プロパティウィンドウで方向を *1 – ccOrientationVertical に設定します。
- ステップ5 *-プログレスバーの制御変数を追加します。
- ステップ6 *-OnInitDialog()に次のコードを追加します
- ステップ7 *-このアプリケーションを再度実行すると、垂直方向の進行状況バーも表示されます。
MFC-ファイルシステム
この章では、ファイルシステムのさまざまなコンポーネントについて説明します。
ドライブ
- ドライブ*は、情報を保存できるようにコンピューターに接続された物理デバイスです。 論理ディスク、論理ボリューム、または仮想ディスク(略してVDまたはvdisk)は、コンピューターシステム内の1つ以上の物理ディスクドライブに使用可能なストレージ容量の領域を提供する仮想デバイスです。 ドライブには、ハードディスク、CD ROM、DVD ROM、フラッシュ(USB)ドライブ、メモリカードなどがあります。
実行する主な操作の1つは、コンピューター上のドライブのリストを取得することです。
新しいMFCダイアログベースのアプリケーションを作成して、簡単な例を見てみましょう。
- ステップ1 *-ツールボックスから1つのボタンをドラッグし、キャプションをGet Drives Infoに変更します。
- ステップ2 *-静的コントロールのキャプション(TODO行)を削除し、そのIDをIDC_STATIC_TEXTに変更します。
- ステップ3 *-ボタンを右クリックして、[イベントハンドラーの追加]を選択します。
- ステップ4 *-BN_CLICKEDメッセージタイプを選択し、[追加と編集]ボタンをクリックします。
- ステップ5 *-静的テキストコントロールの値変数m_strDrivesを追加します。
コンピューター上のドライブをサポートするために、Win32ライブラリはMicrosoft WindowのGetLogicalDrives()関数を提供し、現在のコンピューター上のすべてのドライブのリストを取得します。
- ステップ6 *-上記のコードをコンパイルして実行すると、次の出力が表示されます。
- ステップ7 *-ボタンをクリックすると、コンピューター上のすべてのドライブが表示されます。
ディレクトリ
コンピューティングでは、*ディレクトリ*は、他のコンピューターファイル、および場合によっては他のディレクトリへの参照を含むファイルシステムカタログ構造です。 ディレクトリは物理的な場所です。 ドライブで使用できない操作を処理できます。
新しいMFCダイアログベースのアプリケーションを作成して、簡単な例を見てみましょう。
- ステップ1 *-ツールボックスから3つのボタンをドラッグします。 キャプションを変更して、ディレクトリの作成、ディレクトリの削除、ディレクトリの移動を行います。
ステップ2 *-これらのボタンのIDを *IDC_BUTTON_CREATE 、 IDC_BUTTON_DELETE 、および IDC_BUTTON_MOVE に変更します。
- ステップ3 *-TODO行を削除します。
- ステップ4 *-各ボタンにイベントハンドラーを追加します。
- ステップ5 *-ディレクトリを作成するには、Win32ライブラリのCreateDirectory()メソッドを呼び出します。
- ステップ6 *-Createボタンイベントハンドラーの実装で、1つのディレクトリを作成し、さらに2つのサブディレクトリを作成します。
ステップ7 *-ディレクトリを削除するには、Win32ライブラリの RemoveDirectory()*関数を呼び出します。 削除ボタンイベントハンドラーの実装を次に示します。
- ステップ8 *-ディレクトリを移動する場合は、同じMoveFile()関数を呼び出すこともできます。 移動ボタンイベントハンドラーの実装を次に示します。このハンドラーでは、最初に新しいディレクトリを作成してから、Dir2をそのディレクトリに移動します。
- ステップ9 *-上記のコードをコンパイルして実行すると、次の出力が表示されます。
- ステップ10 *-[ディレクトリの作成]ボタンをクリックすると、これらのディレクトリが作成されます。
- ステップ11 *-[ディレクトリの削除]ボタンをクリックすると、Dir1が削除されます。
ファイル処理
MFCアプリケーションのほとんどの*ファイル処理*は、 CArchive という名前のクラスと組み合わせて実行されます。 CArchiveクラスは、アプリケーションと、データの保存または使用可能にするために使用されるメディアとの間のリレーとして機能します。 これにより、オブジェクトの複雑なネットワークを永続的なバイナリ形式(通常はディスクストレージ)で保存し、それらのオブジェクトを削除した後も保持できます。
CArchiveクラスのメソッドのリストは次のとおりです-
以下の____は、CDCクラスのメソッドのリストです。
Sr.No. | Name & Description |
---|---|
1 |
Abort 例外をスローせずにアーカイブを閉じます。 |
2 |
Close 書き込まれていないデータをフラッシュし、 CFile から切断します。 |
3 |
Flush アーカイブバッファから未書き込みデータをフラッシュします。 |
4 |
GetFile このアーカイブのCFileオブジェクトポインターを取得します。 |
5 |
GetObjectSchema
|
6 |
IsBufferEmpty Windows Sockets受信プロセス中にバッファが空になったかどうかを判断します。 |
7 |
IsLoading アーカイブがロードされているかどうかを判別します。 |
8 |
IsStoring アーカイブが保存されているかどうかを判断します。 |
9 |
MapObject ファイルにシリアル化されていないが、サブオブジェクトが参照できるオブジェクトをマップに配置します。 |
10 |
Read 生バイトを読み取ります。 |
11 |
ReadClass 以前に WriteClass で保存されたクラス参照を読み取ります。 |
12 |
ReadObject ロードのためにオブジェクトのSerialize関数を呼び出します。 |
13 |
ReadString 1行のテキストを読み取ります。 |
14 |
SerializeClass CArchiveの方向に応じて、CArchiveオブジェクトへのクラス参照を読み書きします。 |
15 |
SetLoadParams ロード配列が成長するサイズを設定します。 オブジェクトをロードする前、または MapObject または ReadObject を呼び出す前に呼び出す必要があります。 |
16 |
SetObjectSchema アーカイブオブジェクトに格納されているオブジェクトスキーマを設定します。 |
17 |
SetStoreParams シリアル化プロセス中に一意のオブジェクトを識別するために使用されるマップのハッシュテーブルサイズとブロックサイズを設定します。 |
18 |
Write 生のバイトを書き込みます。 |
19 |
WriteClass
|
20 |
WriteObject 格納するためにオブジェクトのSerialize関数を呼び出します。 |
21 |
WriteString 1行のテキストを書き込みます。 |
データの保存と取得に使用される演算子のリストは次のとおりです
Sr.No. | Name & Description |
---|---|
1 |
operator << オブジェクトとプリミティブ型をアーカイブに保存します。 |
2 |
operator >> アーカイブからオブジェクトとプリミティブ型をロードします。 |
新しいMFCダイアログベースのアプリケーションを作成して、簡単な例を見てみましょう。
- ステップ1 *-次のスナップショットに示すように、1つの編集コントロールと2つのボタンをドラッグします。
ステップ2 *-編集制御用に制御変数 *m_editCtrl および値変数 m_strEdit を追加します。
- ステップ3 *-[開く]ボタンと[保存]ボタンのクリックイベントハンドラーを追加します。
- ステップ4 *-これはイベントハンドラの実装です。
- ステップ5 *-上記のコードをコンパイルして実行すると、次の出力が表示されます。
- ステップ6 *-何かを書いて[保存]をクリックします。 データをバイナリ形式で保存します。
- ステップ7 *-編集コントロールからテストを削除します。 [開く]をクリックすると、同じテキストが再び読み込まれることを確認します。
MFC-標準I/O
MFCライブラリは、独自のバージョンのファイル処理を提供します。 これは、CStdioFileという名前のクラスを通じて行われます。 CStdioFileクラスはCFileから派生しています。 Unicodeテキストファイルと通常のマルチバイトテキストファイルの読み取りと書き込みを処理できます。
CStdioFileオブジェクトを初期化できるコンストラクタのリストは次のとおりです-
CStdioFileのメソッドのリストは次のとおりです-
Sr.No. | Name & Description |
---|---|
1 |
|
2 |
ReadString 1行のテキストを読み取ります。 |
3 |
Seek 現在のファイルポインターを配置します。 |
4 |
WriteString 1行のテキストを書き込みます。 |
新しいMFCダイアログベースのアプリケーションを作成して、簡単な例をもう一度見てみましょう。
- ステップ1 *-次のスナップショットに示すように、1つの編集コントロールと2つのボタンをドラッグします。
ステップ2 *-編集制御用の値変数 *m_strEditCtrl を追加します。
- ステップ3 *-[開く]ボタンと[保存]ボタンのクリックイベントハンドラーを追加します。
- ステップ4 *-これはイベントハンドラの実装です。
- ステップ5 *-上記のコードをコンパイルして実行すると、次の出力が表示されます。
ステップ6 *-何かを書いて[保存]をクリックします。 データを .txtファイルに保存します。
- ステップ7 *-ファイルの場所を見ると、test.txtファイルが含まれていることがわかります。
- ステップ8 *-次に、アプリケーションを閉じます。 同じアプリケーションを実行します。 [開く]をクリックすると、同じテキストが再び読み込まれます。
- ステップ9 *-ファイルを開いてファイルを読み取り、続いてエディットコントロールを更新します。
MFC-ドキュメントビュー
- Document/Viewアーキテクチャ*は、Microsoft Foundation Classesライブラリに基づいてアプリケーションを作成するために使用される基盤です。 ユーザーがアプリケーションの一部として見ているものや、ユーザーが作業するドキュメントなど、コンピュータープログラムを構成するさまざまな部分を区別することができます。 これは、アンサンブルとして機能する個別のクラスの組み合わせによって行われます。
ドキュメント/ビューアーキテクチャを構成する部分は、フレーム、1つ以上のドキュメント、およびビューです。 まとめると、これらのエンティティは使用可能なアプリケーションを構成します。
View
資料
- ドキュメント*はバケットに似ています。 コンピューターアプリケーションの場合、ドキュメントはユーザーのデータを保持します。 このアーキテクチャのドキュメント部分を作成するには、CDocumentクラスからオブジェクトを派生する必要があります。
フレーム
名前が示すように、*フレーム*は、ビルディングブロック、構造、およびアイテムの境界の組み合わせです。 フレームは、ウィンドウに「物理的な」存在感を与えます。 また、Windowsデスクトップに関するオブジェクトの場所も定義します。
シングルドキュメントインターフェイス(SDI)
「 Single Document Interface 」またはSDIという表現は、ユーザーに1つのビューのみを表示できるドキュメントを指します。 これは、アプリケーションが一度に複数のドキュメントを表示できないことを意味します。 現在のアプリケーションの別の種類のドキュメントを表示する場合は、アプリケーションの別のインスタンスを作成する必要があります。 メモ帳とワードパッドは、SDIアプリケーションの例です。
新しいMFCダイアログベースのアプリケーションを作成して、単一ドキュメントインターフェイスまたはSDIの簡単な例を見てみましょう。
ステップ1 *-以下の設定で新しいMFCアプリケーション *MFCSDIDemo を作成します。
- ステップ2 *-アプリケーションタイプから[単一ドキュメント]を選択し、プロジェクトスタイルからMFC標準を選択します。
- ステップ3 *-[完了]をクリックして続行します。
- ステップ4 *-プロジェクトが作成されたら、アプリケーションを実行すると、次の出力が表示されます。
マルチドキュメントインターフェイス(MDI)
ユーザーがアプリケーションを閉じずに複数のドキュメントを開くことができる場合、アプリケーションは Multiple Document Interface またはMDIと呼ばれます。 この機能を提供するために、アプリケーションは、コンピュータープログラムのメインフレームとして機能する親フレームを提供します。 このフレーム内で、アプリケーションは個々のフレームでビューを作成し、各ビューを互いに区別できるようにします。
新しいMFCダイアログベースのアプリケーションを作成して、複数のドキュメントインターフェイスまたはMDIの簡単な例を見てみましょう。
ステップ1 *-以下の設定で新しいMFCアプリケーション *MFCMDIDemo を作成します。
- ステップ2 *-アプリケーションの種類から複数のドキュメントを選択し、プロジェクトスタイルからMFC標準を選択します。
- ステップ3 *-[完了]をクリックして続行します。
- ステップ4 *-プロジェクトが作成されたら、アプリケーションを実行すると、次の出力が表示されます。
- ステップ5 *-[ファイル]→[新規]メニューオプションをクリックすると、次のスナップショットに示すように、別の子ウィンドウが作成されます。
- ステップ6 *-マルチドキュメントインターフェイス(MDI)アプリケーションでは、アプリケーションごとに1つのメインフレームがあります。 この場合、CMDIFrameWnd、および各ドキュメントの1つのCMDIChildWnd派生子フレーム。
MFC-ストリング
- 文字列*は、文字のシーケンスを表すオブジェクトです。 Cスタイルの文字列は、C言語内で作成され、C ++内で引き続きサポートされます。
- この文字列は、実際にはヌル文字「\ 0」で終了する文字の1次元配列です。
- NULLで終わる文字列には、文字列とそれに続くヌルを構成する文字が含まれます。
文字配列の簡単な例を次に示します。
以下は、別の表現方法です。
Microsoft Foundation Class(MFC)ライブラリは、 CString と呼ばれる文字列を操作するクラスを提供します。 以下は、CStringの重要な機能です。
- CStringには基本クラスがありません。
- CStringオブジェクトは、可変長の文字シーケンスで構成されます。
- CStringは、Basicと同様の構文を使用して関数と演算子を提供します。 *連結演算子と比較演算子は、メモリ管理の簡素化とともに、CStringオブジェクトを通常の文字配列よりも使いやすくします。
CStringのコンストラクタは次のとおりです。
Sr.No. | Method & Description |
---|---|
1 |
さまざまな方法でCStringオブジェクトを構築します |
ここに配列メソッドのリストがあります-
Sr.No. | Method & Description |
---|---|
1 |
GetLength CStringオブジェクトの文字数を返します。 |
2 |
IsEmpty CStringオブジェクトに文字が含まれていないかどうかをテストします。 |
3 |
Empty 文字列の長さを0にします。 |
4 |
GetAt 指定された位置の文字を返します。 |
5 |
SetAt 指定された位置に文字を設定します。 |
ここに比較方法のリストがあります-
Sr.No. | Method & Description |
---|---|
1 |
Compare 2つの文字列を比較します(大文字と小文字を区別します)。 |
2 |
CompareNoCase 2つの文字列を比較します(大文字と小文字は区別されません)。 |
ここに抽出方法のリストがあります-
Sr.No. | Method & Description |
---|---|
1 |
Mid 文字列の中央部分を抽出します(Basic MID $関数など)。 |
2 |
Left 文字列の左部分を抽出します(Basic LEFT $関数など)。 |
3 |
Right 文字列の右部分を抽出します(Basic RIGHT $関数など)。 |
4 |
SpanIncluding 指定された文字セットにある文字列から文字を抽出します。 |
5 |
SpanExcluding 指定された文字セットにない文字列から文字を抽出します。 |
変換方法のリストは次のとおりです。
Sr.No. | Method & Description |
---|---|
1 |
MakeUpper この文字列のすべての文字を大文字に変換します。 |
2 |
MakeLower この文字列のすべての文字を小文字に変換します。 |
3 |
MakeReverse この文字列の文字を反転します。 |
4 |
Format sprintfのように文字列をフォーマットします。 |
5 |
TrimLeft 文字列から先頭の空白文字を削除します。 |
6 |
TrimRight 文字列から末尾の空白文字を削除します。 |
以下に検索方法のリストを示します。
Sr.No. | Method & Description |
---|---|
1 |
Find 大きな文字列内の文字または部分文字列を検索します。 |
2 |
ReverseFind 大きな文字列内の文字を検索します。最後から始まります。 |
3 |
FindOneOf セットから最初に一致する文字を検索します。 |
バッファアクセスメソッドのリストを以下に示します。
Sr.No. | Method & Description |
---|---|
1 |
GetBuffer CString内の文字へのポインターを返します。 |
2 |
GetBufferSetLength CString内の文字へのポインターを返し、指定された長さに切り捨てます。 |
3 |
ReleaseBuffer GetBufferによって返されたバッファの制御を解放します |
4 |
FreeExtra 文字列に以前に割り当てられた余分なメモリを解放することにより、この文字列オブジェクトのオーバーヘッドを削除します。 |
5 |
LockBuffer 参照カウントを無効にし、バッファ内の文字列を保護します。 |
6 |
UnlockBuffer 参照カウントを有効にし、バッファ内の文字列を解放します。 |
Windows固有のメソッドのリストを以下に示します。
Sr.No. | Method & Description |
---|---|
1 |
AllocSysString CStringデータからBSTRを割り当てます。 |
2 |
SetSysString CStringオブジェクトからのデータで既存のBSTRオブジェクトを設定します。 |
3 |
LoadString Windows CEリソースから既存のCStringオブジェクトをロードします。 |
CStringオブジェクトのさまざまな操作は次のとおりです-
文字列を作成
文字列リテラルを使用するか、CStringクラスのインスタンスを作成することにより、文字列を作成できます。
上記のコードをコンパイルして実行すると、次の出力が表示されます。
空の文字列
- 空の文字列リテラルを使用するか、CString
- Empty()メソッドを使用して、空の文字列を作成できます。 ブール型プロパティisEmptyを使用して、文字列が空かどうかを確認することもできます。
上記のコードをコンパイルして実行すると、次の出力が表示されます。
文字列連結
- 2つ以上の文字列を連結するには、+演算子を使用して2つの文字列またはCString
- Append()メソッドを連結します。
上記のコードをコンパイルして実行すると、次の出力が表示されます。
ストリングの長さ
- 文字列の長さを調べるには、CStringオブジェクトの文字数を返すCString
- GetLength()メソッドを使用できます。
上記のコードをコンパイルして実行すると、次の出力が表示されます。
文字列比較
2つの文字列変数を比較するには、==演算子を使用できます
上記のコードをコンパイルして実行すると、次の出力が表示されます。
MFC-CArray
- 配列インデックスは常に位置0から始まります。
- 現在の境界を超えて要素を追加するときに、上限を修正するか、配列を展開できるようにするかを決定できます。 *一部の要素がnullであっても、メモリは上限に連続して割り当てられます。
____これはCArrayクラスのメソッドのリストです。
Sr.No. | Name & Description |
---|---|
1 |
配列の最後に要素を追加します。必要に応じて配列を拡大します。 |
2 |
Append 別の配列を配列に追加します。必要に応じて配列を拡大します |
3 |
Copy 別の配列を配列にコピーします。必要に応じて配列を拡大します。 |
4 |
ElementAt 配列内の要素ポインターへの一時的な参照を返します。 |
5 |
FreeExtra 現在の上限を超える未使用のメモリをすべて解放します。 |
6 |
GetAt 現在の上限を超える未使用のメモリをすべて解放します。 |
7 |
GetCount この配列内の要素の数を取得します。 |
8 |
GetData 配列内の要素へのアクセスを許可します。 NULL にすることができます。 |
9 |
GetSize この配列内の要素の数を取得します。 |
10 |
GetUpperBound 最大の有効なインデックスを返します。 |
11 |
InsertAt 指定されたインデックスに要素(または別の配列のすべての要素)を挿入します。 |
12 |
IsEmpty 配列が空かどうかを判別します。 |
13 |
RemoveAll この配列からすべての要素を削除します。 |
14 |
RemoveAt 特定のインデックスの要素を削除します。 |
15 |
SetAt 特定のインデックスの値を設定します。配列は拡大できません。 |
16 |
SetAtGrow 特定のインデックスの値を設定します。必要に応じて配列を拡大します。 |
17 |
SetSize この配列に含まれる要素の数を設定します。 |
以下は、CArrayオブジェクトのさまざまな操作です-
CArrayオブジェクトを作成
CArray値またはオブジェクトのコレクションを作成するには、まずコレクションの値のタイプを決定する必要があります。 int、CString、doubleなど、既存のプリミティブデータ型のいずれかを使用できます。 以下に示すように。
アイテムを追加
- アイテムを追加するには、CArray
- Add()関数を使用できます。 配列の最後にアイテムを追加します。 OnInitDialog()では、CArrayオブジェクトが作成され、次のコードに示すように3つの名前が追加されます。
アイテムを取得する
- アイテムを取得するには、CArray
- GetAt()関数を使用できます。 この関数は、配列のインデックスとして1つの整数パラメーターを取ります。
- ステップ1 *-すべての名前を取得する簡単な例を見てみましょう。
- *ステップ2 *-CMFCCArrayDlg
- OnInitDialog()の完全な実装です。
- ステップ3 *-上記のコードをコンパイルして実行すると、次の出力が表示されます。
中間にアイテムを追加
配列の中央にアイテムを追加するには、CArray ::。InsertAt()関数を使用できます。 これには2つのパラメータが必要です。1つ目はインデックスで、2つ目は値です。
次のコードに示すように、インデックス1に新しいアイテムを挿入しましょう。
上記のコードをコンパイルして実行すると、次の出力が表示されます。 これで、2番目のインデックスとしてAllan ddedという名前が表示されます。
アイテムの値を更新
配列の中央の項目を更新するには、CArray ::。SetAt()関数を使用できます。 これには2つのパラメータが必要です。1つ目はインデックスで、2つ目は値です。
次のコードに示すように、配列の3番目の要素を更新しましょう。
上記のコードをコンパイルして実行すると、次の出力が表示されます。 これで、3番目の要素の値が更新されていることがわかります。
配列をコピー
- 配列全体を別のCArrayオブジェクトにコピーするには、CArray
Copy()関数を使用できます。
これで、2 ^ nd ^配列から要素を取得したことがわかります。コピー関数を使用したため、出力は同じです。
アイテムを削除
- 特定の項目を削除するには、CArray
- RemoveAt()関数を使用できます。 リストからすべての要素を削除するには、CArray :: RemoveAll()関数を使用できます。
配列から2番目の要素を削除しましょう。
上記のコードをコンパイルして実行すると、次の出力が表示されます。 これで、Allanという名前が配列の一部ではなくなっていることがわかります。
MFC-リンクリスト
- リンクリスト*は、各要素が個別のオブジェクトである線形データ構造です。 リストの各要素(ノードと呼びます)は、データと次のノードへの参照という2つの項目で構成されます。 最後のノードにはnullへの参照があります。
リンクされたリストは、一緒にシーケンスを表すノードのグループで構成されるデータ構造です。 プログラマが必要なときにいつでもデータを保存するための新しい場所を自動的に作成できるように、データを構造とともに保存する方法です。 その顕著な特徴のいくつかは-
- リンクリストは、アイテムを含む一連のリンクです。
- 各リンクには、別のリンクへの接続が含まれています。
- リスト内の各アイテムはノードと呼ばれます。
- リストに少なくとも1つのノードが含まれている場合、新しいノードがリストの最後の要素として配置されます。
- リストにノードが1つしかない場合、そのノードは最初と最後のアイテムを表します。
リンクリストには2種類あります-
単一リンクリスト
単一リンクリストは、データ構造の一種です。 単一リンクリストでは、リスト内の各ノードに、ノードの内容とリスト内の次のノードへのポインターまたは参照が格納されます。
二重リンクリスト
二重リンクリストは、ノードと呼ばれる一連のリンクされたレコードで構成されるリンクされたデータ構造です。 各ノードには、ノードのシーケンス内の前のノードと次のノードへの参照である2つのフィールドが含まれています。
CListクラス
MFCは、テンプレートリンクリスト実装であり、完全に機能するクラス CList を提供します。 CListリストは、二重リンクリストのように動作します。 POSITION型の変数は、リストのキーです。 POSITION変数は、リストを順番にたどるイテレータとして、および場所を保持するブックマークとして使用できます。
____CListクラスのメソッドのリストです。
Sr.No. | Name & Description |
---|---|
1 |
AddHead 要素(または別のリストのすべての要素)をリストの先頭に追加します(新しい先頭を作成します)。 |
2 |
AddTail 要素(または別のリストのすべての要素)をリストの末尾に追加します(新しい末尾を作成します)。 |
3 |
Find ポインター値で指定された要素の位置を取得します。 |
4 |
FindIndex ゼロから始まるインデックスで指定された要素の位置を取得します。 |
5 |
GetAt 指定された位置にある要素を取得します。 |
6 |
GetCount リスト内の要素数を返します。 |
7 |
GetHead リストの先頭要素を返します(空にはできません)。 |
8 |
GetHeadPosition リストの先頭要素の位置を返します。 |
9 |
GetNext 反復する次の要素を取得します。 |
10 |
GetPrev 反復する前の要素を取得します。 |
11 |
GetSize リスト内の要素数を返します。 |
12 |
GetTail リストの末尾要素を返します(空にはできません)。 |
13 |
GetTailPosition リストの末尾要素の位置を返します。 |
14 |
InsertAfter 指定された位置の後に新しい要素を挿入します。 |
15 |
InsertBefore 指定された位置の前に新しい要素を挿入します。 |
16 |
IsEmpty 空のリスト条件(要素なし)をテストします。 |
17 |
RemoveAll このリストからすべての要素を削除します。 |
18 |
RemoveAt 位置で指定されたこのリストから要素を削除します。 |
19 |
RemoveHead リストの先頭から要素を削除します。 |
20 |
RemoveTail リストの末尾から要素を削除します。 |
21 |
SetAt 指定された位置に要素を設定します。 |
以下は、CListオブジェクトのさまざまな操作です-
CListオブジェクトを作成
CList値またはオブジェクトのコレクションを作成するには、最初にコレクションの値のタイプを決定する必要があります。 int、CString、doubleなど、既存のプリミティブデータ型のいずれかを使用できます。 以下のコードで以下に示すように。
アイテムを追加
- アイテムを追加するには、CList
- AddTail()関数を使用できます。 リストの最後にアイテムを追加します。 リストの先頭に要素を追加するには、CList :: AddHead()関数を使用できます。 OnInitDialog()CListで、次のコードに示すように、オブジェクトが作成され、4つの値が追加されます。
アイテムを取得する
POSITION型の変数は、リストのキーです。 POSITION変数を反復子として使用して、リストを順番に走査できます。
- ステップ1 *-リストから要素を取得するには、すべての値を取得する次のコードを使用できます。
- *ステップ2 *-完全なCMFCCListDemoDlg
- OnInitDialog()関数です。
- ステップ3 *-上記のコードをコンパイルして実行すると、次の出力が表示されます。
中間にアイテムを追加
リストの中央にアイテムを追加するには、CList ::。InsertAfter()およびCList ::。InsertBefore()関数を使用できます。 2つのパラメーターが必要です。1つ目は位置(追加できる場所)、2つ目は値です。
- ステップ1 *-次のコードに示すように、新しいアイテムを挿入しましょう。
- ステップ2 *-最初に値85.26の位置を取得し、その値の前に1つの要素を挿入し、その値の後に1つの要素を挿入したことがわかります。
- ステップ3 *-上記のコードをコンパイルして実行すると、次の出力が表示されます。
アイテムの値を更新
配列の中央にあるアイテムを更新するには、CArray ::。SetAt()関数を使用できます。 これには2つのパラメーターが必要です。1つ目は位置、2つ目は値です。
次のコードに示すように、リスト内の300.00を400に更新します。
上記のコードをコンパイルして実行すると、次の出力が表示されます。 300.00の値が400.00に更新されていることがわかります。
アイテムを削除
- 特定のアイテムを削除するには、CList
- RemoveAt()関数を使用できます。 リストからすべての要素を削除するには、CList :: RemoveAll()関数を使用できます。
値として95.78を持つ要素を削除しましょう。
上記のコードをコンパイルして実行すると、次の出力が表示されます。 これで、95.78の値がリストの一部ではなくなっていることがわかります。
MFC-データベースクラス
- データベース*は、簡単にアクセス、管理、および更新できるように編成された情報のコレクションです。 ODBCに基づくMFCデータベースクラスは、ODBCドライバーが利用可能なデータベースへのアクセスを提供するように設計されています。 クラスはODBCを使用するため、アプリケーションは多くの異なるデータ形式および異なるローカル/リモート構成のデータにアクセスできます。
異なるデータベース管理システム(DBMS)を処理するために特別なケースのコードを記述する必要はありません。 ユーザーがアクセスしたいデータに適したODBCドライバーを持っている限り、ユーザーはプログラムを使用してそこに保存されているテーブルのデータを操作できます。 データソースは、データベース管理システム(DBMS)によってホストされるデータの特定のインスタンスです。 例には、Microsoft SQL Server、Microsoft Accessなどが含まれます。
CDatabase
MFCは、データソースへの接続を表すクラス CDatabase を提供します。これを使用して、データソースを操作できます。 アプリケーションで一度に1つ以上のCDatabaseオブジェクトをアクティブにすることができます。
____CDatabaseクラスのメソッドのリストです。
Sr.No. | Name & Description |
---|---|
1 |
BeginTrans 接続されたデータソースで、クラス CRecordset のAddNew、Edit、Delete、およびUpdateメンバー関数の一連の可逆呼び出しである「トランザクション」を開始します。 データソースは、 BeginTrans が効果を発揮するためのトランザクションをサポートする必要があります。 |
2 |
BindParameters
|
3 |
Cancel 非同期操作または2番目のスレッドからのプロセスをキャンセルします。 |
4 |
CanTransact データソースがトランザクションをサポートする場合、ゼロ以外を返します。 |
5 |
CanUpdate
|
6 |
Close データソース接続を閉じます。 |
7 |
CommitTrans BeginTransによって開始されたトランザクションを完了します。 データソースを変更するトランザクション内のコマンドが実行されます。 |
8 |
ExecuteSQL SQLステートメントを実行します。 データレコードは返されません。 |
9 |
GetBookmarkPersistence レコードセットオブジェクトでブックマークが保持される操作を識別します。 |
10 |
GetConnect CDatabaseオブジェクトをデータソースに接続するために使用されるODBC接続文字列を返します。 |
11 |
GetCursorCommitBehavior 開いているレコードセットオブジェクトでトランザクションをコミットする効果を識別します。 |
12 |
GetCursorRollbackBehavior 開いているレコードセットオブジェクトでトランザクションをロールバックする効果を識別します。 |
13 |
GetDatabaseName 現在使用中のデータベースの名前を返します。 |
14 |
IsOpen
|
15 |
OnSetOptions フレームワークによって呼び出され、標準の接続オプションを設定します。 デフォルトの実装では、クエリのタイムアウト値が設定されます。 SetQueryTimeout を呼び出すことにより、これらのオプションを事前に確立できます。 |
16 |
Open (ODBCドライバーを介して)データソースへの接続を確立します。 |
17 |
OpenEx (ODBCドライバーを介して)データソースへの接続を確立します。 |
18 |
Rollback 現在のトランザクション中に行われた変更を取り消します。 データソースは、BeginTrans呼び出しで定義された変更されていない前の状態に戻ります。 |
19 |
SetLoginTimeout データソース接続の試行がタイムアウトになるまでの秒数を設定します。 |
20 |
SetQueryTimeout データベースクエリ操作がタイムアウトするまでの秒数を設定します。 後続のすべてのレコードセットのOpen、AddNew、Edit、およびDelete呼び出しに影響します。 |
新しいMFCダイアログベースのアプリケーションを作成して、簡単な例を見てみましょう。
- ステップ1 *-TODO行のキャプションを*データベースからデータを取得*に変更し、次のスナップショットに示すように1つのボタンと1つのリストコントロールをドラッグします。
- ステップ2 *-ボタンのクリックイベントハンドラーとリストコントロールの変数m_ListControlを追加します。
- ステップ3 *-次のスナップショットに示すように、いくつかのレコードを持つ1つのEmployeesテーブルを含む単純なデータベースがあります。
- ステップ4 *-CDatabaseクラスを使用できるように、次のヘッダーファイルを含める必要があります。
クエリを挿入
SQL INSERT INTOステートメントは、データベースのテーブルに新しいデータ行を追加するために使用されます。
- ステップ1 *-新しいレコードを追加するには、次のコードに示すように、CDatabaseクラスのExecuteSQL()関数を使用します。
- ステップ2 *-上記のコードをコンパイルして実行すると、データベースに新しいレコードが追加されていることがわかります。
レコードを取得
MFCアプリケーションで上記のテーブルを取得するには、次の手順に示すように、ボタンイベントハンドラーでデータベース関連の操作を実装します。
- ステップ1 *-CDatabaseを使用するには、CDatabaseオブジェクトを作成し、そのOpen()関数を呼び出します。 これにより、接続が開きます。
- ステップ2 *-接続されたデータソースで操作するためのCRecordsetオブジェクトを構築し、レコードセットコンストラクターにCDatabaseオブジェクトへのポインターを渡します。
- ステップ3 *-接続の使用後、Close関数を呼び出してCDatabaseオブジェクトを破棄します。
- ステップ4 *-これがヘッダーファイルです。
- ステップ5 *-上記のコードをコンパイルして実行すると、次の出力が表示されます。
- ステップ6 *-読み取りボタンを押して、データベース操作を実行します。 Employeesテーブルを取得します。
レコードを更新
SQL UPDATEクエリは、テーブル内の既存のレコードを変更するために使用されます。 UPDATEクエリでWHERE句を使用して、選択した行を更新できます。更新しないと、すべての行が影響を受けます。
- ステップ1 *-IDが5であるAgeを更新して、簡単な例を見てみましょう。
- ステップ2 *-ボタンクリックイベントの完全なコードです。
- ステップ3 *-上記のコードをコンパイルして実行すると、次の出力が表示されます。
- ステップ4 *-読み取りボタンを押して、データベース操作を実行します。 次のEmployeesテーブルを取得します。
- ステップ5 *-年齢が69から59に更新されていることがわかります。
レコードを削除
SQL DELETEクエリは、テーブルから既存のレコードを削除するために使用されます。 DELETEクエリでWHERE句を使用して、選択した行を削除できます。そうしないと、すべてのレコードが削除されます。
- ステップ1 *-IDが3であるレコードを削除して、簡単な例を見てみましょう。
- ステップ2 *-ボタンクリックイベントの完全なコードです。
- ステップ3 *-上記のコードをコンパイルして実行すると、次の出力が表示されます。
- ステップ4 *-読み取りボタンを押して、データベース操作を実行します。 Employeesテーブルを取得します。
MFC-シリアル化
- シリアル化*は、ディスクファイルなどの永続的なストレージメディアとの間でオブジェクトを読み書きするプロセスです。 シリアル化は、プログラムの実行中または実行後に構造化データ(C ++クラスや構造など)の状態を維持することが望ましい状況に最適です。
ファイル処理を実行する場合、値は通常、プリミティブ型(char、short、int、float、またはdouble)です。 同様に、一度に1つずつ、多くの値を個別に保存できます。 この手法には、クラスから(変数として)作成されたオブジェクトは含まれません。
MFCライブラリは、シリアル化を高度にサポートしています。 これは、Serialize()メンバー関数を備えたほとんどのMFCクラスの祖先であるCObjectクラスで始まります。
新しいMFCプロジェクトを作成して、簡単な例を見てみましょう。
- ステップ1 *-TODO行を削除し、次のスナップショットに示すようにダイアログボックスを設計します。
- ステップ2 *-すべての編集コントロールの値変数を追加します。 前述のEmp IDとAgeの場合、値の型は次のスナップショットに示すように整数です。
- ステップ3 *-両方のボタンにイベントハンドラーを追加します。
- ステップ4 *-シリアル化する必要がある単純なEmployeeクラスを追加しましょう。 ヘッダーファイルのEmployeeクラスの宣言は次のとおりです。
ステップ5 *-ソース( .cpp)ファイルのEmployeeクラスの定義です。
- ステップ6 *-保存ボタンイベントハンドラーの実装です。
- ステップ7 *-Openボタンイベントハンドラーの実装です。
- ステップ8 *-上記のコードをコンパイルして実行すると、次の出力が表示されます。
- ステップ9 *-すべてのフィールドに情報を入力し、[保存]をクリックしてこのプログラムを閉じます。
- ステップ10 *-データを保存します。 アプリケーションを再度実行し、開くをクリックします。 従業員情報をロードします。
MFC-マルチスレッド
Microsoft Foundation Class(MFC)ライブラリは、マルチスレッドアプリケーションのサポートを提供します。 スレッドは、プロセス内の実行のパスです。 メモ帳を起動すると、オペレーティングシステムによってプロセスが作成され、そのプロセスのプライマリスレッドの実行が開始されます。 このスレッドが終了すると、プロセスも終了します。
必要に応じて、アプリケーションに追加のスレッドを作成できます。 MFCアプリケーションのすべてのスレッドは、CWinThreadオブジェクトによって表されます。 ほとんどの場合、これらのオブジェクトを明示的に作成する必要はありません。代わりに、フレームワークヘルパー関数AfxBeginThreadを呼び出して、CWinThreadオブジェクトを作成します。
新しいMFCダイアログベースのアプリケーションを作成して、簡単な例を見てみましょう。
ステップ1 *-静的コントロールのキャプションとIDをそれぞれ[スレッドの開始]ボタン*と *IDC_STATIC_TEXT に変更します。
- ステップ2 *-2つのボタンをドラッグし、これらのボタンのクリックイベントハンドラーを追加します。
- ステップ3 *-静的テキストコントロールのコントロール変数を追加します。
- ステップ4 *-CMFCMultithreadingDlg.cppファイルの先頭に次の3つのグローバル変数を追加します。
- ステップ5 *-CMFCMultithreadingDlgクラスにWM_TIMERメッセージを追加します。
OnTimer()の実装は次のとおりです
- ステップ6 *-CMFCMultithreadingDlgクラスのAfxBeginThreadで使用するサンプル関数を追加します。
- ステップ7 *-スレッドを開始する[スレッドの開始]ボタンのイベントハンドラーの実装です。
- ステップ8 *-スレッドを停止する[スレッドの停止]ボタンのイベントハンドラーの実装です。
- ステップ9 *-完全なソースファイルです。
- ステップ10 *-上記のコードをコンパイルして実行すると、次の出力が表示されます。
- ステップ11 *-[スレッドの開始]ボタンをクリックします。
- ステップ12 *-[スレッドの停止]ボタンをクリックします。 スレッドを停止します。
MFC-インターネットプログラミング
Microsoftは、クライアントアプリケーションとサーバーアプリケーションの両方をプログラミングするための多くのAPIを提供しています。 多くの新しいアプリケーションがインターネット用に作成されており、テクノロジ、ブラウザ機能、およびセキュリティオプションが変更されると、新しい種類のアプリケーションが作成されます。 カスタムアプリケーションは、インターネットで情報を取得してデータを提供できます。
MFCは、Windows Socketsでネットワーク通信プログラムを作成するためのクラス CSocket を提供します。
以下は、CSocketクラスのメソッドのリストです。
Sr.No. | Name & Description |
---|---|
1 |
Attach SOCKETハンドルをCSocketオブジェクトにアタッチします。 |
2 |
CancelBlockingCall 現在進行中のブロッキングコールをキャンセルします。 |
3 |
Create ソケットを作成します。 |
4 |
FromHandle SOCKETハンドルを指定すると、CSocketオブジェクトへのポインターを返します。 |
5 |
IsBlocking ブロッキングコールが進行中かどうかを判別します。 |
MFS SDIアプリケーションを作成して、簡単な例を見てみましょう。
- ステップ1 *-名前フィールドにMFCServerを入力し、[OK]をクリックします。
- ステップ2 *-[高度な機能]タブで、Windowsソケットオプションを確認します。
- ステップ3 *-プロジェクトが作成されたら、新しいMFCクラスCServerSocketを追加します。
- ステップ4 *-ベースクラスとしてCSocketを選択し、[完了]をクリックします。
- ステップ5 *-MFCクラスCReceivingSocketを追加します。
- ステップ6 *-CRecevingSocketはクライアントから着信メッセージを受信します。
CMFCServerAppでは、ヘッダーファイルには次のファイルが含まれています-
- ステップ7 *-CMFCServerAppクラスに次の2つのクラス変数を追加します。
- *ステップ8 *-CMFCServerApp
- InitInstance()メソッドで、ソケットを作成してポートを指定し、次に示すようにListenメソッドを呼び出します。
- ステップ9 *-CMFCServerViewヘッダーファイルに次のヘッダーファイルを含めます。
- ステップ10 *-SocketクラスのOnAccept関数をオーバーライドします。
- ステップ11 *-クラスビューでCServerSocketを選択し、[プロパティ]ウィンドウで強調表示されたアイコンを選択します。 次に、OnAcceptを追加します。 OnAccept関数の実装は次のとおりです。
- ステップ12 *-OnReceive()関数を追加します。
- ステップ13 *-CReceivingSocketクラスにOnReceive()関数を追加します。
ソリューションエクスプローラーでCMFCServerViewクラスを右クリックし、[追加]→[関数の追加]を選択します。
- ステップ14 *-上記の情報を入力し、完了をクリックします。
- ステップ15 *-CMFCServerViewヘッダーファイルに次のCStringArray変数を追加します。
- ステップ16 *-AddMsg()関数の実装です。
- ステップ17 *-次のコードに示すようにコンストラクタを更新します。
- ステップ18 *-メッセージを表示するOnDraw()関数の実装です。
- ステップ19 *-サーバー側はこれで完了です。 クライアントからメッセージを受信します。
クライアント側アプリケーションを作成する
- ステップ1 *-クライアント側アプリケーション用の新しいMFCダイアログベースのアプリケーションを作成しましょう。
- ステップ2 *-[高度な機能]タブで、上記のようにWindowsソケットオプションをチェックします。
- ステップ3 *-プロジェクトが作成されたら、次のスナップショットに示すようにダイアログボックスを設計します。
- ステップ4 *-[接続]ボタンと[送信]ボタンのイベントハンドラーを追加します。
- ステップ5 *-3つの編集コントロールすべてに値変数を追加します。 ポート編集制御の場合、変数タイプUINTを選択します。
- ステップ6 *-メッセージを接続および送信するためのMFCクラスを追加します。
- ステップ7 *-CClientSocketクラスのヘッダーファイルをヘッダーファイルCMFCClientDemoAppクラスに含め、クラス変数を追加します。 同様に、CMFCClientDemoDlgヘッダーファイルにもクラス変数を追加します。
- ステップ8 *-接続ボタンイベントハンドラーの実装です。
- ステップ9 *-送信ボタンイベントハンドラーの実装です。
- ステップ10 *-最初にサーバーアプリケーションを実行し、次にクライアントアプリケーションを実行します。 ローカルホストのIPとポートを入力し、[接続]をクリックします。
- ステップ11 *-次のスナップショットに示すように、サーバー側にメッセージが表示されます。
MFC-GDI
Windowsは、デバイスコンテキストで使用するさまざまな描画ツールを提供します。 線を描くペン、内部を塗りつぶすブラシ、テキストを描くフォントを提供します。 MFCは、Windowsの描画ツールに相当するグラフィックオブジェクトクラスを提供します。
図
デバイスコンテキストは、ディスプレイやプリンターなどのデバイスの描画属性に関する情報を含むWindowsデータ構造です。 すべての描画呼び出しは、デバイスコンテキストオブジェクトを介して行われます。このオブジェクトは、線、図形、およびテキストを描画するためのWindows APIをカプセル化します。
デバイスコンテキストにより、Windowsでデバイスに依存しない描画が可能になります。 デバイスコンテキストを使用して、画面、プリンター、またはメタファイルに描画できます。
以下にCDCクラスのメソッドのリストを示します。
Sr. No. | Name & Description |
---|---|
1 |
AbortDoc 現在の印刷ジョブを終了し、 StartDoc メンバー関数の最後の呼び出し以降にアプリケーションがデバイスに書き込んだものをすべて消去します。 |
2 |
AbortPath デバイスコンテキスト内のすべてのパスを閉じて破棄します。 |
3 |
AddMetaFileComment コメントをバッファから指定された拡張形式のメタファイルにコピーします。 |
4 |
AlphaBlend 透明または半透明のピクセルを持つビットマップを表示します。 |
5 |
AngleArc 線分と円弧を描画し、現在の位置を円弧の終点に移動します。 |
6 |
Arc 楕円弧を描きます。 |
7 |
ArcTo 楕円弧を描きます。 この関数はArcに似ていますが、現在の位置が更新される点が異なります。 |
8 |
Attach このCDCオブジェクトにWindowsデバイスコンテキストをアタッチします。 |
9 |
BeginPath デバイスコンテキストでパスブラケットを開きます。 |
10 |
BitBlt 指定されたデバイスコンテキストからビットマップをコピーします。 |
11 |
Chord コード(楕円と線分が交差する閉じた図形)を描画します。 |
12 |
CloseFigure パス内の開いている図形を閉じます。 |
13 |
CreateCompatibleDC 別のデバイスコンテキストと互換性のあるメモリデバイスコンテキストを作成します。 メモリ内の画像を準備するために使用できます。 |
14 |
CreateDC 特定のデバイスのデバイスコンテキストを作成します。 |
15 |
CreateIC 特定のデバイスの情報コンテキストを作成します。 これにより、デバイスコンテキストを作成せずに、デバイスに関する情報をすばやく取得できます。 |
16 |
DeleteDC このCDCオブジェクトに関連付けられているWindowsデバイスコンテキストを削除します。 |
17 |
DeleteTempMap FromHandleによって作成された一時CDCオブジェクトを削除するために、 CWinApp アイドル時間ハンドラーによって呼び出されます。 また、デバイスコンテキストをデタッチします。 |
18 |
Detach このCDCオブジェクトからWindowsデバイスコンテキストをデタッチします。 |
19 |
DPtoHIMETRIC デバイス単位を HIMETRIC 単位に変換します。 |
20 |
DPtoLP デバイスユニットを論理ユニットに変換します。 |
21 |
Draw3dRect 3次元の長方形を描画します。 |
22 |
DrawDragRect ドラッグされた長方形を消去して再描画します。 |
23 |
DrawEdge 長方形のエッジを描画します。 |
24 |
DrawEscape グラフィックデバイスインターフェイス(GDI)を介して直接利用できないビデオディスプレイの描画機能にアクセスします。 |
25 |
DrawFocusRect フォーカスを示すために使用されるスタイルで長方形を描画します。 |
26 |
DrawFrameControl フレームコントロールを描画します。 |
27 |
DrawIcon アイコンを描画します。 |
28 |
DrawState 画像を表示し、視覚効果を適用して状態を示します。 |
29 |
DrawText 指定された長方形にフォーマットされたテキストを描画します。 |
30 |
DrawTextEx 追加のフォーマットを使用して、指定された長方形にフォーマットされたテキストを描画します。 |
31 |
Ellipse 楕円を描画します。 |
32 |
EndDoc StartDocメンバー関数によって開始された印刷ジョブを終了します。 |
33 |
EndPage ページが終了することをデバイスドライバーに通知します。 |
34 |
EndPath パスブラケットを閉じ、デバイスコンテキストへのブラケットで定義されたパスを選択します。 |
35 |
EnumObjects デバイスコンテキストで使用可能なペンとブラシを列挙します。 |
36 |
Escape GDIを介して特定のデバイスから直接利用できない機能にアプリケーションがアクセスできるようにします。 Windowsエスケープ関数へのアクセスも許可します。 アプリケーションによって行われたエスケープ呼び出しは変換され、デバイスドライバーに送信されます。 |
37 |
ExcludeClipRect 既存のクリッピング領域から指定された長方形を引いたもので構成される新しいクリッピング領域を作成します。 |
38 |
ExcludeUpdateRgn ウィンドウ内の更新された領域をクリッピング領域から除外することにより、ウィンドウの無効な領域内に描画されないようにします。 |
39 |
ExtFloodFill 現在のブラシで領域を塗りつぶします。 FloodFill メンバー関数よりも柔軟性があります。 |
40 |
ExtTextOut 現在選択されているフォントを使用して、長方形の領域内に文字列を書き込みます。 |
41 |
FillPath 現在のパスで開いている図形を閉じ、現在のブラシとポリゴン塗りつぶしモードを使用してパスの内部を塗りつぶします。 |
42 |
FillRect 特定のブラシを使用して、指定された長方形を塗りつぶします。 |
43 |
FillRgn 指定したブラシで特定の領域を塗りつぶします。 |
44 |
FillSolidRect 長方形を単色で塗りつぶします。 |
45 |
FlattenPath 選択したパス内の曲線を現在のデバイスコンテキストに変換し、各曲線を一連の線に変換します。 |
46 |
FloodFill 現在のブラシで領域を塗りつぶします。 |
47 |
FrameRect 四角形の周囲に境界線を描画します。 |
48 |
FrameRgn ブラシを使用して特定の領域の周りに境界線を描画します。 |
49 |
FromHandle デバイスコンテキストへのハンドルを指定すると、CDCオブジェクトへのポインターを返します。 CDCオブジェクトがハンドルにアタッチされていない場合、一時CDCオブジェクトが作成されてアタッチされます。 |
50 |
GetArcDirection デバイスコンテキストの現在の弧の方向を返します。 |
51 |
GetAspectRatioFilter 現在のアスペクト比フィルターの設定を取得します。 |
52 |
GetBkColor 現在の背景色を取得します。 |
53 |
GetBkMode バックグラウンドモードを取得します。 |
54 |
GetBoundsRect 指定されたデバイスコンテキストの現在の累積された境界四角形を返します。 |
55 |
GetBrushOrg 現在のブラシの原点を取得します。 |
56 |
GetCharABCWidths 現在のフォントから指定された範囲内の連続した文字の幅を論理単位で取得します。 |
57 |
GetCharABCWidthsI 現在のTrueTypeフォントから指定された範囲内の連続するグリフインデックスの幅を論理単位で取得します。 |
58 |
GetCharacterPlacement 文字列に関するさまざまなタイプの情報を取得します。 |
59 |
GetCharWidth 現在のフォントから指定された範囲内の連続する文字の小数幅を取得します。 |
60 |
GetCharWidthI 現在のフォントから指定範囲内の連続するグリフインデックスの幅を論理座標で取得します。 |
61 |
GetClipBox 現在のクリッピング境界の周囲の最も狭い境界矩形の寸法を取得します。 |
62 |
GetColorAdjustment デバイスコンテキストの色調整値を取得します。 |
63 |
GetCurrentBitmap 現在選択されている CBitmap オブジェクトへのポインターを返します。 |
64 |
GetCurrentBrush 現在選択されている CBrush オブジェクトへのポインターを返します。 |
65 |
GetCurrentFont 現在選択されている CFont オブジェクトへのポインターを返します。 |
66 |
GetCurrentPalette 現在選択されている CPalette オブジェクトへのポインターを返します。 |
48 |
GetCurrentPen 現在選択されている CPen オブジェクトへのポインターを返します。 |
67 |
GetCurrentPosition ペンの現在の位置を(論理座標で)取得します。 |
68 |
GetDCBrushColor 現在のブラシの色を取得します。 |
69 |
GetDCPenColor 現在のペンの色を取得します。 |
70 |
GetDeviceCaps 特定のディスプレイデバイスの機能に関するデバイス固有の指定された種類の情報を取得します。 |
71 |
GetFontData スケーラブルフォントファイルからフォントメトリック情報を取得します。 取得する情報は、フォントファイルへのオフセットと返す情報の長さを指定することによって識別されます。 |
72 |
GetFontLanguageInfo 指定された表示コンテキストで現在選択されているフォントに関する情報を返します。 |
73 |
GetGlyphOutline 現在のフォントのアウトライン文字のアウトライン曲線またはビットマップを取得します。 |
74 |
GetGraphicsMode 指定されたデバイスコンテキストの現在のグラフィックモードを取得します。 |
75 |
GetHalftoneBrush ハーフトーンブラシを取得します。 |
76 |
GetKerningPairs 指定されたデバイスコンテキストで現在選択されているフォントの文字カーニングペアを取得します。 |
77 |
GetLayout デバイスコンテキスト(DC)のレイアウトを取得します。 レイアウトは、左から右(デフォルト)または右から左(ミラー)のいずれかです。 |
78 |
GetMapMode 現在のマッピングモードを取得します。 |
79 |
GetMiterLimit デバイスコンテキストのマイター制限を返します。 |
80 |
GetNearestColor 指定したデバイスが表すことができる指定した論理色に最も近い論理色を取得します。 |
81 |
GetOutlineTextMetrics TrueTypeフォントのフォントメトリック情報を取得します。 |
82 |
GetOutputCharWidth 出力デバイスコンテキストを使用して、現在のフォントから連続した文字グループの個々の文字の幅を取得します。 |
83 |
GetOutputTabbedTextExtent 出力デバイスコンテキストの文字列の幅と高さを計算します。 |
84 |
GetOutputTextExtent 現在のフォントを使用して寸法を決定し、出力デバイスコンテキストのテキスト行の幅と高さを計算します。 |
85 |
GetOutputTextMetrics 出力デバイスコンテキストから現在のフォントのメトリックを取得します。 |
86 |
GetPath デバイスコンテキストに選択されたパスで見つかった線の終点と曲線の制御点を定義する座標を取得します。 |
87 |
GetPixel 指定されたポイントのピクセルのRGBカラー値を取得します。 |
88 |
GetPolyFillMode 現在のポリゴン塗りつぶしモードを取得します。 |
89 |
GetROP2 現在の描画モードを取得します。 |
90 |
GetSafeHdc 出力デバイスコンテキストである m_hDC を返します。 |
91 |
GetStretchBltMode 現在のビットマップストレッチモードを取得します。 |
92 |
GetTabbedTextExtent 属性デバイスコンテキストの文字列の幅と高さを計算します。 |
93 |
GetTextAlign テキスト配置フラグを取得します。 |
94 |
GetTextCharacterExtra 文字間スペースの量の現在の設定を取得します。 |
95 |
GetTextColor 現在のテキストの色を取得します。 |
96 |
GetTextExtent 現在のフォントを使用して寸法を決定する属性デバイスコンテキスト上のテキスト行の幅と高さを計算します。 |
97 |
GetTextExtentExPointI 指定されたスペースに収まる指定された文字列の文字数を取得し、それらの各文字のテキスト範囲で配列を埋めます。 |
98 |
GetTextExtentPointI グリフインデックスの指定された配列の幅と高さを取得します。 |
99 |
GetTextFace 現在のフォントの書体名をヌル終了文字列としてバッファにコピーします。 |
100 |
GetTextMetrics 属性デバイスコンテキストから現在のフォントのメトリックを取得します。 |
101 |
GetViewportExt ビューポートのx範囲とy範囲を取得します。 |
102 |
GetViewportOrg ビューポートの原点のx座標とy座標を取得します。 |
103 |
GetWindow ディスプレイデバイスコンテキストに関連付けられたウィンドウを返します。 |
104 |
GetWindowExt 関連付けられたウィンドウのx範囲とy範囲を取得します。 |
105 |
GetWindowOrg 関連付けられたウィンドウの原点のx座標とy座標を取得します。 |
106 |
GetWorldTransform 現在のワールド空間からページ空間への変換を取得します。 |
107 |
GradientFill 長方形と三角形の構造をグラデーションの色で塗りつぶします。 |
108 |
GrayString 指定された場所に淡色表示(グレー表示)されたテキストを描画します。 |
109 |
HIMETRICtoDP HIMETRICユニットをデバイスユニットに変換します。 |
110 |
HIMETRICtoLP HIMETRIC単位を論理単位に変換します。 |
111 |
IntersectClipRect 現在の領域と長方形の交点を形成することにより、新しいクリッピング領域を作成します。 |
112 |
InvertRect 長方形の内容を反転します。 |
113 |
InvertRgn 領域の色を反転します。 |
114 |
IsPrinting デバイスコンテキストが印刷に使用されているかどうかを判断します。 |
115 |
LineTo 現在位置からポイントまで(ただし、ポイントは含まない)に線を描画します。 |
116 |
LPtoDP 論理ユニットをデバイスユニットに変換します。 |
117 |
LPtoHIMETRIC 論理ユニットをHIMETRICユニットに変換します。 |
118 |
MaskBlt 指定されたマスクおよびラスター操作を使用して、ソースビットマップとターゲットビットマップのカラーデータを組み合わせます。 |
119 |
ModifyWorldTransform 指定されたモードを使用して、デバイスコンテキストのワールド変換を変更します。 |
120 |
MoveTo 現在の位置を移動します。 |
121 |
OffsetClipRgn 指定されたデバイスのクリッピング領域を移動します。 |
122 |
OffsetViewportOrg 現在のビューポートの原点の座標を基準にしてビューポートの原点を変更します。 |
123 |
OffsetWindowOrg 現在のウィンドウの原点の座標を基準にしてウィンドウの原点を変更します。 |
124 |
PaintRgn 選択したブラシで領域を塗りつぶします。 |
125 |
PatBlt ビットパターンを作成します。 |
126 |
Pie パイ型のくさびを描画します。 |
127 |
PlayMetaFile 指定されたデバイスで指定されたメタファイルの内容を再生します。 PlayMetaFileの拡張バージョンは、指定された拡張形式のメタファイルに保存されている画像を表示します。 メタファイルは何度でも再生できます。 |
128 |
PlgBlt ソースデバイスコンテキストの指定された四角形から、指定されたデバイスコンテキストの指定された平行四辺形への色データのビットのビットブロック転送を実行します。 |
129 |
PolyBezier 1つ以上のBzierスプラインを描画します。 現在の位置は使用も更新もされません。 |
130 |
PolyBezierTo 1つ以上のBzierスプラインを描画し、現在の位置を最後のBzierスプラインの終点に移動します。 |
131 |
PolyDraw 一連の線分とベジェスプラインを描画します。 この関数は現在の位置を更新します。 |
132 |
Polygon 線で接続された2つ以上のポイント(頂点)で構成されるポリゴンを描画します。 |
133 |
Polyline 指定されたポイントを結ぶ線分セットを描画します。 |
134 |
PolylineTo 1つ以上の直線を描画し、現在の位置を最後の線の終点に移動します。 |
135 |
PolyPolygon 現在のポリゴン塗りつぶしモードを使用して塗りつぶされる2つ以上のポリゴンを作成します。 ポリゴンはばらばらであるか、重なっている場合があります。 |
136 |
PolyPolyline 接続された線セグメントの複数のシリーズを描画します。 現在の位置は、この関数では使用も更新もされません。 |
137 |
PtVisible 指定されたポイントがクリッピング領域内にあるかどうかを指定します。 |
138 |
RealizePalette 現在の論理パレットのパレットエントリをシステムパレットにマップします。 |
139 |
Rectangle 現在のペンを使用して四角形を描画し、現在のブラシを使用して四角形を塗りつぶします。 |
140 |
RectVisible 指定された長方形の一部がクリッピング領域内にあるかどうかを決定します。 |
141 |
ReleaseAttribDC 属性デバイスコンテキスト m_hAttribDC をリリースします。 |
142 |
ReleaseOutputDC 出力デバイスコンテキストである m_hDC をリリースします。 |
143 |
ResetDC** m_hAttribDCデバイスコンテキストを更新します。 |
144 |
RestoreDC
|
145 |
RoundRect 現在のペンを使用して角を丸め、現在のブラシを使用して塗りつぶした長方形を描画します。 |
146 |
SaveDC デバイスコンテキストの現在の状態を保存します。 |
147 |
ScaleViewportExt 現在の値を基準にしてビューポート範囲を変更します。 |
148 |
ScaleWindowExt 現在の値に関連してウィンドウの範囲を変更します。 |
149 |
ScrollDC ビットの長方形を水平および垂直にスクロールします。 |
150 |
SelectClipPath 現在のパスをデバイスコンテキストのクリッピング領域として選択し、指定されたモードを使用して新しい領域を既存のクリッピング領域と組み合わせます。 |
151 |
SelectClipRgn 指定されたモードを使用して、指定された領域を現在のクリッピング領域と結合します。 |
152 |
SelectObject ペンなどのGDI描画オブジェクトを選択します。 |
153 |
SelectPalette 論理パレットを選択します。 |
154 |
SelectStockObject Windowsが提供する定義済みのストックペン、ブラシ、またはフォントのいずれかを選択します。 |
155 |
SetAbortProc 印刷ジョブを中止する必要がある場合にWindowsが呼び出すプログラマー提供のコールバック関数を設定します。 |
156 |
SetArcDirection 円弧および長方形の機能に使用される描画方向を設定します。 |
157 |
SetAttribDC 属性デバイスコンテキストであるm_hAttribDCを設定します。 |
158 |
SetBkColor 現在の背景色を設定します。 |
159 |
SetBkMode バックグラウンドモードを設定します。 |
160 |
SetBoundsRect 指定されたデバイスコンテキストの境界矩形情報の蓄積を制御します。 |
161 |
SetBrushOrg デバイスコンテキストに選択された次のブラシの原点を指定します。 |
162 |
SetColorAdjustment 指定した値を使用して、デバイスコンテキストの色調整値を設定します。 |
163 |
SetDCBrushColor 現在のブラシの色を設定します。 |
164 |
SetDCPenColor 現在のペンの色を設定します。 |
165 |
SetGraphicsMode 指定したデバイスコンテキストの現在のグラフィックモードを設定します。 |
166 |
SetLayout デバイスコンテキスト(DC)のレイアウトを変更します。 |
167 |
SetMapMode 現在のマッピングモードを設定します。 |
168 |
SetMapperFlags フォントマッパーが論理フォントを物理フォントにマップするときに使用するアルゴリズムを変更します。 |
169 |
SetMiterLimit デバイスコンテキストのマイター結合の長さの制限を設定します。 |
170 |
SetOutputDC 出力デバイスコンテキストであるm_hDCを設定します。 |
171 |
SetPixel 指定されたポイントのピクセルを、指定された色の最も近い近似値に設定します。 |
172 |
SetPixelV 指定した座標のピクセルを、指定した色の最も近い近似値に設定します。 SetPixelV は SetPixel よりも高速です。これは、実際にペイントされたポイントのカラー値を返す必要がないためです。 |
173 |
SetPolyFillMode ポリゴン塗りつぶしモードを設定します。 |
175 |
SetROP2 現在の描画モードを設定します。 |
176 |
SetStretchBltMode ビットマップストレッチモードを設定します。 |
177 |
SetTextAlign テキスト配置フラグを設定します。 |
178 |
SetTextCharacterExtra 文字間スペースの量を設定します。 |
179 |
SetTextColor テキストの色を設定します。 |
180 |
SetTextJustification 文字列の区切り文字にスペースを追加します。 |
181 |
SetViewportExt ビューポートのx範囲とy範囲を設定します。 |
182 |
SetViewportOrg ビューポートの原点を設定します。 |
183 |
SetWindowExt 関連付けられたウィンドウのx範囲とy範囲を設定します。 |
184 |
SetWindowOrg デバイスコンテキストのウィンドウの原点を設定します。 |
185 |
SetWorldTransform 現在のワールド空間からページ空間への変換を設定します。 |
186 |
StartDoc 新しい印刷ジョブが開始されていることをデバイスドライバーに通知します。 |
187 |
StartPage 新しいページが開始されていることをデバイスドライバーに通知します。 |
188 |
StretchBlt ビットマップをソース長方形およびデバイスからターゲット長方形に移動し、必要に応じてビットマップをストレッチまたは圧縮して、ターゲット長方形のサイズに合わせます。 |
189 |
StrokeAndFillPath パス内の開いている図形をすべて閉じ、現在のペンを使用してパスの輪郭を描き、現在のブラシを使用してその内部を塗りつぶします。 |
190 |
StrokePath 現在のペンを使用して、指定されたパスをレンダリングします。 |
191 |
TabbedTextOut 指定された場所に文字列を書き込み、タブストップ位置の配列で指定された値にタブを展開します。 |
192 |
TextOut 現在選択されているフォントを使用して、指定された場所に文字列を書き込みます。 |
193 |
TransparentBlt 指定されたソースデバイスコンテキストから宛先デバイスコンテキストに色データのビットブロックを転送し、転送で指定された色を透明にします。 |
194 |
UpdateColors クライアント領域の現在の色をピクセル単位でシステムパレットに一致させることにより、デバイスコンテキストのクライアント領域を更新します。 |
195 |
WidenPath デバイスコンテキストで現在選択されているペンを使用してパスがストロークされた場合に、ペイントされる領域として現在のパスを再定義します。 |
行
ステップ1 *- *MFCGDIDemo という名前の新しいMFCベースの単一ドキュメントプロジェクトを作成して、簡単な例を見てみましょう。
ステップ2 *-プロジェクトが作成されたら、ソリューションエクスプローラーに移動し、ソースファイルフォルダーの下の *MFCGDIDemoView.cpp ファイルをダブルクリックします。
- ステップ3 *- CMFCGDIDemoView
- OnDraw()*メソッドで以下に示すように線を引きます。
- ステップ4 *-このアプリケーションを実行します。 次の出力が表示されます。
- *ステップ5 *-CDC
- MoveTo()メソッドを使用して、行の開始位置を設定します。
LineTo()を使用する場合、プログラムはMoveTo()ポイントからLineTo()エンドまで開始します。
LineTo()の後、MoveTo()を呼び出さず、他のポイント値でLineTo()を再度呼び出すと、プログラムは前のLineTo()から新しいLineTo()ポイントまで線を引きます。
- ステップ6 *-さまざまな線を描画するには、次のコードに示すようにこのプロパティを使用できます。
- ステップ7 *-このアプリケーションを実行します。 次の出力が表示されます。
ポリライン
- *ポリライン*は一連の接続されたラインです。 行は、POINTまたはCPoint値の配列に格納されます。 ポリラインを描画するには、CDC
- Polyline()メソッドを使用します。 ポリラインを描画するには、少なくとも2つのポイントが必要です。 3つ以上のポイントを定義すると、最初のポイントの後の各ラインは、すべてのポイントが含まれるまで、前のポイントから次のポイントまで描画されます。
- ステップ1 *-簡単な例を見てみましょう。
- ステップ2 *-このアプリケーションを実行すると、次の出力が表示されます。
長方形
- *長方形*は、4つの直角を構成する4つの辺で構成される幾何学的図形です。 線と同様に、長方形を描くには、開始位置と終了位置を定義する必要があります。 長方形を描くには、CDC
- Rectangle()メソッドを使用できます。
- ステップ1 *-簡単な例を見てみましょう。
- ステップ2 *-このアプリケーションを実行すると、次の出力が表示されます。
四角
- 正方形*は、4つの直角を構成する4つの辺で構成される幾何学的図形ですが、各辺の長さは等しくなければなりません。
簡単な例を見てみましょう。
このアプリケーションを実行すると、次の出力が表示されます。
Pies
- *パイ*は、楕円の中心からそれぞれ片側に伸びる2本の線で区切られた楕円の一部です。 パイを描画するには、以下に示すようにCDC
- Pie()メソッドを使用できます-
BOOL Pie(int x1、int y1、int x2、int y2、int x3、int y3、int x4、int y4);
- (x1、y1)ポイントは、円を表す楕円が収まる長方形の左上隅を決定します。 (x2、y2)ポイントは、長方形の右下隅です。
- (x3、y3)ポイントは、デフォルトの反時計回り方向のパイの開始コーナーを指定します。
- (x4、y4)ポイントは、パイの終点を特定します。
簡単な例を見てみましょう。
- ステップ2 *-このアプリケーションを実行すると、次の出力が表示されます。
Arcs
- 円弧は楕円の一部またはセグメントです。つまり、円弧は完全な楕円ではありません。 円弧を描くには、CDC
- Arc()メソッドを使用できます。
BOOL Arc(int x1、int y1、int x2、int y2、int x3、int y3、int x4、int y4);
CDCクラスにはSetArcDirection()メソッドが装備されています。
ここに構文があります-
Sr.No. | Value & Orientation |
---|---|
1 |
AD_CLOCKWISE 図は時計回りに描かれます |
2 |
AD_COUNTERCLOCKWISE 図は反時計回りに描かれます |
- ステップ1 *-簡単な例を見てみましょう。
- ステップ2 *-このアプリケーションを実行すると、次の出力が表示されます。
和音
これまでに描いた円弧は、始点と終点を持つ線で構成されているため、開いた図形と見なされます(円や長方形とは異なります)。 *コード*は、両端が直線で接続されている円弧です。
- コードを描画するには、CDC
- Chord()メソッドを使用できます。
BOOL Chord(int x1、int y1、int x2、int y2、int x3、int y3、int x4、int y4);
簡単な例を見てみましょう。
上記のアプリケーションを実行すると、次の出力が表示されます。
この例の弧の方向は時計回りに設定されています。
色
- 色*は、オブジェクトの審美的な外観を向上させる最も基本的なオブジェクトの1つです。 色は、視覚的側面の一部を変更するためにオブジェクトに追加される非空間オブジェクトです。 MFCライブラリは、Win32 APIと組み合わせて、色のさまざまな側面を活用するために使用できるさまざまなアクションを提供します。
RGBマクロは関数のように動作し、コンマで区切られた3つの数値を渡すことができます。 次のコードに示すように、各値は0〜255の間でなければなりません。
簡単な例を見てみましょう。
このアプリケーションを実行すると、次の出力が表示されます。
フォント
____これはCFontクラスのメソッドのリストです。
Sr.No. | Name & Description |
---|---|
1 |
CreateFont 指定された特性でCFontを初期化します。 |
2 |
CreateFontIndirect
|
3 |
CreatePointFont 10分の1ポイントで測定された指定された高さ、および書体でCFontを初期化します。 |
4 |
CreatePointFontIndirect
|
5 |
FromHandle Windows HFONT を指定すると、CFontオブジェクトへのポインターを返します。 |
6 |
GetLogFont LOGFONTに、CFontオブジェクトに関連付けられた論理フォントに関する情報を入力します。 |
簡単な例を見てみましょう。
上記のアプリケーションを実行すると、次の出力が表示されます。
Pens
ペン*は、デバイスコンテキストに線と曲線を描くために使用するツールです。 グラフィックプログラミングでは、ペンを使用して、長方形や多角形などの幾何学的な閉じた形状の境界線を描画します。 Microsoft Windowsは、 *cosmetic と geometric の2種類のペンを考慮します。
ペンは、1ピクセル以下の固定幅の単純な線のみを描画するために使用できる場合、化粧品と呼ばれます。 ペンは、異なる幅とさまざまな端を想定できる幾何学的です。 MFCは、Windowsグラフィックデバイスインターフェイス(GDI)ペンをカプセル化するクラス CPen を提供します。
____これはCPenクラスのメソッドのリストです。
Sr.No. | Name & Description |
---|---|
1 |
CreatePen 指定されたスタイル、幅、およびブラシ属性で論理的な化粧または幾何学的なペンを作成し、それをCPenオブジェクトにアタッチします。 |
2 |
CreatePenIndirect LOGPEN構造体で指定されたスタイル、幅、色でペンを作成し、CPenオブジェクトに添付します。 |
3 |
FromHandle Windows HPEN を指定すると、CPenオブジェクトへのポインターを返します。 |
4 |
GetExtLogPen EXTLOGPENの基礎となる構造を取得します。 |
5 |
GetLogPen LOGPENの基本構造を取得します。 |
____ここでペンの異なるスタイル値
Sr.No. | *Name & Description * |
---|---|
1 |
連続した実線。 |
2 |
PS_DASH 破線の中断のある連続線。 |
3 |
PS_DOT 1ピクセルおきにドットが途切れる線。 |
4 |
PS_DASHDOT 交互の破線と点の組み合わせ。 |
5 |
PS_DASHDOTDOT ダッシュと二重点線の中断の組み合わせ。 |
6 |
PS_NULL 目に見える線はありません。 |
7 |
PS_INSIDEFRAME 閉じた形状の境界線のすぐ内側に描かれた線。 |
簡単な例を見てみましょう。
上記のアプリケーションを実行すると、次の出力が表示されます。
ブラシ
ブラシ*は、閉じた形状または線の内部を塗りつぶすために使用される描画ツールです。 ブラシは、ペンキのバケツを拾ってどこかに注ぐような動作をします。 MFCは、Windowsグラフィックデバイスインターフェイス(GDI)ブラシをカプセル化するクラス *CBrush を提供します。
____これは、CBrushクラスのメソッドのリストです。
Sr.NO. | Name & Description |
---|---|
1 |
CreateBrushIndirect LOGBRUSH構造体で指定されたスタイル、色、およびパターンでブラシを初期化します。 |
2 |
CreateDIBPatternBrush デバイスに依存しないビットマップ(DIB)で指定されたパターンでブラシを初期化します。 |
3 |
CreateHatchBrush 指定されたハッチングパターンと色でブラシを初期化します。 |
4 |
CreatePatternBrush ビットマップで指定されたパターンでブラシを初期化します。 |
5 |
CreateSolidBrush 指定した単色でブラシを初期化します。 |
6 |
CreateSysColorBrush デフォルトのシステムカラーであるブラシを作成します。 |
7 |
FromHandle Windows HBRUSHオブジェクトへのハンドルを指定すると、CBrushオブジェクトへのポインターを返します。 |
8 |
GetLogBrush LOGBRUSH構造体を取得します。 |
簡単な例を見てみましょう。
このアプリケーションを実行すると、次の出力が表示されます。
MFC-ライブラリ
- ライブラリ*は、これらの関数、クラス、またはリソースがどのように作成されたか、またはどのように機能するかを知る必要なく、既に実装されたエンティティを必要とするプログラムで利用できる関数、クラス、またはその他のリソースのグループです。 ライブラリにより、プログラマーは関数、クラス、リソースなどを簡単に使用できます。 別の個人または会社によって作成され、この外部ソースが信頼性が高く効率的であると信頼しています。 ライブラリに関連するいくつかのユニークな機能は-
- ライブラリは作成され、通常の通常のプログラムのように機能し、関数または他のリソースを使用して、他のプログラムと通信します。
- ライブラリには、その機能を実装するために、他のプログラムが機能を完了するために必要な機能が含まれています。
- 同時に、ライブラリは他のプログラムが必要としない機能を使用する場合があります。
- ライブラリを使用するプログラムは、ライブラリのクライアントとも呼ばれます。
ライブラリに作成または含める関数には2つのタイプがあります-
- 内部関数は、ライブラリ自体によってのみ使用されるものであり、ライブラリのクライアントはこれらの関数にアクセスする必要はありません。
- 外部関数は、ライブラリのクライアントがアクセスできる関数です。
プログラムで扱うライブラリには、大きく2つのカテゴリがあります-
- 静的ライブラリ
- 動的ライブラリ
静的ライブラリ
- 静的ライブラリ*は、外部プログラムがその機能を補完するために使用できる関数、クラス、またはリソースを含むファイルです。 ライブラリを使用するには、プログラマはライブラリへのリンクを作成する必要があります。 プロジェクトは、コンソールアプリケーション、Win32またはMFCアプリケーションにすることができます。 ライブラリファイルの拡張子はlibです。
- ステップ1 *-新しいWin32プロジェクトを作成して、静的ライブラリの簡単な例を見てみましょう。
- ステップ2 *-[アプリケーションウィザード]ダイアログボックスで、[静的ライブラリ]オプションを選択します。
- ステップ3 *-[完了]をクリックして続行します。
- ステップ4 *-ソリューションエクスプローラーでプロジェクトを右クリックし、[追加]→[新しいアイテム]メニューオプションからヘッダーファイルを追加します。
- ステップ5 *-[名前]フィールドにCalculator.hと入力し、[追加]をクリックします。
ヘッダーファイルに次のコードを追加します-
ステップ6 *-プロジェクトにソース( .cpp)ファイルを追加します。
- ステップ7 *-[名前]フィールドにCalculator.cppと入力し、[追加]をクリックします。
- ステップ8 *- *.cppファイルに次のコードを追加します-
- ステップ9 *-[ビルド]→[MFCLibのビルド]をクリックして、メインメニューからこのライブラリをビルドします。
- ステップ10 *-ライブラリが正常に構築されると、上記のメッセージが表示されます。
- ステップ11 *-ライブラリからこれらの関数を使用するには、[ファイル]→[新規]→[プロジェクト]に基づく別のMFCダイアログアプリケーションを追加します。
ステップ12 *-次のスナップショットに示すように、MFCLib \ Debugフォルダーに移動し、ヘッダーファイルと .libファイルをMFCLibTestプロジェクトにコピーします。
- ステップ13 *-ライブラリを現在のプロジェクトに追加するには、メインメニューで[プロジェクト]→[既存項目の追加]をクリックし、MFCLib.libを選択します。
- ステップ14 *-次のスナップショットに示すようにダイアログボックスを設計します。
- ステップ15 *-値タイプがdoubleの両方の編集コントロールに値変数を追加します。
- ステップ16 *-ダイアログボックスの最後にある静的テキストコントロールの値変数を追加します。
- ステップ17 *-[計算]ボタンのイベントハンドラーを追加します。
ライブラリから機能を追加するには、ヘッダーファイルをCMFCLibTestDlg.cppファイルに含める必要があります。
- ステップ18 *-ボタンイベントハンドラの実装です。
- ステップ19 *-上記のコードをコンパイルして実行すると、次の出力が表示されます。
- ステップ20 *-編集フィールドに2つの値を入力し、[計算]をクリックします。 ライブラリから計算した後、結果が表示されます。
ダイナミックライブラリ
Win32 DLLは、Microsoft Windowsコンピューターで実行されるプログラムで使用できるライブラリです。 通常のライブラリとして、ファイルにグループ化された関数や他のリソースで構成されます。
DLLの略語は、ダイナミックリンクライブラリの略です。 つまり、静的ライブラリとは対照的に、DLLを使用すると、他のアプリケーションをこのタイプのライブラリにいつどのようにリンクするかをプログラマが決定できます。
たとえば、DLLを使用すると、さまざまなアプリケーションで必要に応じてライブラリを使用できます。 実際、異なるプログラミング環境で作成されたアプリケーションは、特定のDLLに保存されている関数またはリソースを使用できます。 このため、アプリケーションはライブラリに動的にリンクします。
- ステップ1 *-新しいWin32プロジェクトを作成して、簡単な例を見てみましょう。
- ステップ2 *-[アプリケーションの種類]セクションで、[DLL]ラジオボタンをクリックします。
- ステップ3 *-[完了]をクリックして続行します。
- ステップ4 *-MFCDynamicLib.cppファイルに次の関数を追加し、使用してその定義を公開します-
- ステップ5 *-DLLの外部でアクセスされる各関数に_declspec(dllexport)修飾子を使用します。
- ステップ6 *-DLLを作成するには、メインメニューで、メインメニューから[ビルド]> [MFCDynamicLibのビルド]をクリックします。
- ステップ7 *-DLLが正常に作成されると、出力ウィンドウにメッセージが表示されます。
- ステップ8 *-Windowsエクスプローラーを開き、現在のプロジェクトのデバッグフォルダーを開きます。
- ステップ9 *-dll拡張子を持つファイルとlib拡張子を持つ別のファイルが作成されていることに注意してください。
- ステップ10 *-dll拡張子でこのファイルをテストするには、ファイル→新規→プロジェクトから新しいMFCダイアログベースのアプリケーションを作成する必要があります。
ステップ11 *-MFCDynamicLib \ Debugフォルダーに移動し、次のスナップショットに示すように、。dllおよび* .libファイルをMFCLibTestプロジェクトにコピーします。
- ステップ12 *-DLLを現在のプロジェクトに追加するには、メインメニューで[プロジェクト]→[既存のアイテムを追加]をクリックし、MFCDynamicLib.libファイルを選択します。
- ステップ13 *-次のスナップショットに示すようにダイアログボックスを設計します。
- ステップ14 *-値タイプdoubleの両方の編集コントロールに値変数を追加します。
- ステップ15 *-ダイアログボックスの最後にある静的テキストコントロールの値変数を追加します。
- ステップ16 *-[計算]ボタンのイベントハンドラーを追加します。
- ステップ17 *-DLLを使用しているプロジェクトでは、アクセスする各関数は_declspec(dllimport)修飾子を使用して宣言する必要があります。
- ステップ18 *-MFCLibTestDlg.cppファイルに次の関数宣言を追加します。
- ステップ19 *-ボタンイベントハンドラの実装です。
- ステップ20 *-上記のコードをコンパイルして実行すると、次の出力が表示されます。
- ステップ21 *-編集フィールドに2つの値を入力し、[計算]をクリックします。 DLLから計算した結果が表示されます。