Bagikan melalui


Informasi dan Manajemen Aplikasi

Saat menulis aplikasi, Anda membuat satu CWinAppobjek turunan. Terkadang, Anda mungkin ingin mendapatkan informasi tentang objek ini dari luar CWinAppobjek -turunan. Atau Anda mungkin memerlukan akses ke objek "manajer" global lainnya.

Pustaka Kelas Microsoft Foundation menyediakan fungsi global berikut untuk membantu Anda menyelesaikan tugas-tugas ini:

Fungsi Informasi dan Manajemen Aplikasi

Nama Deskripsi
AfxBeginThread Membuat utas baru.
AfxContextMenuManager Arahkan ke manajer menu konteks global.
AfxEndThread Mengakhiri utas saat ini.
AfxFindResourceHandle Memanjakan rantai sumber daya dan menemukan sumber daya tertentu berdasarkan ID sumber daya dan jenis sumber daya.
AfxFreeLibrary Mengurangi jumlah referensi modul pustaka tautan dinamis (DLL) yang dimuat. Ketika jumlah referensi mencapai nol, modul tidak dipetakan.
AfxGetApp Mengembalikan penunjuk ke objek tunggal CWinApp aplikasi.
AfxGetAppName Mengembalikan string yang berisi nama aplikasi.
AfxGetInstanceHandle Mengembalikan yang HINSTANCE mewakili instans aplikasi ini.
AfxGetMainWnd Mengembalikan penunjuk ke jendela "utama" saat ini dari aplikasi non-OLE, atau jendela bingkai di tempat aplikasi server.
AfxGetPerUserRegistration Gunakan fungsi ini untuk menentukan apakah aplikasi mengalihkan akses registri ke HKEY_CURRENT_USER simpul (HKCU).
AfxGetResourceHandle Mengembalikan HINSTANCE ke sumber sumber daya default aplikasi. Gunakan untuk mengakses sumber daya aplikasi secara langsung.
AfxGetThread Mengambil penunjuk ke objek CWinThread saat ini.
AfxInitRichEdit Menginisialisasi kontrol edit kaya versi 1.0 untuk aplikasi.
AfxInitRichEdit2 Menginisialisasi kontrol edit kaya versi 2.0 dan yang lebih baru untuk aplikasi.
AfxIsExtendedFrameClass Menentukan apakah jendela yang diberikan adalah objek bingkai yang diperluas.
AfxIsMFCToolBar Menentukan apakah jendela yang diberikan adalah objek bilah alat.
AfxKeyboardManager Arahkan ke manajer keyboard global.
AfxLoadLibrary Memetakan modul DLL dan mengembalikan handel yang dapat digunakan untuk mendapatkan alamat fungsi DLL.
AfxLoadLibraryEx Memetakan modul DLL menggunakan opsi yang ditentukan, dan mengembalikan handel yang dapat digunakan untuk mendapatkan alamat fungsi DLL.
AfxMenuTearOffManager Arahkan ke manajer menu tear-off global.
AfxMouseManager Arahkan ke manajer mouse global.
AfxRegisterClass Mendaftarkan kelas jendela di DLL yang menggunakan MFC.
AfxRegisterWndClass Mendaftarkan kelas jendela Windows untuk melengkapi kelas yang terdaftar secara otomatis oleh MFC.
AfxSetPerUserRegistration Mengatur apakah aplikasi mengalihkan akses registri ke HKEY_CURRENT_USER simpul (HKCU).
AfxSetResourceHandle Mengatur handel HINSTANCE tempat sumber daya default aplikasi dimuat.
AfxShellManager Arahkan ke manajer shell global.
AfxSocketInit Dipanggil dalam CWinApp::InitInstance penimpaan untuk menginisialisasi Windows Sockets.
AfxUserToolsManager Arahkan ke manajer alat pengguna global.
AfxWinInit Dipanggil oleh fungsi yang disediakan WinMain MFC, sebagai bagian CWinApp dari inisialisasi aplikasi berbasis GUI, untuk menginisialisasi MFC. Harus dipanggil langsung untuk aplikasi konsol yang menggunakan MFC.

AfxBeginThread

Panggil fungsi ini untuk membuat utas baru.

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);

Parameter

pfnThreadProc
Menunjuk ke fungsi pengontrol untuk utas pekerja. Penunjuk tidak boleh NULL. Fungsi ini harus dideklarasikan sebagai berikut:

UINT __cdecl MyControllingFunction( LPVOID pParam );

pThreadClass
Dari RUNTIME_CLASS objek yang berasal dari CWinThread.

pParam
Parameter untuk diteruskan ke fungsi pengontrol.

nPriority
Prioritas yang akan diatur untuk utas. Untuk daftar lengkap dan deskripsi prioritas yang tersedia, lihat SetThreadPriority di Windows SDK.

nStackSize
Menentukan ukuran dalam byte tumpukan untuk utas baru. Jika 0, ukuran tumpukan default ke tumpukan ukuran yang sama dengan alur pembuatan.

dwCreateFlags
Menentukan bendera tambahan yang mengontrol pembuatan utas. Bendera ini dapat berisi salah satu dari dua nilai:

  • CREATE_SUSPENDED Mulai utas dengan jumlah yang ditangguhkan. Gunakan CREATE_SUSPENDED jika Anda ingin menginisialisasi data CWinThread anggota objek apa pun, seperti m_bAutoDelete atau anggota kelas turunan Anda, sebelum utas mulai berjalan. Setelah inisialisasi Anda selesai, gunakan CWinThread::ResumeThread untuk memulai utas yang berjalan. Utas tidak akan dijalankan sampai CWinThread::ResumeThread dipanggil.

  • 0 Mulai utas segera setelah pembuatan.

lpSecurityAttrs
Menunjuk ke SECURITY_ATTRIBUTES struktur yang menentukan atribut keamanan untuk utas. Jika NULL, atribut keamanan yang sama dengan alur pembuatan digunakan. Untuk informasi selengkapnya tentang struktur ini, lihat Windows SDK.

Tampilkan Nilai

Arahkan ke objek utas yang baru dibuat, atau NULL jika terjadi kegagalan.

Keterangan

Bentuk pertama dari AfxBeginThread membuat utas pekerja. Formulir kedua membuat utas yang dapat berfungsi sebagai utas antarmuka pengguna atau sebagai utas pekerja.

AfxBeginThread membuat objek baru CWinThread , memanggil fungsinya CreateThread untuk mulai menjalankan utas, dan mengembalikan penunjuk ke utas. Pemeriksaan dilakukan di seluruh prosedur untuk memastikan semua objek dibatalkan alokasinya dengan benar jika bagian mana pun dari pembuatan gagal. Untuk mengakhiri utas, panggil AfxEndThread dari dalam utas, atau kembali dari fungsi pengontrol utas pekerja.

Multithreading harus diaktifkan oleh aplikasi; jika tidak, fungsi ini akan gagal. Untuk informasi selengkapnya tentang mengaktifkan multithreading, lihat /MD, , /MT/LD (Gunakan pustaka run-time).

Untuk informasi selengkapnya tentang AfxBeginThread, lihat artikel Multithreading: Membuat Utas Pekerja dan Multithreading: Membuat Utas Antarmuka Pengguna.

Contoh

Lihat contoh untuk CSocket::Attach.

Persyaratan

Header afxwin.h

AfxContextMenuManager

Arahkan ke manajer menu konteks global.

Sintaks

CContextMenuManager* afxContextMenuManager;

Persyaratan

Header: afxcontextmenumanager.h

AfxEndThread

Panggil fungsi ini untuk mengakhiri utas yang sedang dijalankan.

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

Parameter

nExitCode
Menentukan kode keluar utas.

bDelete
Menghapus objek utas dari memori.

Keterangan

Harus dipanggil dari dalam utas untuk dihentikan.

Untuk informasi selengkapnya tentang AfxEndThread, lihat artikel Multithreading: Mengakhiri Utas.

Persyaratan

Header afxwin.h

AfxFindResourceHandle

Gunakan AfxFindResourceHandle untuk memanjakan rantai sumber daya dan menemukan sumber daya tertentu berdasarkan ID sumber daya dan jenis sumber daya.

Sintaks

HINSTANCE AFXAPI AfxFindResourceHandle( LPCTSTR lpszName,  LPCTSTR lpszType );

Parameter

lpszName
Penunjuk ke string yang berisi ID sumber daya. lpszType
Penunjuk ke jenis sumber daya. Untuk daftar jenis sumber daya, lihat FindResource di Windows SDK.

Tampilkan Nilai

Handel ke modul yang berisi sumber daya.

Keterangan

AfxFindResourceHandle menemukan sumber daya tertentu, dan mengembalikan handel ke modul yang berisi sumber daya. Sumber daya mungkin berada di DLL ekstensi MFC apa pun yang dimuat. AfxFindResourceHandle memberi tahu Anda mana yang memiliki sumber daya.

Modul dicari dalam urutan ini:

  1. Modul utama, jika itu adalah DLL ekstensi MFC.

  2. Modul non-sistem.

  3. Modul khusus bahasa.

  4. Modul utama, jika itu adalah DLL sistem.

  5. Modul sistem.

Persyaratan

Header: afxwin.h

AfxFreeLibrary

Baik AfxFreeLibrary dan AfxLoadLibrary pertahankan jumlah referensi untuk setiap modul pustaka yang dimuat.

BOOL AFXAPI AfxFreeLibrary(HINSTANCE hInstLib);

Parameter

hInstLib
Handel modul pustaka yang dimuat. AfxLoadLibrary mengembalikan handel ini.

Tampilkan Nilai

TRUE jika fungsi berhasil; jika tidak, FALSE.

Keterangan

AfxFreeLibrary mengurangi jumlah referensi modul pustaka tautan dinamis (DLL) yang dimuat. Ketika jumlah referensi mencapai nol, modul tidak dipetakan dari ruang alamat proses panggilan dan handel tidak lagi valid. Jumlah referensi ini bertambah setiap kali AfxLoadLibrary dipanggil.

Sebelum membatalkan pembukaan modul pustaka, sistem memungkinkan DLL untuk melepaskan dari proses menggunakannya. Melakukannya memberi DLL kesempatan untuk membersihkan sumber daya yang dialokasikan untuk proses saat ini. Setelah fungsi titik entri kembali, modul pustaka dihapus dari ruang alamat proses saat ini.

Gunakan AfxLoadLibrary untuk memetakan modul DLL.

Pastikan untuk menggunakan AfxFreeLibrary dan AfxLoadLibrary (alih-alih fungsi FreeLibrary Win32 dan LoadLibrary) jika aplikasi Anda menggunakan beberapa utas. Menggunakan AfxLoadLibrary dan AfxFreeLibrary memastikan bahwa kode startup dan shutdown yang dijalankan saat DLL ekstensi MFC dimuat dan dibongkar tidak merusak status MFC global.

Contoh

Lihat contoh untuk AfxLoadLibrary.

Persyaratan

Header afxdll_.h

AfxGetApp

Pointer yang dikembalikan oleh fungsi ini dapat digunakan untuk mengakses informasi aplikasi seperti kode pengiriman pesan utama atau jendela paling atas.

CWinApp* AFXAPI AfxGetApp();

Tampilkan Nilai

Penunjuk ke objek tunggal CWinApp untuk aplikasi.

Keterangan

Jika metode ini mengembalikan NULL, mungkin menunjukkan bahwa jendela utama aplikasi belum sepenuhnya diinisialisasi. Ini mungkin juga menunjukkan masalah.

Contoh

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

Persyaratan

Header afxwin.h

AfxGetAppName

String yang dikembalikan dapat digunakan untuk pesan diagnostik, atau sebagai akar untuk nama string sementara.

LPCTSTR AFXAPI AfxGetAppName();

Tampilkan Nilai

String null-terminated yang berisi nama aplikasi.

Contoh

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

Persyaratan

Header afxwin.h

AfxGetInstanceHandle

Fungsi ini memungkinkan Anda untuk mengambil handel instans aplikasi saat ini.

HINSTANCE  AFXAPI AfxGetInstanceHandle();

Tampilkan Nilai

Ke HINSTANCE instans aplikasi saat ini. Jika dipanggil dari dalam DLL yang ditautkan dengan MFC versi USRDLL, HINSTANCE dll akan dikembalikan.

Keterangan

AfxGetInstanceHandle selalu mengembalikan HINSTANCE file yang dapat dieksekusi (.EXE) kecuali dipanggil dari dalam DLL yang ditautkan dengan MFC versi USRDLL. Dalam hal ini, ia mengembalikan HINSTANCE ke DLL.

Contoh

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

Persyaratan

Header afxwin.h

AfxGetMainWnd

Jika aplikasi Anda adalah server OLE, panggil fungsi ini untuk mengambil penunjuk ke jendela utama aktif aplikasi. Gunakan hasil ini alih-alih langsung merujuk ke m_pMainWnd anggota objek aplikasi.

CWnd* AFXAPI AfxGetMainWnd();

Tampilkan Nilai

Mengembalikan penunjuk ke objek jendela bingkai yang berisi dokumen aktif di tempat, jika server memiliki objek yang aktif di tempat di dalam kontainer aktif.

Jika tidak ada objek yang aktif di tempat dalam kontainer, atau aplikasi Anda bukan server OLE, fungsi ini mengembalikan m_pMainWnd objek aplikasi Anda.

Jika AfxGetMainWnd dipanggil dari utas utama aplikasi, aplikasi mengembalikan jendela utama aplikasi sesuai dengan aturan di atas. Jika fungsi dipanggil dari utas sekunder dalam aplikasi, fungsi mengembalikan jendela utama yang terkait dengan utas yang melakukan panggilan.

Keterangan

Jika aplikasi Anda bukan server OLE, maka memanggil fungsi ini setara dengan langsung merujuk ke m_pMainWnd anggota objek aplikasi Anda.

Contoh

//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);

Persyaratan

Header afxwin.h

AfxGetPerUserRegistration

Gunakan fungsi ini untuk menentukan apakah aplikasi mengalihkan akses registri ke HKEY_CURRENT_USER simpul (HKCU).

BOOL AFXAPI AfxGetPerUserRegistration();

Tampilkan Nilai

TRUE menunjukkan informasi registri diarahkan ke simpul HKCU . FALSE menunjukkan aplikasi menulis informasi registri ke simpul default. Simpul default adalah HKEY_CLASSES_ROOT (HKCR).

Keterangan

Jika Anda mengaktifkan pengalihan registri, kerangka kerja mengalihkan akses dari HKCR ke HKEY_CURRENT_USER\Software\Classes. Hanya kerangka kerja MFC dan ATL yang dipengaruhi oleh pengalihan.

Untuk mengubah apakah aplikasi mengalihkan akses registri, gunakan AfxSetPerUserRegistration.

Persyaratan

Header afxstat_.h

AfxGetResourceHandle

Gunakan handel yang HINSTANCE dikembalikan oleh fungsi ini untuk mengakses sumber daya aplikasi secara langsung, misalnya, dalam panggilan ke fungsi FindResourceWindows .

extern HINSTANCE  AfxGetResourceHandle();

Tampilkan Nilai

Handel HINSTANCE tempat sumber daya default aplikasi dimuat.

Contoh

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

Persyaratan

Header afxwin.h

AfxGetThread

Panggil fungsi ini untuk mendapatkan penunjuk ke objek yang CWinThread mewakili utas yang sedang dijalankan.

CWinThread* AfxGetThread();

Tampilkan Nilai

Penunjuk ke utas yang sedang dijalankan; jika tidak NULL.

Keterangan

Harus dipanggil dari dalam utas.

Catatan

Jika Anda mentransfer panggilan AfxGetThread proyek MFC dari Visual C++ versi 4.2, 5.0, atau 6.0, AfxGetThread panggilan jika tidak ada utas AfxGetApp yang ditemukan. Dalam versi pengkompilasi yang lebih baru, AfxGetThread mengembalikan jika tidak ada utas NULL yang ditemukan. Jika Anda menginginkan utas aplikasi, Anda harus memanggil AfxGetApp.

Contoh

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

Persyaratan

Header afxwin.h

AfxInitRichEdit

Panggil fungsi ini untuk menginisialisasi kontrol edit kaya (versi 1.0) untuk aplikasi.

BOOL AFXAPI AfxInitRichEdit();

Keterangan

Fungsi ini disediakan untuk kompatibilitas mundur. Aplikasi baru harus menggunakan AfxInitRichEdit2.

AfxInitRichEditRICHED32.DLL memuat untuk menginisialisasi kontrol edit kaya versi 1.0. Untuk menggunakan kontrol edit kaya versi 2.0 dan 3.0, RICHED20.DLL perlu dimuat. Ini dimuat dengan melakukan panggilan ke AfxInitRichEdit2.

Untuk memperbarui kontrol edit kaya di aplikasi Visual C++ yang ada ke versi 2.0, buka . File RC sebagai teks, ubah nama kelas setiap kontrol edit kaya dari "RICHEDIT" menjadi "RichEdit20a". Kemudian ganti panggilan ke AfxInitRichEdit dengan AfxInitRichEdit2.

Fungsi ini juga menginisialisasi pustaka kontrol umum, jika pustaka belum diinisialisasi untuk proses tersebut. Jika Anda menggunakan kontrol edit kaya langsung dari aplikasi MFC Anda, panggil fungsi ini untuk memastikan bahwa MFC telah menginisialisasi runtime kontrol edit yang kaya dengan benar. Jika Anda memanggil Create metode CRichEditCtrl, , CRichEditViewatau CRichEditDoc, Anda biasanya tidak perlu memanggil fungsi ini, tetapi dalam beberapa kasus mungkin diperlukan.

Persyaratan

Header afxwin.h

AfxInitRichEdit2

Panggil fungsi ini untuk menginisialisasi kontrol edit kaya (versi 2.0 dan yang lebih baru) untuk aplikasi.

BOOL AFXAPI AfxInitRichEdit2();

Keterangan

Panggil fungsi ini untuk memuat RICHED20.DLL dan menginisialisasi versi 2.0 dari kontrol edit kaya. Jika Anda memanggil Create metode CRichEditCtrl, , CRichEditViewatau CRichEditDoc, Anda biasanya tidak perlu memanggil fungsi ini, tetapi dalam beberapa kasus mungkin diperlukan.

Persyaratan

Header afxwin.h

AfxIsExtendedFrameClass

Menentukan apakah jendela yang diberikan adalah objek bingkai yang diperluas.

Sintaks

BOOL AFXAPI AfxIsExtendedFrameClass( CWnd* pWnd );

Parameter

pWnd
[di] Penunjuk ke objek yang berasal dari CWnd.

Tampilkan Nilai

TRUE jika jendela yang disediakan adalah objek bingkai yang diperluas; jika tidak FALSE.

Keterangan

Metode ini mengembalikan TRUE jika pWnd berasal dari salah satu kelas berikut:

  • CFrameWndEx

  • CMDIFrameWndEx

  • COleIPFrameWndEx

  • COleDocIPFrameWndEx

  • CMDIChildWndEx

Metode ini berguna ketika Anda harus memvalidasi bahwa parameter fungsi atau metode adalah jendela bingkai yang diperluas.

Persyaratan

Header: afxpriv.h

AfxIsMFCToolBar

Menentukan apakah jendela yang diberikan adalah objek bilah alat.

Sintaks

BOOL AFXAPI AfxIsMFCToolBar(CWnd* pWnd);

Parameter

pWnd
[di] Penunjuk ke objek yang berasal dari CWnd.

Tampilkan Nilai

TRUE jika jendela yang disediakan adalah objek toolbar; jika tidak FALSE.

Keterangan

Metode ini mengembalikan TRUE jika pWnd berasal dari CMFCToolBar. Metode ini berguna ketika Anda harus memvalidasi bahwa parameter fungsi atau metode adalah CMFCToolBar objek.

Persyaratan

Header: afxpriv.h

AfxKeyboardManager

Arahkan ke manajer keyboard global.

Sintaks

CKeyboardManager* afxKeyboardManager;

Persyaratan

Header: afxkeyboardmanager.h

AfxLoadLibrary

Gunakan AfxLoadLibrary untuk memetakan modul DLL.

HINSTANCE AFXAPI AfxLoadLibrary(LPCTSTR lpszModuleName);

Parameter

lpszModuleName
Menunjuk ke string null-terminated yang berisi nama modul (baik file .DLL atau .EXE). Nama yang ditentukan adalah nama file modul.

Jika string menentukan jalur tetapi file tidak ada di direktori yang ditentukan, fungsi gagal.

Jika jalur tidak ditentukan dan ekstensi nama file dihilangkan, ekstensi default .DLL ditambahkan. Namun, string nama file dapat menyertakan karakter titik berikutnya (.) untuk menunjukkan bahwa nama modul tidak memiliki ekstensi. Ketika tidak ada jalur yang ditentukan, fungsi menggunakan Urutan Pencarian untuk Aplikasi Desktop.

Tampilkan Nilai

Jika fungsi berhasil, nilai pengembalian adalah handel ke modul. Jika gagal, nilai yang dikembalikan adalah NULL.

Keterangan

Ini mengembalikan handel yang dapat digunakan GetProcAddress untuk mendapatkan alamat fungsi DLL. AfxLoadLibrary juga dapat digunakan untuk memetakan modul lain yang dapat dieksekusi.

Setiap proses mempertahankan jumlah referensi untuk setiap modul pustaka yang dimuat. Jumlah referensi ini bertambah setiap kali AfxLoadLibrary dipanggil dan dikurangi setiap kali AfxFreeLibrary dipanggil. Ketika jumlah referensi mencapai nol, modul tidak dipetakan dari ruang alamat proses panggilan dan handel tidak lagi valid.

Pastikan untuk menggunakan AfxLoadLibrary dan AfxFreeLibrary (alih-alih fungsi LoadLibrary Win32 dan FreeLibrary) jika aplikasi Anda menggunakan beberapa utas, dan jika secara dinamis memuat DLL ekstensi MFC. Menggunakan AfxLoadLibrary dan AfxFreeLibrary memastikan bahwa kode startup dan shutdown yang dijalankan ketika DLL ekstensi MFC dimuat dan dibongkar tidak merusak status MFC global.

Menggunakan AfxLoadLibrary dalam aplikasi mengharuskan Anda untuk secara dinamis menautkan ke MFC versi DLL. File header untuk AfxLoadLibrary, Afxdll_.h, hanya disertakan jika MFC ditautkan ke aplikasi sebagai DLL. Persyaratan ini dirancang, karena Anda harus menautkan ke versi DLL MFC untuk menggunakan atau membuat DLL ekstensi MFC.

Contoh

// 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();
}

Persyaratan

Header afxdll_.h

AfxLoadLibraryEx

Gunakan AfxLoadLibraryEx untuk memetakan modul DLL.

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

Parameter

lpFileName
Menunjuk ke string null-terminated yang berisi nama modul (baik file .DLL atau .EXE). Nama yang ditentukan adalah nama file modul.

Jika string menentukan jalur tetapi file tidak ada di direktori yang ditentukan, fungsi gagal.

Jika jalur tidak ditentukan dan ekstensi nama file dihilangkan, ekstensi default .DLL ditambahkan. Namun, string nama file dapat menyertakan karakter titik berikutnya (.) untuk menunjukkan bahwa nama modul tidak memiliki ekstensi. Ketika tidak ada jalur yang ditentukan, fungsi menggunakan Urutan Pencarian untuk Aplikasi Desktop.

hFile
Parameter ini dicadangkan untuk digunakan di masa mendatang. Harus .NULL

dwFlags
Tindakan yang akan diambil saat memuat modul. Jika tidak ada bendera yang ditentukan, perilaku fungsi ini identik dengan AfxLoadLibrary fungsi . Nilai yang mungkin dari parameter ini dijelaskan dalam LoadLibraryEx dokumentasi.

Tampilkan Nilai

Jika fungsi berhasil, nilai pengembalian adalah handel ke modul. Jika gagal, nilai yang dikembalikan adalah NULL.

Keterangan

AfxLoadLibraryEx mengembalikan handel yang dapat digunakan GetProcAddress untuk mendapatkan alamat fungsi DLL. AfxLoadLibraryEx juga dapat digunakan untuk memetakan modul lain yang dapat dieksekusi.

Setiap proses mempertahankan jumlah referensi untuk setiap modul pustaka yang dimuat. Jumlah referensi ini bertambah setiap kali AfxLoadLibraryEx dipanggil dan dikurangi setiap kali AfxFreeLibrary dipanggil. Ketika jumlah referensi mencapai nol, modul tidak dipetakan dari ruang alamat proses panggilan dan handel tidak lagi valid.

Pastikan untuk menggunakan AfxLoadLibraryEx dan AfxFreeLibrary (alih-alih fungsi LoadLibraryEx Win32 dan FreeLibrary) jika aplikasi Anda menggunakan beberapa utas dan jika secara dinamis memuat DLL ekstensi MFC. Menggunakan AfxLoadLibraryEx dan AfxFreeLibrary memastikan bahwa kode startup dan shutdown yang dijalankan saat DLL ekstensi MFC dimuat dan dibongkar tidak merusak status MFC global.

Menggunakan AfxLoadLibraryEx dalam aplikasi mengharuskan Anda untuk secara dinamis menautkan ke MFC versi DLL. File header untuk AfxLoadLibraryEx, Afxdll_.h, hanya disertakan jika MFC ditautkan ke aplikasi sebagai DLL. Persyaratan ini dirancang, karena Anda harus menautkan ke versi DLL MFC untuk menggunakan atau membuat DLL ekstensi MFC.

Persyaratan

Header afxdll_.h

AfxMenuTearOffManager

Arahkan ke manajer menu tear-off global.

Sintaks

CMenuTearOffManager* g_pTearOffMenuManager;

Persyaratan

Header: afxmenutearoffmanager.h

AfxMouseManager

Arahkan ke manajer mouse global.

Sintaks

CMouseManager* afxMouseManager;

Persyaratan

Header: afxmousemanager.h

AfxRegisterClass

Gunakan fungsi ini untuk mendaftarkan kelas jendela di DLL yang menggunakan MFC.

BOOL AFXAPI AfxRegisterClass(WNDCLASS* lpWndClass);

Parameter

lpWndClass
Penunjuk ke struktur yang WNDCLASS berisi informasi tentang kelas jendela yang akan didaftarkan. Untuk informasi selengkapnya tentang struktur ini, lihat Windows SDK.

Tampilkan Nilai

TRUE jika kelas berhasil didaftarkan; jika tidak FALSE.

Keterangan

Jika Anda menggunakan fungsi ini, kelas secara otomatis tidak terdaftar saat DLL dibongkar.

Dalam build non-DLL, AfxRegisterClass pengidentifikasi didefinisikan sebagai makro yang memetakan ke fungsi RegisterClassWindows , karena kelas yang terdaftar dalam aplikasi secara otomatis tidak terdaftar. Jika Anda menggunakan AfxRegisterClass alih-alih RegisterClass, kode Anda dapat digunakan tanpa mengubah baik dalam aplikasi maupun di DLL.

Contoh

// 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");
}

Persyaratan

Header afxwin.h

AfxRegisterWndClass

Memungkinkan Anda mendaftarkan kelas jendela Anda sendiri.

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

Parameter

nClassStyle
Menentukan gaya kelas Windows atau kombinasi gaya, yang dibuat dengan menggunakan operator bitwise-OR (|), untuk kelas jendela. Untuk daftar gaya kelas, lihat WNDCLASS struktur di Windows SDK. Jika NULL, default diatur sebagai berikut:

  • Mengatur gaya mouse ke CS_DBLCLKS, yang mengirim pesan klik ganda ke prosedur jendela saat pengguna mengklik dua kali mouse.

  • Mengatur gaya kursor panah ke standar IDC_ARROWWindows .

  • Mengatur kuas latar belakang ke NULL, sehingga jendela tidak akan menghapus latar belakangnya.

  • Mengatur ikon ke ikon logo Windows standar berbendera melambaikan tangan.

hCursor
Menentukan handel ke sumber daya kursor yang akan diinstal di setiap jendela yang dibuat dari kelas jendela. Jika Anda menggunakan default 0, Anda akan mendapatkan kursor standar IDC_ARROW .

hbrBackground
Menentukan handel ke sumber daya kuas yang akan diinstal di setiap jendela yang dibuat dari kelas jendela. Jika Anda menggunakan default 0, Anda akan memiliki NULL kuas latar belakang, dan secara default, jendela Anda tidak akan menghapus latar belakangnya saat memproses WM_ERASEBKGND.

hIcon
Menentukan handel ke sumber daya ikon yang akan diinstal di setiap jendela yang dibuat dari kelas jendela. Jika Anda menggunakan default 0, Anda akan mendapatkan ikon logo Windows standar berbendera melambaikan bendera.

Tampilkan Nilai

String null-terminated yang berisi nama kelas. Anda dapat meneruskan nama kelas ini ke Create fungsi anggota di CWnd atau **CWnd-**kelas turunan lainnya untuk membuat jendela. Nama ini dihasilkan oleh Pustaka Kelas Microsoft Foundation.

Catatan

Nilai yang dikembalikan adalah penunjuk ke buffer statis. Untuk menyimpan string ini, tetapkan ke CString variabel.

Keterangan

Pustaka Kelas Microsoft Foundation secara otomatis mendaftarkan beberapa kelas jendela standar untuk Anda. Panggil fungsi ini jika Anda ingin mendaftarkan kelas jendela Anda sendiri.

Nama yang terdaftar untuk kelas berdasarkan AfxRegisterWndClass hanya bergantung pada parameter. Jika Anda memanggil AfxRegisterWndClass beberapa kali dengan parameter yang identik, itu hanya mendaftarkan kelas pada panggilan pertama. Kemudian memanggil dengan AfxRegisterWndClass parameter yang identik mengembalikan nama kelas yang sudah terdaftar.

Jika Anda memanggil AfxRegisterWndClass beberapa CWndkelas turunan dengan parameter yang identik, alih-alih mendapatkan kelas jendela terpisah untuk setiap kelas, setiap kelas berbagi kelas jendela yang sama. Berbagi ini dapat menyebabkan masalah jika CS_CLASSDC gaya kelas digunakan. Alih-alih beberapa CS_CLASSDC kelas jendela, Anda hanya berakhir dengan satu CS_CLASSDC kelas jendela. Semua jendela C++ yang menggunakan kelas tersebut memiliki DC yang sama. Untuk menghindari masalah ini, panggil AfxRegisterClass untuk mendaftarkan kelas.

Lihat Catatan Teknis TN001: Pendaftaran Kelas Jendela untuk informasi selengkapnya tentang pendaftaran kelas jendela dan AfxRegisterWndClass fungsi .

Contoh

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();
}

Persyaratan

Header afxwin.h

AfxSetPerUserRegistration

Mengatur apakah aplikasi mengalihkan akses registri ke HKEY_CURRENT_USER simpul (HKCU).

void AFXAPI AfxSetPerUserRegistration(BOOL bEnable);

Parameter

bEnable
[di] TRUE menunjukkan informasi registri diarahkan ke simpul HKCU . FALSE menunjukkan aplikasi menulis informasi registri ke simpul default. Simpul default adalah HKEY_CLASSES_ROOT (HKCR).

Keterangan

Sebelum Windows Vista, aplikasi yang mengakses registri biasanya menggunakan simpul HKEY_CLASSES_ROOT . Namun, dengan Windows Vista atau sistem operasi yang lebih baru, Anda harus menjalankan aplikasi dalam mode yang ditingkatkan untuk menulis ke HKCR.

Metode ini memungkinkan aplikasi Anda untuk membaca dan menulis ke registri tanpa berjalan dalam mode yang ditinggikan. Ini berfungsi dengan mengalihkan akses registri dari HKCR ke HKCU. Untuk informasi selengkapnya, lihat Halaman Properti Linker.

Jika Anda mengaktifkan pengalihan registri, kerangka kerja mengalihkan akses dari HKCR ke HKEY_CURRENT_USER\Software\Classes. Hanya kerangka kerja MFC dan ATL yang dipengaruhi oleh pengalihan.

Implementasi default mengakses registri di bawah HKCR.

Persyaratan

Header afxstat_.h

AfxSetResourceHandle

Gunakan fungsi ini untuk mengatur HINSTANCE handel yang menentukan tempat sumber daya default aplikasi dimuat.

void AFXAPI AfxSetResourceHandle(HINSTANCE hInstResource);

Parameter

hInstResource
Instans atau modul menangani file .EXE atau DLL tempat sumber daya aplikasi dimuat.

Contoh

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

Persyaratan

Header afxwin.h

AfxShellManager

Arahkan ke manajer shell global.

Sintaks

CShellManager* afxShellManager;

Persyaratan

Header: afxshellmanager.h

AfxSocketInit

Panggil fungsi ini dalam penimpaan Anda CWinApp::InitInstance untuk menginisialisasi Windows Sockets.

BOOL AfxSocketInit(WSADATA* lpwsaData = NULL);

Parameter

lpwsaData
Penunjuk ke WSADATA struktur. Jika lpwsaData tidak sama dengan NULL, maka alamat struktur diisi WSADATA oleh panggilan ke WSAStartup. Fungsi ini juga memastikan bahwa WSACleanup dipanggil untuk Anda sebelum aplikasi berakhir.

Tampilkan Nilai

Bukan nol jika fungsi berhasil; jika tidak, 0.

Keterangan

Saat menggunakan soket MFC di utas sekunder dalam aplikasi MFC yang ditautkan secara statis, Anda harus memanggil AfxSocketInit di setiap utas yang menggunakan soket untuk menginisialisasi pustaka soket. Secara default, AfxSocketInit hanya dipanggil di utas utama.

Persyaratan

Header afxsock.h

AfxUserToolsManager

Arahkan ke manajer alat pengguna global.

Sintaks

CUserToolsManager* afxUserToolsManager;

Persyaratan

Header: afxusertoolsmanager.h

AfxWinInit

Fungsi ini disebut oleh fungsi yang disediakan WinMain MFC, sebagai bagian CWinApp dari inisialisasi aplikasi berbasis GUI, untuk menginisialisasi MFC.

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

Parameter

hInstance
Handel modul yang sedang berjalan.

hPrevInstance
Handel ke instans aplikasi sebelumnya. Untuk aplikasi berbasis Win32, parameter ini selalu NULL.

lpCmdLine
Menunjuk ke string null-terminated yang menentukan baris perintah untuk aplikasi.

nCmdShow
Menentukan bagaimana jendela utama aplikasi GUI akan ditampilkan.

Keterangan

Untuk aplikasi konsol, yang tidak menggunakan fungsi yang disediakan WinMain MFC, Anda harus memanggil AfxWinInit langsung untuk menginisialisasi MFC.

Jika Anda memanggil AfxWinInit diri Anda sendiri, Anda harus mendeklarasikan instans CWinApp kelas. Untuk aplikasi konsol, Anda dapat memilih untuk tidak memperoleh kelas Anda sendiri dan CWinApp sebaliknya menggunakan instans secara CWinApp langsung. Teknik ini sesuai jika Anda memutuskan untuk meninggalkan semua fungsionalitas untuk aplikasi Anda dalam implementasi Anda .main

Catatan

Saat membuat konteks aktivasi untuk perakitan, MFC menggunakan sumber daya manifes yang disediakan oleh modul pengguna. Konteks aktivasi dibuat di AfxWinInit. Untuk informasi selengkapnya, lihat Dukungan untuk Konteks Aktivasi dalam Status Modul MFC.

Contoh

#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;
}

Persyaratan

Header afxwin.h

Lihat juga

Makro dan Global
CWinApp Kelas
CContextMenuManager Kelas
CWnd Kelas
CFrameWndEx Kelas
CMFCToolBar Kelas
CKeyboardManager Kelas
CMenuTearOffManager Kelas
CMouseManager Kelas
CShellManager Kelas
CUserToolsManager Kelas