비주얼 스튜디오의 MFC 코드 자동 생성 기능이나 VAssistX를 사용하면 소스에 자동으로 코드들이 추가되는데 자동으로 생성되는 코드들은 헤더 마지막 줄에 추가되기 때문에 코드가 복잡해진다. 놔두고 있어도 동작하는데 아무 문제 없지만 의미있는 원칙을 가진 일정한 기준을 가지고 정리하면 관리하기가 편해진다. 정리하기 좋아하는 개발자라면 다음을 따르라. 1. 액세스 타입 순서로 정리한다. [[Code(public)]], [[Code(protected)]], [[Code(private)]] 순서로 정리한다. -> 클래스에서 공개된 인터페이스는 선언 맨 위에 정리된 [[Code(public)]]부 만 보면 알 수 있다. 1. 메시지 맵 선언 매크로는 헤더 맨 끝에 둔다. -> [[Code(DECLARE_MESSAGE_MAP())]]는 [[Code(protected)]] 엑세스 타입 키워드를 포함하고 있기 때문에 매크로를 클래스 마지막에 선언하거나 매크로를 사용한 이후에 멤버를 선언할 경우 반드시 액세스 타입(private, public)을 새로 지정해줘야 한다. 1. 변수와 메서드는 분류해 모은다. 1. MFC 클래스 멤버 함수 [[Code(virtual ...)]], 메시지 맵 함수 [[Code(afx_msg ...)]] 순으로 정리한다. 예) {{{#!gcode class CLoginDlg : public CDialogEx { DECLARE_DYNAMIC(CLoginDlg) public: CLoginDlg(CWnd* pParent = NULL); // Construction virtual ~CLoginDlg(); // Dialog Data enum { IDD = IDD_LOGIN }; void SendLogout(); BOOL m_bOpened; protected: CEdit m_editID; CEdit m_editPassword; CEdit m_editSvrURL; CMFCButtonEx m_btnLogin; BOOL m_bExitInstance; typedef struct _TREADPARAMS { BOOL *pExitInstance; CLoginDlg *pWnd; } THREADPAPAMS; static UINT LoginThreadFunc(LPVOID pParam); void InitData(); protected: // Overrides virtual BOOL OnInitDialog(); virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support virtual BOOL PreTranslateMessage(MSG* pMsg); virtual void OnOK(); virtual void OnCancel(); // Implementation afx_msg void OnBnClickedOk(); afx_msg void OnClose(); afx_msg void OnBnClickedButtonLogin(); afx_msg void OnShowWindow(BOOL bShow, UINT nStatus); DECLARE_MESSAGE_MAP() }; }}}