MFC 소스 파일 사용

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

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

및 C++ 키워드(keyword) 익숙 publicprotectedprivate 할 수 있습니다. MFC 헤더 파일에서 각 클래스에는 각각 몇 가지가 있을 수 있습니다. 예를 들어 공용 멤버 변수 및 함수는 둘 public 이상의 키워드(keyword) 아래에 있을 수 있습니다. 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 객체를 사용하기 전에 먼저 C++ 생성자를 호출한 다음 Create 함수를 호출하여 "완전히 생성"해야 하므로 CWnd::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라는 주석이 표시될 수도 있습니다. 이러한 함수는 고급 프로그래머만 재정의하려고 시도하는 함수입니다. 당신은 아마 그들을 재정의 할 필요가 없습니다.

참고 항목

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

구현 주석

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

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

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

참고 항목

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

참고 항목

일반 MFC 항목