다음을 통해 공유


MFC 원본 파일 사용

MFC(Microsoft Foundation Class) 라이브러리는 전체 소스 코드를 제공합니다. 헤더 파일(.h)은 \atlmfc\include 디렉터리에 있습니다. 구현 파일(.cpp)은 \atlmfc\src\mfc 디렉터리에 있습니다.

이 문서에서는 MFC가 각 클래스의 다양한 부분을 주석으로 표시하는 데 사용하는 규칙, 이러한 주석의 의미 및 각 섹션에서 찾을 것으로 예상되는 사항에 대해 설명합니다. Visual Studio 마법사는 사용자가 직접 만드는 클래스에 대해 비슷한 규칙을 사용하며, 이러한 규칙이 사용자 고유의 코드에 유용할 수 있습니다.

public, protected, 및 private C++ 키워드에 익숙할 수 있습니다. MFC 헤더 파일에서 각 클래스는 여러 개의 특정 요소를 가질 수 있습니다. 예를 들어 퍼블릭 멤버 변수 및 함수는 둘 public 이상의 키워드 아래에 있을 수 있습니다. MFC는 허용된 액세스 유형이 아니라 해당 사용에 따라 멤버 변수와 함수를 구분하기 때문입니다. MFC는 아쉽게 사용합니다 private . 구현 세부 정보로 간주되는 항목도 종종 protected있으며 여러 번 있습니다 public. 구현 세부 정보에 대한 액세스는 권장되지 않지만 MFC는 사용자에게 결정을 둡니다.

MFC 원본 파일과 MFC 애플리케이션 마법사가 만드는 헤더 파일 모두에서 클래스 선언 내에서 다음과 같은 주석을 찾을 수 있습니다(일반적으로 이 순서대로).

// Constructors

// Attributes

// Operations

// Overridables

// Implementation

주석의 예

클래스 CStdioFile의 다음 부분 목록은 MFC가 클래스에서 사용하는 대부분의 표준 주석을 통해 클래스 멤버를 사용 방식에 따라 분류합니다.

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

이러한 주석은 비슷한 종류의 클래스 멤버를 포함하는 클래스 선언의 섹션을 일관되게 표시합니다. 규칙을 설정하지 않고 MFC 규칙임을 명심하세요.

생성자 주석

MFC 클래스 선언의 섹션은 // Constructors 생성자(C++ 의미)와 개체를 실제로 사용하는 데 필요한 모든 초기화 함수를 선언합니다. 예를 들어 CWnd::Create 개체를 사용하기 CWnd 전에 먼저 C++ 생성자를 호출한 다음 함수를 호출하여 "완전히 생성"되어야 하기 때문에 생성자 섹션에 Create 있습니다. 일반적으로 이러한 회원은 공개되어 있습니다.

예를 들어 클래스 CStdioFile 에는 5개의 생성자가 있으며, 그 중 하나는 주석 예제 아래 목록에 표시됩니다.

특성에 대한 주석

MFC 클래스 선언의 섹션에는 // Attributes 개체의 공용 특성(또는 속성)이 포함됩니다. 일반적으로 특성은 멤버 변수 또는 Get/Set 함수입니다. "Get" 및 "Set" 함수는 가상일 수도 있고 그렇지 않을 수도 있습니다. 대부분의 경우 부작용이 없기 때문에 "Get" 함수는 종종 const입니다. 이러한 멤버는 일반적으로 공개됩니다. 보호된 특성과 프라이빗 특성은 일반적으로 구현 섹션에서 찾을 수 있습니다.

클래스 CStdioFile의 샘플 목록의 주석 예제에서 목록에는 m_pStream 하나의 멤버 변수가 포함됩니다. 클래스 CDC 는 이 주석 아래에 거의 20명의 멤버를 나열합니다.

비고

대규모 클래스(예: CDCCWnd)에는 멤버가 너무 많아서 한 그룹의 모든 특성을 나열하기만 하면 명확성이 크게 늘어나지 않을 수 있습니다. 이러한 경우 클래스 라이브러리는 다른 주석을 제목으로 사용하여 멤버를 더 자세히 설명합니다. 예를 들어 CDC, // Device-Context Functions, // Drawing Tool Functions, // Drawing Attribute Functions 등을 사용합니다. 특성을 나타내는 그룹은 위에서 설명한 일반적인 구문을 따릅니다. 많은 OLE 클래스에는 .라는 구현 섹션이 있습니다 // Interface Maps.

작업 주석

MFC 클래스 선언의 섹션에는 // Operations 개체를 호출하여 작업을 수행하거나 작업을 수행할 수 있는 멤버 함수가 포함되어 있습니다. 이러한 함수는 보통 부작용이 있기 때문에 비-const입니다. 클래스의 요구 사항에 따라 가상 또는 비가상일 수 있습니다. 일반적으로 이러한 회원은 공개되어 있습니다.

클래스 CStdioFile의 샘플 목록의 주석 예제에서 목록에는 이 주석 WriteString 아래에 세 개의 멤버 함수와 2개의 오버로드가 포함됩니다 ReadString.

특성과 마찬가지로 작업을 추가로 세분화할 수 있습니다.

코드에서 재정의 가능한 주석

MFC 클래스 선언의 섹션에는 // Overridables 기본 클래스 동작을 수정해야 할 때 파생 클래스에서 재정의할 수 있는 가상 함수가 포함되어 있습니다. 반드시 필요한 것은 아니지만 일반적으로 "On"으로 시작하는 이름이 지정됩니다. 여기서 함수는 재정의되도록 설계되었으며 종종 일종의 "콜백" 또는 "후크"를 구현하거나 제공합니다. 일반적으로 이러한 멤버는 보호됩니다.

MFC 자체에서 순수 가상 함수는 항상 이 섹션에 배치됩니다. C++의 순수 가상 함수는 다음 형식을 사용합니다.

virtual void OnDraw( ) = 0;

클래스 CStdioFile의 샘플 목록의 주석 예제에서 목록에는 재정의 가능한 섹션이 없습니다. CDocument반면 클래스는 약 10개의 재정의 가능한 멤버 함수를 나열합니다.

일부 클래스에서는 주석 // Advanced Overridables도 표시할 수 있습니다. 이러한 함수는 오직 고급 프로그래머만 재정의하려고 시도해야 하는 함수입니다. 아마 그들을 무시할 필요는 없을 것입니다.

비고

이 문서에 설명된 규칙은 Automation(이전의 OLE Automation) 메서드 및 속성에 대해서도 일반적으로 잘 작동합니다. 자동화 메서드는 MFC 작업과 유사합니다. 자동화 속성은 MFC 특성과 유사합니다. 자동화 이벤트(이전의 OLE 컨트롤로 알려진 ActiveX 컨트롤에 지원됨)는 MFC 재정의 가능한 멤버 함수와 유사합니다.

구현 주석

// Implementation 섹션은 모든 MFC 클래스 선언에서 가장 중요한 부분입니다.

이 섹션에는 모든 구현 세부 정보가 있습니다. 멤버 변수와 멤버 함수는 모두 이 섹션에 나타날 수 있습니다. 이 줄 아래의 모든 내용은 향후 MFC 릴리스에서 변경될 수 있습니다. 피할 수 없다면 줄 아래 // Implementation 의 세부 정보에 의존해서는 안 됩니다. 또한 구현 줄 아래에 선언된 멤버는 문서화되지 않았지만 일부 구현은 기술 노트에 설명되어 있습니다. 기본 클래스 함수의 가상 함수 재정의는 기본 클래스 함수가 정의된 섹션에 관계없이 이 섹션에 상주합니다. 함수가 기본 클래스 구현을 재정의하는 경우 구현 세부 정보로 간주됩니다. 일반적으로 이러한 멤버는 보호되지만 항상 보호되는 것은 아닙니다.

CStdioFile 주석 예제 아래의 목록에서 주석 아래에 // Implementation 선언된 멤버는 , public또는 protected.로 private선언될 수 있습니다. 이러한 멤버는 나중에 변경될 수 있으므로 주의해서만 사용합니다. 클래스 라이브러리 구현이 제대로 작동하려면 멤버 그룹을 필요에 따라 public 선언합니다. 그러나 선언된 멤버를 안전하게 사용할 수 있다는 의미는 아닙니다.

비고

주석의 나머지 유형은 // Implementation 주석 위 또는 아래에서 찾을 수 있습니다. 두 경우 모두 아래에 선언된 멤버의 종류를 설명합니다. 주석 아래에서 // Implementation 발생하는 경우 멤버가 MFC의 이후 버전에서 변경될 수 있다고 가정해야 합니다.

참고하십시오

일반 MFC 항목