AllocConsole()을 통해 콘솔 창이 하나 뜨며 이곳에 메세지를 쓸 수 있다.
//콘솔 생성 if (!AllocConsole()) return; {//방법1 //스크린 버퍼 핸들 얻음 HANDLE hOut = CreateFile(_T("CONOUT$"), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0); if (hOut != INVALID_HANDLE_VALUE) { CString str; str.Format(_T("(%ld, %ld) clicked\n"), point.x, point.y); //UNICODE -> MultiByte 변환 char* buf = new char[str.GetLength()]; int rst = ::WideCharToMultiByte(CP_ACP, 0, str, -1, buf, str.GetLength(), NULL, NULL); //콘솔 출력 DWORD sz; WriteFile(hOut, buf, str.GetLength(), &sz, NULL); CloseHandle(hOut); delete buf; } else { MessageBox(_T("[FAILED] write console"), _T("Error"), MB_OK | MB_ICONEXCLAMATION); } } {//방법2 HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); if (hOut != INVALID_HANDLE_VALUE) { TCHAR str[128]; wsprintf(str, _T("(%ld, %ld) clicked\n"), point.x, point.y); //UNICODE -> MultiByte 변환 char* buf = new char[128]; int rst = ::WideCharToMultiByte(CP_ACP, 0, str, -1, buf, 128, NULL, NULL); //콘솔 출력 DWORD sz; WriteFile(hOut, buf, strlen(buf), &sz, NULL); //CloseHandle(hOut); //방법2는 CloseHandle 호출을 콘솔 제거 전에 호출해야 하는 듯.. delete buf; } else { MessageBox(_T("[FAILED] write console"), _T("Error"), MB_OK | MB_ICONEXCLAMATION); } } //콘솔 제거 FreeConsole();
'C++' 카테고리의 다른 글
COM (0) | 2011.01.24 |
---|---|
MFC 기초 정리 (0) | 2011.01.21 |
파일 비동기 IO 조작 (Async IO) (0) | 2011.01.18 |
SEH (Structured Exception Handling) 예외처리 (0) | 2011.01.12 |
Windows 접근 제어 (0) | 2011.01.11 |
CRITICAL_SECTION을 사용한 Lock 클래스 예제 (0) | 2011.01.07 |
Design Patterns (디자인 패턴) (0) | 2011.01.06 |
POSA (Pattern-Oriented Software Architecture) (0) | 2011.01.03 |