アプリケーションの情報と管理

アプリケーションを記述するときは、1 つの CWinApp派生オブジェクトを作成します。 場合によっては、-derived オブジェクトの外部からこのオブジェクトに関する情報を CWinApp取得できます。 または、他のグローバル "マネージャー" オブジェクトへのアクセスが必要な場合があります。

Microsoft Foundation クラス ライブラリには、これらのタスクの実行に役立つ次のグローバル関数が用意されています。

アプリケーション情報と管理機能

名前 説明
AfxBeginThread 新しいスレッドを作成します。
AfxContextMenuManager グローバル コンテキスト メニュー マネージャーへのポインター。
AfxEndThread 現在のスレッドを終了します。
AfxFindResourceHandle リソース チェーンをウォークし、リソース ID とリソースの種類別に特定のリソースを見つけます。
AfxFreeLibrary 読み込まれたダイナミック リンク ライブラリ (DLL) モジュールの参照カウントをデクリメントします。 参照カウントが 0 に達すると、モジュールはマップ解除されます。
AfxGetApp アプリケーションの単一 CWinApp オブジェクトへのポインターを返します。
AfxGetAppName アプリケーションの名前を含む文字列を返します。
AfxGetInstanceHandle アプリケーションの HINSTANCE このインスタンスを表す値を返します。
AfxGetMainWnd OLE 以外のアプリケーションの現在の "メイン" ウィンドウ、またはサーバー アプリケーションのインプレース フレーム ウィンドウへのポインターを返します。
AfxGetPerUserRegistration この関数を使用して、アプリケーションがレジストリ アクセスを (HKCU) ノードにHKEY_CURRENT_USERリダイレクトするかどうかを確認します。
AfxGetResourceHandle アプリケーションの HINSTANCE 既定のリソースのソースに an を返します。 アプリケーションのリソースに直接アクセスするために使用します。
AfxGetThread 現在 の CWinThread オブジェクトへのポインターを取得します。
AfxInitRichEdit アプリケーションのバージョン 1.0 リッチ エディット コントロールを初期化します。
AfxInitRichEdit2 アプリケーションのバージョン 2.0 以降のリッチ エディット コントロールを初期化します。
AfxIsExtendedFrameClass 指定されたウィンドウが拡張フレーム オブジェクトかどうかを確認します。
AfxIsMFCToolBar 指定されたウィンドウがツール バー オブジェクトであるかどうかを判断します。
AfxKeyboardManager グローバル キーボード マネージャーへのポインター。
AfxLoadLibrary DLL モジュールをマップし、DLL 関数のアドレスを取得するために使用できるハンドルを返します。
AfxLoadLibraryEx 指定したオプションを使用して DLL モジュールをマップし、DLL 関数のアドレスを取得するために使用できるハンドルを返します。
AfxMenuTearOffManager グローバル 破棄メニュー マネージャーへのポインター。
AfxMouseManager グローバル マウス マネージャーへのポインター。
AfxRegisterClass MFC を使用する DLL にウィンドウ クラスを登録します。
AfxRegisterWndClass MFC によって自動的に登録されたものを補完する Windows ウィンドウ クラスを登録します。
AfxSetPerUserRegistration アプリケーションがレジストリ アクセスを (HKCU) ノードにHKEY_CURRENT_USERリダイレクトするかどうかを設定します。
AfxSetResourceHandle アプリケーションの既定のリソースが読み込まれる場所の HINSTANCE ハンドルを設定します。
AfxShellManager グローバル シェル マネージャーへのポインター。
AfxSocketInit Windows ソケットを CWinApp::InitInstance 初期化するためにオーバーライドで呼び出されます。
AfxUserToolsManager グローバル ユーザー ツール マネージャーへのポインター。
AfxWinInit MFC を初期化するために、GUI ベースのアプリケーションの初期化のCWinApp一環として、MFC 提供の関数によって呼び出されますWinMain。 MFC を使用するコンソール アプリケーションでは、直接呼び出す必要があります。

AfxBeginThread

この関数を呼び出して、新しいスレッドを作成します。

CWinThread* AfxBeginThread(
    AFX_THREADPROC pfnThreadProc,
    LPVOID pParam,
    int nPriority = THREAD_PRIORITY_NORMAL,
    UINT nStackSize = 0,
    DWORD dwCreateFlags = 0,
    LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL);

CWinThread* AfxBeginThread(
    CRuntimeClass* pThreadClass,
    int nPriority = THREAD_PRIORITY_NORMAL,
    UINT nStackSize = 0,
    DWORD dwCreateFlags = 0,
    LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL);

パラメーター

pfnThreadProc
ワーカー スレッドの制御関数をポイントします。 ポインターを指定することはできません NULL。 この関数は次のように宣言する必要があります。

UINT __cdecl MyControllingFunction( LPVOID pParam );

pThreadClass
からRUNTIME_CLASSCWinThread派生したオブジェクトの値です。

pParam
制御関数に渡すパラメーター。

nPriority
スレッドに設定する優先度。 使用可能な優先順位の完全な一覧と説明については、Windows SDK を参照してください SetThreadPriority

nStackSize
新しいスレッドへのスタックのバイト サイズを指定します。 0 である場合、スタック サイズの既定値は、このスレッドを生成するスレッドのスタックと同じサイズです。

dwCreateFlags
スレッドの作成を制御する追加のフラグを指定します。 このフラグは、2 つの値の 1 つを含めることができます。

  • CREATE_SUSPENDED 中断カウントが 1 のスレッドを開始します。 スレッドの実行を開始する前に、オブジェクトのCWinThreadメンバー データ (派生クラスのメンバーなどm_bAutoDelete) を初期化する場合に使用CREATE_SUSPENDEDします。 初期化が完了したら、スレッドの実行を開始するために使用 CWinThread::ResumeThread します。 スレッドは呼び出されるまで CWinThread::ResumeThread 実行されません。

  • 0 作成直後にスレッドを開始します。

lpSecurityAttrs
スレッドの SECURITY_ATTRIBUTES セキュリティ属性を指定する構造体を指します。 場合 NULLは、作成スレッドと同じセキュリティ属性が使用されます。 この構造の詳細については、Windows SDK を参照してください。

戻り値

新しく作成されたスレッド オブジェクトへのポインター、または NULL エラーが発生した場合。

解説

AfxBeginThread の最初のフォームはワーカー スレッドを作成します。 2 番目のフォームは、ユーザー インターフェイス スレッドまたはワーカー スレッドとして機能可能なスレッドを作成します。

AfxBeginThread は、新しい CWinThread オブジェクトを作成し、その CreateThread 関数を呼び出してスレッドの実行を開始し、スレッドへのポインターを返します。 なんらかの原因でスレッド生成に失敗すると、スレッド生成処理全体をチェックし、すべてのオブジェクトを確実に解放します。 スレッドを終了するには、スレッド内から呼び出 AfxEndThread すか、ワーカー スレッドの制御関数から戻ります。

マルチスレッドは、アプリケーションによって有効化される必要があります。それ以外の場合、この関数は失敗します。 マルチスレッドを有効にする方法の詳細については、「、(ランタイム ライブラリを使用する)」を参照してください/MD/MT/LD

詳細についてはAfxBeginThread、「マルチスレッド: ワーカー スレッドの作成とマルチスレッド: ユーザー インターフェイス スレッドの作成」の記事を参照してください。

CSocket::Attach の例を参照してください。

必要条件

ヘッダーafxwin.h

AfxContextMenuManager

グローバル コンテキスト メニュー マネージャーへのポインター。

構文

CContextMenuManager* afxContextMenuManager;

必要条件

ヘッダー:afxcontextmenumanager.h

AfxEndThread

現在実行中のスレッドを終了するには、この関数を呼び出します。

void AFXAPI AfxEndThread(
    UINT nExitCode,
    BOOL bDelete  = TRUE);

パラメーター

nExitCode
スレッドの終了コードを指定します。

bDelete
スレッド オブジェクトをメモリから削除します。

解説

終了するには、スレッド内から呼び出す必要があります。

詳細については、マルチスレッド: スレッドの終了に関AfxEndThreadする記事を参照してください。

必要条件

ヘッダーafxwin.h

AfxFindResourceHandle

リソース チェーンをウォークし、リソース ID とリソースの種類別に特定のリソースを検索するために使用 AfxFindResourceHandle します。

構文

HINSTANCE AFXAPI AfxFindResourceHandle( LPCTSTR lpszName,  LPCTSTR lpszType );

パラメーター

lpszName
リソース ID を含む文字列へのポインター。 lpszType
リソースの種類へのポインター。 リソースの種類の一覧については、Windows SDK を参照してください FindResource

戻り値

リソースを含むモジュールへのハンドル。

解説

AfxFindResourceHandle は特定のリソースを検索し、リソースを含むモジュールにハンドルを返します。 リソースは、読み込まれた MFC 拡張 DLL 内にある可能性があります。 AfxFindResourceHandle は、どのリソースが含まれているかを示します。

モジュールは次の順序で検索されます。

  1. メイン モジュール (MFC 拡張 DLL の場合)。

  2. システム以外のモジュール。

  3. 言語固有のモジュール。

  4. メイン モジュール (システム DLL の場合)。

  5. システム モジュール。

必要条件

ヘッダー:afxwin.h

AfxFreeLibrary

両方AfxFreeLibraryAfxLoadLibraryメイン読み込まれた各ライブラリ モジュールの参照カウントが含まれます。

BOOL AFXAPI AfxFreeLibrary(HINSTANCE hInstLib);

パラメーター

hInstLib
読み込まれたライブラリ モジュールのハンドル。 AfxLoadLibrary は、このハンドルを返します。

戻り値

TRUE関数が成功した場合。それ以外の場合は . FALSE

解説

AfxFreeLibrary 読み込まれたダイナミック リンク ライブラリ (DLL) モジュールの参照カウントをデクリメントします。 参照カウントが 0 に達すると、モジュールは呼び出し元プロセスのアドレス空間からマップ解除され、ハンドルは無効になります。 この参照カウントは、呼び出されるたびにインクリメントされます AfxLoadLibrary

ライブラリ モジュールをマップ解除する前に、システムは DLL を使用してプロセスからデタッチできるようにします。 これにより、DLL は現在のプロセスに割り当てられたリソースをクリーンできます。 エントリ ポイント関数が戻った後、ライブラリ モジュールは現在のプロセスのアドレス空間から削除されます。

DLL モジュールをマップするために使用 AfxLoadLibrary します。

アプリケーションで複数のスレッドを使用 AfxFreeLibraryAfxLoadLibrary する場合は、必ず (Win32 関数 FreeLibrary ではなく LoadLibrary) 使用してください。 AfxFreeLibrary MFC 拡張 DLL の読み込みとアンロード時に実行されるスタートアップ コードとシャットダウン コードを使用AfxLoadLibraryして、グローバル MFC 状態が破損しないようにします。

AfxLoadLibrary の例を参照してください。

必要条件

ヘッダーafxdll_.h

AfxGetApp

この関数によって返されるポインターを使用すると、メインメッセージ ディスパッチ コードや最上位ウィンドウなどのアプリケーション情報にアクセスできます。

CWinApp* AFXAPI AfxGetApp();

戻り値

アプリケーションの単一 CWinApp オブジェクトへのポインター。

解説

このメソッドが返NULLされた場合、アプリケーション メイン ウィンドウがまだ完全に初期化されていないことを示している可能性があります。 また、問題を示している可能性もあります。

// Print the application's executable filename.
TRACE(_T("Executable filename = %s\n"), AfxGetApp()->m_pszExeName);

必要条件

ヘッダーafxwin.h

AfxGetAppName

返される文字列は、診断メッセージに使用することも、一時文字列名のルートとして使用することもできます。

LPCTSTR AFXAPI AfxGetAppName();

戻り値

アプリケーションの名前を含む null で終わる文字列。

// Print the application name to the debugger output window.
TRACE(_T("Application name is %s\n"), AfxGetAppName());

必要条件

ヘッダーafxwin.h

AfxGetInstanceHandle

この関数を使用すると、現在のアプリケーションのインスタンス ハンドルを取得できます。

HINSTANCE  AFXAPI AfxGetInstanceHandle();

戻り値

HINSTANCEアプリケーションの現在のインスタンスへのインスタンス。 MFC の USRDLL バージョンにリンクされている DLL 内から呼び出された場合は、 HINSTANCE DLL に対して返されます。

解説

AfxGetInstanceHandle は、USRDLL バージョンの MFC にリンクされた DLL 内から呼び出されない限り、実行可能ファイル (.EXE) を常に返 HINSTANCE します。 この場合、DLL に対して an HINSTANCE が返されます。

// Print the application instance handle to the debugger output window.
TRACE(_T("Application instance handle is 0x%0X\n"), AfxGetInstanceHandle());

必要条件

ヘッダーafxwin.h

AfxGetMainWnd

アプリケーションが OLE サーバーの場合は、この関数を呼び出して、アプリケーションのアクティブなメイン ウィンドウへのポインターを取得します。 アプリケーション オブジェクトのメンバーを直接参照する代わりに、 m_pMainWnd この結果を使用します。

CWnd* AFXAPI AfxGetMainWnd();

戻り値

サーバーにアクティブなコンテナー内でインプレース アクティブなオブジェクトがある場合は、インプレース作業中の文書を含むフレーム ウィンドウ オブジェクトへのポインターを返します。

コンテナー内にインプレース アクティブなオブジェクトがない場合、またはアプリケーションが OLE サーバーでない場合、この関数はアプリケーション オブジェクトを m_pMainWnd 返します。

AfxGetMainWnd をアプリケーションのプライマリ スレッドから呼び出した場合は、上記の規則に従ってアプリケーションのメイン ウィンドウを返します。 アプリケーションのセカンダリ スレッドからこの関数を呼び出した場合は、関数は呼び出しを行ったスレッドに関連付けられているメイン ウィンドウを返します。

解説

アプリケーションが OLE サーバーでない場合、この関数を呼び出すことは、アプリケーション オブジェクトのメンバーを直接参照することと m_pMainWnd 同じです。

//The following line send a WM_CLOSE message
//   to the Application's main window. This will cause the
//   Application to exit.
AfxGetMainWnd()->PostMessage(WM_CLOSE, 0, 0);

必要条件

ヘッダーafxwin.h

AfxGetPerUserRegistration

この関数を使用して、アプリケーションがレジストリ アクセスを (HKCU) ノードにHKEY_CURRENT_USERリダイレクトするかどうかを確認します。

BOOL AFXAPI AfxGetPerUserRegistration();

戻り値

TRUE は、レジストリ情報がノードに HKCU 転送されていることを示します。 FALSE は、アプリケーションがレジストリ情報を既定のノードに書き込みます。 既定のノードは (HKCR) ですHKEY_CLASSES_ROOT

解説

レジストリ リダイレクトを有効にした場合、フレームワークはアクセスを次の場所に HKCR リダイレクトします HKEY_CURRENT_USER\Software\Classes。 MFC および ATL フレームワークのみがリダイレクトの影響を受ける。

アプリケーションがレジストリ アクセスをリダイレクトするかどうかを変更するには、次を使用します AfxSetPerUserRegistration

必要条件

ヘッダーafxstat_.h

AfxGetResourceHandle

この関数によって返されるハンドルを HINSTANCE 使用して、Windows 関数の呼び出しなど、アプリケーションのリソースに FindResource直接アクセスします。

extern HINSTANCE  AfxGetResourceHandle();

戻り値

HINSTANCEアプリケーションの既定のリソースが読み込まれるハンドル。

//Load the menu specifying the module handle where resource is to be
//found & resource ID
HMENU hMenu = ::LoadMenu(AfxGetResourceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME));

必要条件

ヘッダーafxwin.h

AfxGetThread

現在実行中のスレッドを表すオブジェクトへのポインターを CWinThread 取得するには、この関数を呼び出します。

CWinThread* AfxGetThread();

戻り値

現在実行中のスレッドへのポインター。それ以外の場合 NULLは .

解説

スレッド内から呼び出す必要があります。

Note

Visual C++ バージョン 4.2、5.0、または 6.0 から呼び出す AfxGetThread MFC プロジェクトを移植する場合は、 AfxGetThread スレッドが見つからない場合に呼び出します AfxGetApp 。 コンパイラのより新しいバージョンでは、 AfxGetThread スレッドが見つからなかった場合に返されます NULL 。 アプリケーション スレッドが必要な場合は、次を呼び出す AfxGetApp必要があります。

//Print the current thread ID in the Debug Window
TRACE(_T("Current Thread ID = 0x%X\n"), AfxGetThread()->m_nThreadID);

必要条件

ヘッダーafxwin.h

AfxInitRichEdit

この関数を呼び出して、アプリケーションのリッチ エディット コントロール (バージョン 1.0) を初期化します。

BOOL AFXAPI AfxInitRichEdit();

解説

この関数は、下位互換性のために提供されます。 新しいアプリケーションで使用 AfxInitRichEdit2する必要があります。

AfxInitRichEdit は、リッチ エディット コントロールのバージョン 1.0 を初期化するために読み込まれます RICHED32.DLL 。 バージョン 2.0 と 3.0 のリッチエディット コントロールを使用するには、 RICHED20.DLL 読み込む必要があります。 への呼び出し AfxInitRichEdit2を行うことによって読み込まれます。

既存の Visual C++ アプリケーションのリッチ エディット コントロールをバージョン 2.0 に更新するには、次を開きます。RC ファイルをテキストとして、各リッチ エディット コントロールのクラス名を "" から "RICHEDITRichEdit20a" に変更します。 次に、呼び出しを次のようにAfxInitRichEditAfxInitRichEdit2置き換えます。

この関数は、ライブラリがまだプロセス用に初期化されていない場合は、共通コントロール ライブラリも初期化します。 MFC アプリケーションからリッチ エディット コントロールを直接使用する場合は、この関数を呼び出して、MFC がリッチ エディット コントロール ランタイムを適切に初期化したことを確認します。 、または CRichEditDoc、のCRichEditViewCRichEditCtrlメソッドをCreate呼び出す場合は、通常、この関数を呼び出す必要はありませんが、必要な場合があります。

必要条件

ヘッダーafxwin.h

AfxInitRichEdit2

この関数を呼び出して、アプリケーションのリッチ エディット コントロール (バージョン 2.0 以降) を初期化します。

BOOL AFXAPI AfxInitRichEdit2();

解説

この関数を呼び出して、リッチ エディット コントロールの RICHED20.DLL バージョン 2.0 を読み込んで初期化します。 、または CRichEditDoc、のCRichEditViewCRichEditCtrlメソッドをCreate呼び出す場合は、通常、この関数を呼び出す必要はありませんが、必要な場合があります。

必要条件

ヘッダーafxwin.h

AfxIsExtendedFrameClass

指定されたウィンドウが拡張フレーム オブジェクトかどうかを確認します。

構文

BOOL AFXAPI AfxIsExtendedFrameClass( CWnd* pWnd );

パラメーター

pWnd
[in]から CWnd派生したオブジェクトへのポインター。

戻り値

TRUE 指定されたウィンドウが拡張フレーム オブジェクトの場合。それ以外の場合 FALSEは .

解説

TRUE が次のいずれかのクラスから派生している場合、このメソッドは pWnd を返します。

  • CFrameWndEx

  • CMDIFrameWndEx

  • COleIPFrameWndEx

  • COleDocIPFrameWndEx

  • CMDIChildWndEx

このメソッドは、関数またはメソッドのパラメーターが拡張フレーム ウィンドウであるかどうかを検証する必要があるときに役立ちます。

必要条件

ヘッダー:afxpriv.h

AfxIsMFCToolBar

指定されたウィンドウがツール バー オブジェクトであるかどうかを判断します。

構文

BOOL AFXAPI AfxIsMFCToolBar(CWnd* pWnd);

パラメーター

pWnd
[in]から CWnd派生したオブジェクトへのポインター。

戻り値

TRUE 指定されたウィンドウがツール バー オブジェクトの場合。それ以外の場合 FALSEは .

解説

このメソッドは、 TRUE 派生元の場合 pWndCMFCToolBar返します。 このメソッドは、関数またはメソッド パラメーターがオブジェクトであることを検証する必要がある場合に CMFCToolBar 便利です。

必要条件

ヘッダー:afxpriv.h

AfxKeyboardManager

グローバル キーボード マネージャーへのポインター。

構文

CKeyboardManager* afxKeyboardManager;

必要条件

ヘッダー:afxkeyboardmanager.h

AfxLoadLibrary

DLL モジュールをマップするために使用 AfxLoadLibrary します。

HINSTANCE AFXAPI AfxLoadLibrary(LPCTSTR lpszModuleName);

パラメーター

lpszModuleName
モジュールの名前 (.DLL または .EXE ファイル) を含む null で終わる文字列を指します。 指定された名前はモジュールのファイル名です。

文字列がパスを指定しているが、指定したディレクトリにファイルが存在しない場合、関数は失敗します。

パスが指定されておらず、ファイル名拡張子が省略されている場合は、既定の拡張子 .DLL が追加されます。 ただし、ファイル名の文字列には、モジュール名に拡張子がないことを示す末尾のポイント文字 (.) を含めることができます。 パスが指定されていない場合、関数はデスクトップ アプリケーションの 検索順序を使用します

戻り値

関数が成功した場合、戻り値はモジュールへのハンドルです。 失敗した場合、戻り値は NULL.

解説

DLL 関数のアドレスを取得するために使用 GetProcAddress できるハンドルを返します。 AfxLoadLibrary を使用して、他の実行可能モジュールをマップすることもできます。

各プロセスメイン読み込まれた各ライブラリ モジュールの参照カウントが含まれます。 この参照カウントは、呼び出されるたびにインクリメント AfxLoadLibrary され、呼び出されるたびに AfxFreeLibrary デクリメントされます。 参照カウントが 0 に達すると、モジュールは呼び出し元プロセスのアドレス空間からマップ解除され、ハンドルは無効になります。

アプリケーションが複数のスレッドを使用 AfxLoadLibrary している場合、および AfxFreeLibrary MFC 拡張 DLL を動的に読み込む場合は、必ず (Win32 関数 LoadLibraryFreeLibrary代わりに) 使用してください。 AfxLoadLibraryAfxFreeLibrary を使用すると、MFC 拡張 DLL がロードおよびアンロードされたときに実行される起動とシャットダウンのコードが、グローバルの MFC 状態を破壊することがなくなります。

アプリケーションで使用 AfxLoadLibrary するには、MFC の DLL バージョンに動的にリンクする必要があります。 のヘッダー ファイルAfxLoadLibraryAfxdll_.hは、MFC が DLL としてアプリケーションにリンクされている場合にのみ含まれます。 MFC 拡張 DLL を使用または作成するには、MFC の DLL バージョンにリンクする必要があるため、この要件は仕様です。

// The following shows how to create a MDI based application
// using a generic CView derived class that is implemented in
// a dynamically loaded MFC Extension DLL.

typedef CRuntimeClass *(*GETDLLVIEW)();

BOOL CUserApp::InitInstance()
{
   // Standard Application Wizard generated initialization excluded.
// Register the application's document templates.  Document templates
//  serve as the connection between documents, frame windows and views

//Load MFC Extension DLL based view class.
m_hViewDll = AfxLoadLibrary(szMyViewDllPath);
if (!m_hViewDll)
{
   CString str;
   str.Format(_T("Error: Cannot find component %s"), szMyViewDllPath);
   AfxMessageBox(str);
   return FALSE;
}

GETDLLVIEW GetMyView = (GETDLLVIEW)GetProcAddress(m_hViewDll, "GetMyView");
ASSERT(GetMyView != NULL);

CMultiDocTemplate *pDocTemplate;
pDocTemplate = new CMultiDocTemplate(IDR_NVC_MFC_DLLUserTYPE,
                                     RUNTIME_CLASS(CUserDoc),
                                     RUNTIME_CLASS(CChildFrame), // custom MDI child frame
                                     GetMyView());
if (!pDocTemplate)
   return FALSE;
AddDocTemplate(pDocTemplate);

// Standard Application Wizard generated initialization excluded.
return TRUE;
}

int CUserApp::ExitInstance()
{
   if (NULL != m_hViewDll)
   {
      AfxFreeLibrary(m_hViewDll);
      m_hViewDll = NULL;
   }

   return CWinApp::ExitInstance();
}

必要条件

ヘッダーafxdll_.h

AfxLoadLibraryEx

DLL モジュールをマップするために使用 AfxLoadLibraryEx します。

HINSTANCE AFXAPI AfxLoadLibraryEx(LPCTSTR lpFileName, HANDLE hFile, DWORD dwFlags);

パラメーター

lpFileName
モジュールの名前 (.DLL または .EXE ファイル) を含む null で終わる文字列を指します。 指定された名前はモジュールのファイル名です。

文字列がパスを指定しているが、指定したディレクトリにファイルが存在しない場合、関数は失敗します。

パスが指定されておらず、ファイル名拡張子が省略されている場合は、既定の拡張子 .DLL が追加されます。 ただし、ファイル名の文字列には、モジュール名に拡張子がないことを示す末尾のポイント文字 (.) を含めることができます。 パスが指定されていない場合、関数はデスクトップ アプリケーションの 検索順序を使用します

hFile
このパラメーターは将来使用するために予約されています。 次の名前を指定 NULLする必要があります。

dwFlags
モジュールの読み込み時に実行するアクション。 フラグが指定されていない場合、この関数の動作は関数と AfxLoadLibrary 同じです。 このパラメーターの使用可能な値については、ドキュメントで LoadLibraryEx 説明します。

戻り値

関数が成功した場合、戻り値はモジュールへのハンドルです。 失敗した場合、戻り値は NULL.

解説

AfxLoadLibraryEx は、DLL 関数のアドレスを取得するために使用 GetProcAddress できるハンドルを返します。 AfxLoadLibraryEx を使用して、他の実行可能モジュールをマップすることもできます。

各プロセスメイン読み込まれた各ライブラリ モジュールの参照カウントが含まれます。 この参照カウントは、呼び出されるたびにインクリメント AfxLoadLibraryEx され、呼び出されるたびに AfxFreeLibrary デクリメントされます。 参照カウントが 0 に達すると、モジュールは呼び出し元プロセスのアドレス空間からマップ解除され、ハンドルは無効になります。

アプリケーションが複数のスレッドを使用 AfxLoadLibraryExAfxFreeLibrary 、MFC 拡張 DLL を動的に読み込む場合は、必ず (Win32 関数 LoadLibraryExFreeLibrary代わりに) 使用してください。 AfxFreeLibrary MFC 拡張 DLL の読み込みとアンロード時に実行されるスタートアップ コードとシャットダウン コードを使用AfxLoadLibraryExして、グローバル MFC 状態が破損しないようにします。

アプリケーションで使用 AfxLoadLibraryEx するには、MFC の DLL バージョンに動的にリンクする必要があります。 のヘッダー ファイルAfxLoadLibraryExAfxdll_.hは、MFC が DLL としてアプリケーションにリンクされている場合にのみ含まれます。 MFC 拡張 DLL を使用または作成するには、MFC の DLL バージョンにリンクする必要があるため、この要件は仕様です。

必要条件

ヘッダーafxdll_.h

AfxMenuTearOffManager

グローバル 破棄メニュー マネージャーへのポインター。

構文

CMenuTearOffManager* g_pTearOffMenuManager;

必要条件

ヘッダー:afxmenutearoffmanager.h

AfxMouseManager

グローバル マウス マネージャーへのポインター。

構文

CMouseManager* afxMouseManager;

必要条件

ヘッダー:afxmousemanager.h

AfxRegisterClass

MFC を使用する DLL にウィンドウ クラスを登録するには、この関数を使用します。

BOOL AFXAPI AfxRegisterClass(WNDCLASS* lpWndClass);

パラメーター

lpWndClass
登録する WNDCLASS ウィンドウ クラスに関する情報を含む構造体へのポインター。 この構造の詳細については、Windows SDK を参照してください。

戻り値

TRUE クラスが正常に登録された場合。それ以外の場合 FALSEは .

解説

この関数を使用すると、DLL のアンロード時にクラスの登録が自動的に解除されます。

DLL 以外のビルドでは、アプリケーションに AfxRegisterClass 登録されているクラスは自動的に登録解除されるため、識別子は Windows 関数 RegisterClassにマップされるマクロとして定義されます。 代わりにRegisterClass使用AfxRegisterClassする場合は、アプリケーションと DLL の両方でコードを変更せずに使用できます。

// Register your unique class name that you wish to use
WNDCLASS wndcls;

memset(&wndcls, 0, sizeof(WNDCLASS));   // start with NULL defaults

wndcls.style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;

//you can specify your own window procedure
wndcls.lpfnWndProc = ::DefWindowProc; 
wndcls.hInstance = AfxGetInstanceHandle();
wndcls.hIcon = LoadIcon(wndcls.hInstance, MAKEINTRESOURCE(IDI_MYICON));
wndcls.hCursor = LoadCursor(wndcls.hInstance, MAKEINTRESOURCE(IDC_ARROW));
wndcls.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wndcls.lpszMenuName = NULL;

// Specify your own class name for using FindWindow later
wndcls.lpszClassName = _T("MyNewClass");

// Register the new class and trace if it fails
if(!AfxRegisterClass(&wndcls))
{
   TRACE("Class Registration Failed\n");
}

必要条件

ヘッダーafxwin.h

AfxRegisterWndClass

独自のウィンドウ クラスを登録できます。

LPCTSTR AFXAPI AfxRegisterWndClass(
    UINT nClassStyle,
    HCURSOR hCursor = 0,
    HBRUSH hbrBackground = 0,
    HICON hIcon = 0);

パラメーター

nClassStyle
ウィンドウ クラスのビットごとの OR (|) 演算子を使用して作成された、Windows クラスのスタイルまたはスタイルの組み合わせを指定します。 クラス スタイルの一覧については、Windows SDK の WNDCLASS 構造を参照してください。 の場合 NULL、既定値は次のように設定されます。

  • マウス のスタイルを CS_DBLCLKS設定します。ユーザーがマウスをダブルクリックすると、ウィンドウ プロシージャにダブルクリック メッセージが送信されます。

  • 矢印カーソルのスタイルを Windows 標準 IDC_ARROWに設定します。

  • ウィンドウが背景を NULL消去しないように、背景ブラシを設定します。

  • アイコンを標準の Waving フラグ Windows ロゴ アイコンに設定します。

hCursor
ウィンドウ クラスから作成された各ウィンドウにインストールするカーソル リソースへのハンドルを指定します。 既定値の 0 を使用すると、標準 IDC_ARROW カーソルが表示されます。

hbrBackground
ウィンドウ クラスから作成された各ウィンドウにインストールするブラシ リソースへのハンドルを指定します。 既定値の 0 を使用すると、背景ブラシが NULL 作成され、既定では、処理中 WM_ERASEBKGNDにウィンドウの背景が消去されません。

hIcon
ウィンドウ クラスから作成された各ウィンドウにインストールするアイコン リソースのハンドルを指定します。 既定値の 0 を使用すると、標準の Waving フラグ Windows ロゴ アイコンが表示されます。

戻り値

クラス名を含む null で終わる文字列。 このクラス名をメンバー関数またはその他の Create **CWnd-**派生クラスにCWnd渡してウィンドウを作成できます。 この名前は、Microsoft Foundation クラス ライブラリによって生成されます。

Note

戻り値は、静的バッファーへのポインターです。 この文字列を保存するには、変数に CString 割り当てます。

解説

Microsoft Foundation クラス ライブラリでは、いくつかの標準ウィンドウ クラスが自動的に登録されます。 独自のウィンドウ クラスを登録する場合は、この関数を呼び出します。

クラス AfxRegisterWndClass に登録される名前は、パラメーターのみに依存します。 同じパラメーターを使用して複数回呼び出すと、最初の呼び出 AfxRegisterWndClass しでクラスのみが登録されます。 同じパラメーターを使用した AfxRegisterWndClass 後の呼び出しでは、既に登録されているクラス名が返されます。

クラスごとに個別のウィンドウ クラスを取得する代わりに、同じパラメーターを持つ複数CWndの派生クラスを呼び出AfxRegisterWndClassす場合、各クラスは同じウィンドウ クラスを共有します。 この共有により、クラス スタイルが使用されている場合に CS_CLASSDC 問題が発生する可能性があります。 複数 CS_CLASSDC のウィンドウ クラスの代わりに、最終的には 1 つの CS_CLASSDC ウィンドウ クラスになります。 そのクラスを使用するすべての C++ ウィンドウは、同じ DC を共有します。 この問題を回避するには、クラスの登録を呼び出 AfxRegisterClass します。

ウィンドウ クラスの登録と関数の詳細については、「テクニカル ノート TN001: ウィンドウ クラスの登録 」を AfxRegisterWndClass 参照してください。

CString strMyClass;

// load stock cursor, brush, and icon for
// my own window class

try
{
   strMyClass = AfxRegisterWndClass(
       CS_VREDRAW | CS_HREDRAW,
       ::LoadCursor(NULL, IDC_ARROW),
       (HBRUSH)::GetStockObject(WHITE_BRUSH),
       ::LoadIcon(NULL, IDI_APPLICATION));
}
catch (CResourceException *pEx)
{
   AfxMessageBox(_T("Couldn't register class! (Already registered?)"));
   pEx->Delete();
}

必要条件

ヘッダーafxwin.h

AfxSetPerUserRegistration

アプリケーションがレジストリ アクセスを (HKCU) ノードにHKEY_CURRENT_USERリダイレクトするかどうかを設定します。

void AFXAPI AfxSetPerUserRegistration(BOOL bEnable);

パラメーター

bEnable
[in] TRUE は、レジストリ情報がノードに HKCU 転送されていることを示します。 FALSE は、アプリケーションがレジストリ情報を既定のノードに書き込みます。 既定のノードは (HKCR) ですHKEY_CLASSES_ROOT

解説

Windows Vista より前のバージョンでは、レジストリにアクセスしたアプリケーションでノードが一般的に HKEY_CLASSES_ROOT 使用されました。 ただし、Windows Vista 以降のオペレーティング システムでは、書き込み対象のアプリケーションを管理者特権モードで実行する HKCR必要があります。

このメソッドを使用すると、アプリケーションは、管理者特権モードで実行することなく、レジストリの読み取りと書き込みを行えます。 レジストリへのアクセス HKCR をリダイレクトすることで機能します HKCU。 詳細については、「 Linker Property Pages」を参照してください。

レジストリ リダイレクトを有効にした場合、フレームワークはアクセスを次の場所に HKCR リダイレクトします HKEY_CURRENT_USER\Software\Classes。 MFC および ATL フレームワークのみがリダイレクトの影響を受ける。

既定の実装では、次のレジストリ HKCRにアクセスします。

必要条件

ヘッダーafxstat_.h

AfxSetResourceHandle

この関数を使用して、アプリケーションの既定の HINSTANCE リソースが読み込まれる場所を決定するハンドルを設定します。

void AFXAPI AfxSetResourceHandle(HINSTANCE hInstResource);

パラメーター

hInstResource
アプリケーションのリソースが読み込まれる .EXE または DLL ファイルへのインスタンスまたはモジュール ハンドル。

// This code is taken from CMyApp::InitInstance
HINSTANCE hRes = NULL;
hRes = LoadLibrary(_T("Resource.dll"));
if (hRes)
   AfxSetResourceHandle(hRes);

必要条件

ヘッダーafxwin.h

AfxShellManager

グローバル シェル マネージャーへのポインター。

構文

CShellManager* afxShellManager;

必要条件

ヘッダー:afxshellmanager.h

AfxSocketInit

オーバーライドでこの関数を CWinApp::InitInstance 呼び出して、Windows ソケットを初期化します。

BOOL AfxSocketInit(WSADATA* lpwsaData = NULL);

パラメーター

lpwsaData
WSADATA 構造体へのポインター。 等しくない場合lpwsaDataは、構造体のWSADATAアドレスが呼び出WSAStartupしによって入力NULLされます。 また、この関数を WSACleanup 使用すると、アプリケーションが終了する前に呼び出されます。

戻り値

正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。

解説

静的にリンクされた MFC アプリケーションのセカンダリ スレッドで MFC ソケットを使用する場合は、ソケットを使用してソケット ライブラリを初期化する各スレッドで呼び出す AfxSocketInit 必要があります。 既定では、 AfxSocketInit プライマリ スレッドでのみ呼び出されます。

必要条件

ヘッダーafxsock.h

AfxUserToolsManager

グローバル ユーザー ツール マネージャーへのポインター。

構文

CUserToolsManager* afxUserToolsManager;

必要条件

ヘッダー:afxusertoolsmanager.h

AfxWinInit

この関数は、MFC を初期化するために、GUI ベースのアプリケーションの初期化のCWinApp一環として、MFC 提供WinMainの関数によって呼び出されます。

BOOL AFXAPI AfxWinInit(
    HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPTSTR lpCmdLine,
    int nCmdShow);

パラメーター

hInstance
現在実行中のモジュールのハンドル。

hPrevInstance
アプリケーションの前のインスタンスへのハンドル。 Win32 ベースのアプリケーションの場合、このパラメーターは常に NULL.

lpCmdLine
アプリケーションのコマンド ラインを指定する null で終わる文字列を指します。

nCmdShow
GUI アプリケーションのメイン ウィンドウの表示方法を指定します。

解説

MFC 提供 WinMain の関数を使用しないコンソール アプリケーションの場合は、MFC を初期化するために直接呼び出す AfxWinInit 必要があります。

自分で呼び出す AfxWinInit 場合は、クラスのインスタンスを宣言する CWinApp 必要があります。 コンソール アプリケーションの場合は、独自のクラス CWinApp を派生させないようにし、代わりに直接インスタンス CWinApp を使用することもできます。 この手法は、アプリケーションのすべての機能を実装 mainに残す場合に適しています。

Note

アセンブリのアクティブ化コンテキストを作成すると、MFC はユーザー モジュールによって提供されるマニフェスト リソースを使用します。 アクティブ化コンテキストは次で AfxWinInit作成されます。 詳細については、「MFC モジュール状態でのアクティブ化コンテキストのサポート」を参照してください

#include <afx.h>
#include <afxdb.h>

int _tmain(int /*argc*/, TCHAR * /*argv[]*/, TCHAR * /*envp[]*/)
{
   int nRetCode = 0;

   // initialize MFC and print and error on failure
   if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
   {
      // TODO: change error code to suit your needs
      _tprintf(_T("Fatal Error: MFC initialization failed\n"));
      nRetCode = 1;
   }
   else
   {
      // try to connect to an ODBC database that doesn't exist
      // (this wouldn't work at all without initializing MFC)

      CDatabase db;
      try
      {
         db.Open(_T("This Databsae Doesn't Exist"));

         // we shouldn't realistically get here

         _tprintf_s(_T("Successful!\n")
                    _T("Closing ...\n"));
         db.Close();
         _tprintf_s(_T("Closed!"));
      }
      catch (CDBException *pEx)
      {
         // we got an exception! print an error message
         // (this wouldn't work without initializing MFC)

         TCHAR sz[1024];

         _tprintf_s(_T("Error: "));
         if (pEx->GetErrorMessage(sz, 1024))
            _tprintf_s(sz);
         else
            _tprintf_s(_T("No error message was available"));
         _tprintf_s(_T("\n"));

         pEx->Delete();

         nRetCode = 1;
      }
   }

   return nRetCode;
}

必要条件

ヘッダーafxwin.h

関連項目

マクロとグローバル
CWinApp クラス
CContextMenuManager クラス
CWnd クラス
CFrameWndEx クラス
CMFCToolBar クラス
CKeyboardManager クラス
CMenuTearOffManager クラス
CMouseManager クラス
CShellManager クラス
CUserToolsManager クラス