3 Articles, Search for 'MFC'

  1. 2008/09/11 MDB (MS Access DB) 제어 클래스 0.1
  2. 2008/09/11 Console Print 0.2
  3. 2008/09/11 Excel Automation Class 0.2
Research2008/09/11 13:18



[제작자 : AccessDenied]

1. 제목
    MDB (MS Access DB) 제어 클래스 0.1

2. 형태
    Class

3. 내용
    MDB 파일을 생성하거나 MDB에 접속하여 SQL Query를 실행할 수 있는 클래스 입니다.
리소스 자동 해제 및 exception이 wrapping 되어 있기 때문에 return value 만을 참고하여 error handling이 가능합니다.
또한 유니코드를 지원하도록 제작되었기 때문에 별도의 수정 없이 Windows platform 기반의 Visual Studio project에서 적용 가능합니다.

4. 환경
    OS : Windows 개열
    개발툴 : MFC

5. 사용법
    (1) InitInstance와 같은 시작 부분에 if(FAILED(::CoInitialize(NULL))) { ... } 와 같이 COM을 초기화
    (2) MDB 생성 시 Create("파일이름")
    (3) MDB에 접속 시 Open("파일이름")
    (4) MDB에 접속된 상태에서 Query를 이용한 데이터 편집은 Query("Query String")
    (5) SELECT 쿼리 후 데이터 조회 예시
CMDBManager MDB;
FieldPtr pField;

if(MDB.Open(_T("C:\\1.mdb")) == TRUE)
{
if(MDB.Query(_T("SELECT * FROM Table1")) == TRUE)
{
while(MDB.IsDataAvailable() == TRUE)
{
pField = MDB.FetchField(0);

printf(_T("%d\n"), MDB_FIELD_GET_INTEGER(p));

MDB.NextData();
}
}
}

    (6) 클래스 기능 모음

// 해당 Field가 NULL인지 체크
MDB_MANAGER_IS_FIELD_NULL(pField)
// 해당 Field 값을 LPCSTR 형태로 추출
MDB_MANAGER_FIELD_GET_LPCSTR(pField)
// 해당 Field 값을 Integer 형태로 추출
MDB_MANAGER_FIELD_GET_INTEGER(pField)
// 해당 Field 값을 Float 형태로 추출
MDB_MANAGER_FIELD_GET_FLOAT(pField)

// 새로운 MDB 파일 생성
BOOL Create(LPCTSTR pszFileName);
// MDB 파일 접속
BOOL Open(LPCTSTR pszFileName);
// MDB 파일 접속 해제
BOOL Close();
// SQL Query
BOOL Query(LPCSTR pszQuery);
// SELECT 와 같은 Query 후 데이터가 남아 있는지 확인
BOOL IsDataAvailable();
// 다음 데이터로 이동
BOOL NextData();
// nColIndex번째 column data를 얻어옴
FieldPtr FetchField(int nColIndex);
// 해당 nColIndex field가 NULL인지 체크
BOOL IsFieldNull(int nColIndex);
// MDB에 접속되어 있는지 확인
BOOL IsConnected();
// Recordset를 얻어옴
const _RecordsetPtr GetRecords();
// 구해진 데이터의 Field 개수를 얻어옴
long GetFieldCount();
// 해당 Field의 타입을 얻어옴
MDB_MANAGER_FIELD_TYPE GetFieldType(FieldPtr pField);

6. 기타
    GetFieldType()의 경우 현재까지 얻어온 데이터를 추측하여 값을 결정하기 때문에 정확하지 않을 수 있음.
Posted by Getroot

Leave your greetings.

Research2008/09/11 13:17



[제작자 : Getroot]

1. 제목
    Console로 메시지 출력 Version 0.2

2. 형태
    Class

3. 내용
    디버깅 시 유용하게 사용할 수 있는 Console class 입니다.
    헤더를 Include 하는 것 만으로 Console에 원하는 Message를 출력할 수 있습니다. 

4. 환경
    OS : Windows 개열
    개발툴 : MFC

    기타 : Unicode 지원


5. 사용법
    (1) stdafx.h 에 Console.h Include
    (2) Entry point(예: InitInstance)에 CONSOLE.Create("상단 바 제목"); 호출
    (3) 이 후 어떤 곳에서든지, PRINT("내용") 으로 메시지 출력
    (4) PRINTPOINT("내용")으로 색이 있는 글자를 출력
    (5) 클래스 기능 모음

#define CONSOLE CConsole::GetConsole()
#define PRINT CONSOLE.OutputText
#define PRINTPOINT CONSOLE.OutputPointText

// 콘솔을 생성한다.
BOOL Create(const char *szTitle);
// 콘솔을 해지한다.
void Close(void);
// 타이틀을 설정한다.
void SetTitle(const char* szTitle);
// 텍스트를 출력한다.
void OutputText(const char* szOutput, ...);
// 중요한 텍스트를 출력한다. (빨간색)
void OutputPointText(const char* szOutput, ...);
// 색을 설정한다.
void SetColor(WORD wColor = NULL);
// 콘솔을 보이거나 숨긴다.
void Show(BOOL bShow = TRUE);
// 콘솔의 내용을 모두 삭제한다.
void Clear(void);
// 콘솔 시스템 메뉴의 X를 사용못하게 한다.
void DisableClose(void);
Posted by Getroot

Leave your greetings.

Research2008/09/11 13:10



[ 제작자 Getroot]

1. 제목
    Excel Automation C++ Library 0.2

2. 형태
    Class

3. 내용
    Excel을 자동으로 제어할 수 있는 라이브러리 입니다.

4. 환경
    OS : Windows 개열
    개발툴 : MFC

5. 사용법

// 인스턴스를 초기화하고 엑셀 객체를 생성한다.
BOOL CreateExcel(void);

// Sheet 이름을 구한다.
BOOL GetSheetName(DWORD dwSheetNumber, TCHAR *pwsSheetName);
// Sheet 이름을 변경한다.
BOOL ChangeSheetName(DWORD dwSheetNumber, TCHAR *pwsSheetName);
// Sheet 갯수를 구한다.
DWORD GetSheetCount(void);
// Sheet를 추가한다.
BOOL AddSheet(TCHAR *pwsSheetName);
// Sheet을 선택한다.
BOOL SetActiveSheet(INT nSheetNum);

// 인스턴스를 초기화하고 파일을 오픈한다.
// fMode : CREATE_EXCEL_FILE, OPEN_EXCEL_FILE
BOOL OpenExcelFile(WCHAR *wsFileName, INT fMode);
// 파일을 닫고 인스턴스를 종료한다.
BOOL CloseExcelFile(void);
// 파일을 저장한다.
BOOL SaveExcelFile(void);

// Excel 창을 띄운다.
BOOL SetVisible(BOOL fOn=TRUE);

// Sheet을 선택한다.
BOOL SetActiveSheet(INT nSheetNum);

// Data를 읽어온다.
BOOL GetData(DWORD dwX, DWORD dwY, WCHAR *pwsOut, DWORD dwBufferLen);
BOOL GetData(INT nSheetNum, DWORD dwX, DWORD dwY, WCHAR *pwsOut, DWORD dwBufferLen);
// 다음칸의 데이터를 읽는다. 데이터가 비어있다면 FALSE 리턴
// fDirection: UPPER, BOTTOM, LEFT, RIGHT
BOOL GetNextData(INT fDirection, WCHAR *pwsOut, DWORD dwBufferSize);

// Data를 쓴다.
BOOL SetData(DWORD dwX, DWORD dwY, WCHAR *pwsInput);
BOOL SetData(INT nSheetNum, DWORD dwX, DWORD dwY, WCHAR *pwsOut);
// 다음칸에 데이터를 쓴다.
// fDirection: UPPER, BOTTOM, LEFT, RIGHT
BOOL SetNextData(INT fDirection, WCHAR *pwsInput);

// 검색
// pwsSeed : 검색할 단어
// pwsResult : 검색된 문장
// pdwX, pdwY : 검색된 위치

// Active page 전체를 검색
BOOL SearchAll(WCHAR *pwsSeed, WCHAR *pwsResult, DWORD &pdwX, DWORD &pdwY);
// 지정된 dwX나 dwY 좌표를 검색
BOOL SearchX(DWORD dwX, WCHAR *pwsSeed, WCHAR *pwsResult, DWORD &pdwX, DWORD &pdwY);
BOOL SearchY(DWORD dwY, WCHAR *pwsSeed, WCHAR *pwsResult, DWORD &pdwX, DWORD &pdwY);
// 다음 찾기
BOOL SearchNext(WCHAR *pwsResult, DWORD &pdwX, DWORD &pdwY);

// Active range 구하기
BOOL GetActiveRange(DWORD &pdwBX, DWORD &pdwBY, DWORD &pdwLX, DWORD &pdwLY);

-----------------------------------------------------------------------------------------------------------------------------------------------------------
6. 사용 예제
-----------------------------------------------------------------------------------------------------------------------------------------------------------
CExcelLib clsExcel;
WCHAR wsResult[MAX_STRING_BUFFER_SIZE];
DWORD dwBX, dwBY, dwLX, dwLY;
BOOL bResult;

clsExcel.OpenExcelFile(L"c:\\test.xls", OPEN_EXCEL_FILE);

clsExcel.SetActiveSheet(1);

//clsExcel.GetActiveRange(dwBX, dwBY, dwLX, dwLY);

clsExcel.SearchAll(L"bcd", wsResult, dwBX, dwBY);

while(TRUE)
{
    bResult = clsExcel.SearchNext(wsResult, dwBX, dwBY);
    if(bResult == FALSE)
   {
        break;
   }
}

clsExcel.SearchX(2, L"bcd", wsResult, dwBX, dwBY);

while(TRUE)
{
    bResult = clsExcel.SearchNext(wsResult, dwBX, dwBY);
    if(bResult == FALSE)
    {
        break;
    }
}

clsExcel.SearchY(9, L"bcd", wsResult, dwBX, dwBY);

while(TRUE)
{
    bResult = clsExcel.SearchNext(wsResult, dwBX, dwBY);
    if(bResult == FALSE)
    {
        break;
     }
}

clsExcel.CloseExcelFile();

Posted by Getroot

Leave your greetings.