Bagikan melalui


Menggunakan file sumber MFC

Pustaka Microsoft Foundation Class (MFC) menyediakan kode sumber lengkap. File header (.h) berada di direktori \atlmfc\include . File implementasi (.cpp) berada di direktori \atlmfc\src\mfc .

Artikel ini menjelaskan konvensi yang digunakan MFC untuk mengomentari berbagai bagian dari setiap kelas, apa arti komentar ini, dan apa yang harus Anda harapkan untuk ditemukan di setiap bagian. Wizard Visual Studio menggunakan konvensi serupa untuk kelas yang mereka buat untuk Anda, dan Anda mungkin akan menemukan konvensi ini berguna untuk kode Anda sendiri.

Anda mungkin terbiasa dengan publickata kunci , , protecteddan private C++. Dalam file header MFC, Anda akan menemukan setiap kelas mungkin memiliki beberapa dari masing-masing kelas. Misalnya, variabel dan fungsi anggota publik mungkin berada di bawah lebih dari satu public kata kunci. Ini karena MFC memisahkan variabel dan fungsi anggota berdasarkan penggunaannya, bukan oleh jenis akses yang diizinkan. MFC menggunakan private dengan hemat. Bahkan item yang dianggap detail implementasi sering protected, dan berkali-kali adalah public. Meskipun akses ke detail implementasi tidak disarankan, MFC meninggalkan keputusan kepada Anda.

Dalam file sumber MFC dan file header yang dibuat MFC Application Wizard, Anda akan menemukan komentar seperti ini dalam deklarasi kelas (biasanya dalam urutan ini):

// Constructors

// Attributes

// Operations

// Overridables

// Implementation

Contoh komentar

Daftar CStdioFile kelas parsial berikut menggunakan sebagian besar komentar standar yang digunakan MFC di kelasnya untuk membagi anggota kelas dengan cara mereka digunakan:

/*============================================================================*/
// STDIO file implementation

class CStdioFile : public CFile
{
    DECLARE_DYNAMIC(CStdioFile)

public:
// Constructors
    CStdioFile();

    // . . .

// Attributes
    FILE* m_pStream;    // stdio FILE
                        // m_hFile from base class is _fileno(m_pStream)

// Operations
    // reading and writing strings
    virtual void WriteString(LPCTSTR lpsz);
    virtual LPTSTR ReadString(_Out_writes_z_(nMax) LPTSTR lpsz, _In_ UINT nMax);
    virtual BOOL ReadString(CString& rString);

// Implementation
public:
    virtual ~CStdioFile();
#ifdef _DEBUG
    void Dump(CDumpContext& dc) const;
#endif
    virtual ULONGLONG GetPosition() const;
    virtual ULONGLONG GetLength() const;
    virtual BOOL Open(LPCTSTR lpszFileName, UINT nOpenFlags, CFileException* pError = NULL);

    // . . .

protected:
    void CommonBaseInit(FILE* pOpenStream, CAtlTransactionManager* pTM);
    void CommonInit(LPCTSTR lpszFileName, UINT nOpenFlags, CAtlTransactionManager* pTM);
};

Komentar ini secara konsisten menandai bagian dari deklarasi kelas yang berisi jenis anggota kelas yang serupa. Perlu diingat bahwa mereka adalah konvensi MFC, bukan aturan yang ditetapkan.

Komentar konstruktor

Bagian // Constructors dari deklarasi kelas MFC menyatakan konstruktor (dalam arti C++) dan fungsi inisialisasi apa pun yang diperlukan untuk benar-benar menggunakan objek. Misalnya, CWnd::Create berada di bagian konstruktor karena sebelum Anda menggunakan CWnd objek, itu harus "sepenuhnya dibangun" dengan terlebih dahulu memanggil konstruktor C++ lalu memanggil Create fungsi. Biasanya, anggota ini bersifat publik.

Misalnya, kelas CStdioFile memiliki lima konstruktor, salah satunya ditampilkan dalam daftar di bawah Contoh komentar.

Komentar atribut

Bagian // Attributes deklarasi kelas MFC berisi atribut publik (atau properti) objek. Biasanya atributnya adalah variabel anggota, atau fungsi Get/Set. Fungsi "Dapatkan" dan "Atur" mungkin atau mungkin tidak virtual. Fungsi "Dapatkan" sering constkali , karena dalam banyak kasus mereka tidak memiliki efek samping. Anggota ini biasanya bersifat publik. Atribut yang dilindungi dan privat biasanya ditemukan di bagian implementasi.

Dalam daftar sampel dari kelas CStdioFile, di bawah Contoh komentar, daftar menyertakan satu variabel anggota, m_pStream. Kelas CDC mencantumkan hampir 20 anggota di bawah komentar ini.

Catatan

Kelas besar, seperti CDC dan CWnd, mungkin memiliki begitu banyak anggota yang hanya mencantumkan semua atribut dalam satu grup tidak akan menambah banyak kejelasan. Dalam kasus seperti itu, pustaka kelas menggunakan komentar lain sebagai judul untuk lebih menguraikan anggota. Misalnya, CDC menggunakan // Device-Context Functions, , // Drawing Tool Functions// Drawing Attribute Functions, dan lainnya. Grup yang mewakili atribut akan mengikuti sintaks yang biasa dijelaskan di atas. Banyak kelas OLE memiliki bagian implementasi yang disebut // Interface Maps.

Komentar operasi

Bagian // Operations deklarasi kelas MFC berisi fungsi anggota yang dapat Anda panggil pada objek untuk membuatnya melakukan sesuatu atau mengambil tindakan (melakukan operasi). Fungsi-fungsi ini biasanya non-const karena biasanya memiliki efek samping. Mereka mungkin virtual atau nonvirtual tergantung pada kebutuhan kelas. Biasanya, anggota ini bersifat publik.

Dalam daftar sampel dari kelas CStdioFile, dalam Contoh komentar, daftar menyertakan tiga fungsi anggota di bawah komentar ini: WriteString dan dua kelebihan beban ReadString.

Seperti halnya atribut, operasi dapat dibagi lebih lanjut.

Komentar yang dapat diganti

Bagian // Overridables deklarasi kelas MFC berisi fungsi virtual yang dapat Anda ambil alih di kelas turunan saat Anda perlu memodifikasi perilaku kelas dasar. Mereka biasanya dinamai dimulai dengan "Aktif", meskipun tidak benar-benar diperlukan. Fungsi di sini dirancang untuk ditimpa, dan sering mengimplementasikan atau menyediakan semacam "callback" atau "hook." Biasanya, anggota ini dilindungi.

Di MFC itu sendiri, fungsi virtual murni selalu ditempatkan di bagian ini. Fungsi virtual murni di C++ mengambil formulir:

virtual void OnDraw( ) = 0;

Dalam daftar sampel dari kelas CStdioFile, dalam Contoh komentar, daftar tidak menyertakan bagian yang dapat diganti. Kelas CDocument, di sisi lain, mencantumkan sekitar 10 fungsi anggota yang dapat diganti.

Di beberapa kelas, Anda mungkin juga melihat komentar // Advanced Overridables. Fungsi-fungsi ini adalah fungsi yang hanya harus ditimpa oleh programmer tingkat lanjut. Anda mungkin tidak perlu mengambil alih mereka.

Catatan

Konvensi yang dijelaskan dalam artikel ini juga berfungsi dengan baik, secara umum, untuk metode dan properti Automation (sebelumnya dikenal sebagai OLE Automation). Metode automasi mirip dengan operasi MFC. Properti automasi mirip dengan atribut MFC. Peristiwa automasi (didukung untuk kontrol ActiveX, sebelumnya dikenal sebagai kontrol OLE) mirip dengan fungsi anggota yang dapat diganti MFC.

Komentar implementasi

Bagian // Implementation ini adalah bagian terpenting dari deklarasi kelas MFC apa pun.

Bagian ini menampung semua detail implementasi. Variabel anggota dan fungsi anggota dapat muncul di bagian ini. Segala sesuatu di bawah baris ini dapat berubah dalam rilis MFC di masa mendatang. Kecuali Anda tidak dapat menghindarinya, Anda tidak boleh mengandalkan detail di bawah // Implementation garis. Selain itu, anggota yang dinyatakan di bawah garis implementasi tidak berdokumen, meskipun beberapa implementasi dibahas dalam catatan teknis. Mengambil alih fungsi virtual di kelas dasar berada di bagian ini, terlepas dari bagian mana fungsi kelas dasar didefinisikan. Ketika fungsi mengambil alih implementasi kelas dasar, fungsi dianggap sebagai detail implementasi. Biasanya, anggota ini dilindungi, tetapi tidak selalu.

Dalam daftar di CStdioFile bawah Contoh komentar, anggota yang dinyatakan di bawah // Implementation komentar dapat dinyatakan sebagai public, , protectedatau private. Hanya gunakan anggota ini dengan hati-hati, karena mereka dapat berubah di masa depan. Mendeklarasikan sekelompok anggota yang public mungkin diperlukan agar implementasi pustaka kelas berfungsi dengan benar. Namun, itu tidak berarti bahwa Anda dapat dengan aman menggunakan anggota yang dinyatakan.

Catatan

Anda mungkin menemukan komentar dari jenis yang tersisa baik di atas atau di bawah // Implementation komentar. Dalam kedua kasus, mereka menjelaskan jenis anggota yang dinyatakan di bawah mereka. Jika mereka terjadi di bawah // Implementation komentar, Anda harus berasumsi bahwa anggota dapat berubah dalam versi MFC yang akan datang.

Baca juga

Topik MFC Umum