. ApiEdit 모듈

ApiEdit 모듈은 컨트롤 그 자체라고 할 수 있는 CApiEdit 클래스를 정의하고 있다. 분석기는 이미 별도의 모듈로 나누어져 있으며 하나의 클래스가 컨트롤이 되므로 더 이상 잘게 나누기가 어렵다. 다만 CApiEdit에 소속되지 않는 일반함수 FindString AeUtil.h, cpp로 독립시켰다. 컨트롤 클래스에서 필요는 하되 클래스에 소속되지는 않으며 호스트도 같이 호출하는 함수들을 이 모듈에 작성하면 된다.

분석기들도 클래스별로 분할할 수 있으나 새로 분석기를 만들더라도 기존 분석기의 코드를 복사해서 수정할 경우가 많을 것 같아 일단은 분할을 하지 않기로 한다. 다음은 메인 모듈인 Dangeun.cpp의 선두와 추가된 모듈 global.h이다.

 

Dangeun.cpp

Global.h

stdafx.h

#include "stdafx.h"

 

static LPSTR lpszClass="Dangeun";

static HMENU hMenu1,hMenu2;

static int iDrag;

static int DragOriginal;

static BOOL NewPhase;

static FileInfo *pEditings;

 

HINSTANCE g_hInst;

HWND g_hFrameWnd;

HWND g_hMDIClient;

int g_NewNo=0;

int g_ChildNum=0;

SOption Option, NewOption;

LOGFONT *arFont;

int FontNum;

int g_StartPage=0;

CMru Mru;

BOOL bUninstall=FALSE;

HWND g_FindDlg;

CHistory arFind[4];

DWORD FindFlag;

HWND hOutput;

HWND hList;

int TotalFind;

TCHAR LastFIF[256];

HANDLE hFIFThread;

HWND hToolBar;

HWND hStatus;

HWND hFileWnd;

HWND hTabFrame;

HWND hFileTab;

HCURSOR hCurHorz, hCurVert;

HWND hFileTree, hFilter;

HIMAGELIST hFileImg;

HIMAGELIST hTabImg;

HFONT hGul9;

BOOL bContDown;

HINTERNET hInternet, hFtp;

BOOL bPrinting;

HWND hDlgCancel;

BOOL bShowOutput;

 

LOGFONT arCustomFont[10]={

          {0,0,0,0,0,0,0,0,0,0,0,0,0,""},

          ....

#ifndef __GLOBAL_H

#define __GLOBAL_H

 

#define KEY "Software\\Miyoungsoft\\Dangeun\\1.0\\"

#define GAP 3

 

extern HINSTANCE g_hInst;

extern HWND g_hFrameWnd;

extern HWND g_hMDIClient;

extern int g_NewNo;

extern int g_ChildNum;

extern SOption Option, NewOption;

extern LOGFONT *arFont;

extern int FontNum;

extern int g_StartPage;

extern CMru Mru;

extern BOOL bUninstall;

extern HWND g_FindDlg;

extern CHistory arFind[4];

extern DWORD FindFlag;

extern HWND hOutput;

extern HWND hList;

extern int TotalFind;

extern TCHAR LastFIF[256];

extern HANDLE hFIFThread;

extern HWND hToolBar;

extern HWND hStatus;

extern HWND hFileWnd;

extern HWND hTabFrame;

extern HWND hFileTab;

extern HCURSOR hCurHorz, hCurVert;

extern HWND hFileTree, hFilter;

extern HIMAGELIST hFileImg;

extern HIMAGELIST hTabImg;

extern HFONT hGul9;

extern BOOL bContDown;

extern HINTERNET hInternet, hFtp;

extern BOOL bPrinting;

extern HWND hDlgCancel;

extern BOOL bShowOutput;

extern BOOL bContFIF;

 

#endif // __GLOBAL_H

#define _WIN32_WINNT 0x400

#define _WIN32_WINDOWS 0x401

#include <windows.h>

#include <windowsx.h>

#include <imm.h>

#include <stdio.h>

#include <io.h>

#include <malloc.h>

#include <commctrl.h>

#include <Shlwapi.h>

#include <Shlobj.h>

#include <wininet.h>

#include "Parse.h"

#include "Util.h"

#include "resource.h"

#include "AeUtil.h"

#include "ApiEdit.h"

#include "Project.h"

#include "Config.h"

#include "FileWnd.h"

#include "Internet.h"

#include "Option.h"

#include "Mru.h"

#include "Print.h"

#include "ToolBar.h"

#include "Find.h"

#include "Dangeun.h"

#include "global.h"

 

프로젝트 전반에 걸쳐 사용되는 전역변수들은 모두 Dangeun.cpp의 선두에 선언하였다. 모든 모듈에서 이 변수들을 자유롭게 참조할 수 있어야 하므로 전역변수에 대한 extern 선언을 하는 global.h를 만들고 이 헤더 파일을 stdafx.h에 인클루드하였다. 각 모듈이 필요로 하는 전역변수가 있다면 Dangeun.cpp에 변수를 선언하고 global.h extern 선언을 하면 된다. 전역변수 중에 여기에 포함되지 않은 변수는 FindInFiles 함수가 사용하는 bContFIF와 설정 대화상자들이 사용하는 bEditByCode 뿐이다. 이 변수들도 Dangeun.cpp로 옮길 수 있으나 특정 함수들과만 사용되므로 진정한 의미의 전역변수로 보지 않는다.

Dangeun.cpp 파일에서만 사용되는 모듈 전역변수는 static으로 선언했으며 global.h에는 포함시키지 않았다. 이 변수들은 외부 모듈에서 참조하지 않는다. stdafx.h에는 지금까지 새로 작성된 모든 모듈의 헤더 파일을 포함하는데 약간의 순서를 지켜야 한다. 예를 들어 Option 모듈에서 FTP 설정정보인 FtpInfo 구조체를 참조하므로 Option.h보다 Internet.h를 먼저 인클루드해야 한다.

여기까지 작업을 하면 모듈 분할이 완료된다. 구성 파일이 늘어났고 구조가 조금 바뀌기만 했을 뿐 Dangeun11과 기능적으로 전혀 틀리지 않다. 이 프로젝트가 이 책의 최종 결과 프로젝트이며 이후 새로운 기능을 추가하는 시작점이 될 것이다.