DirectX를 하기 위해서는 기본적으로 winAPI를 사용하여 GUI환경을 구동 시키지만 별도의 모니터링을 위한 창이 필요 할 것 같았다.
오랜만에 깔끔한 예제를 발견, cool~
출처 : http://bobobobo.wordpress.com/
How can I attach a console to my win app?
A common question that usually points people to this 1997 article (which remarkably should still work!).
Besides a few codeguru or codeproject articles that do the same, here is a simple example that only takes 3 lines of code on top of your basic window creation code
All you have to know:
// The important lines: AllocConsole() ; AttachConsole( GetCurrentProcessId() ) ; freopen( "CON", "w", stdout ) ;
#include <windows.h> #include <stdio.h> #include <stdlib.h> // Function prototypes. LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam ); int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int iCmdShow ); // In a C++ Windows app, the starting point is WinMain(). int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int iCmdShow ) { // these next few lines create and attach a console // to this process. note that each process is only allowed one console. AllocConsole() ; AttachConsole( GetCurrentProcessId() ) ; freopen( "CON", "w", stdout ) ; printf("HELLO!!! I AM THE CONSOLE!" ) ; WNDCLASSEX wc = { 0 }; wc.cbSize = sizeof( WNDCLASSEX ) ; wc.cbClsExtra = 0; // ignore for now wc.cbWndExtra = 0; // ignore for now wc.hbrBackground = (HBRUSH)GetStockObject( WHITE_BRUSH ); wc.hCursor = LoadCursor( NULL, IDC_ARROW ); wc.hIcon = LoadIcon( NULL, IDI_APPLICATION ); wc.hInstance = hInstance; wc.lpfnWndProc = WndProc; wc.lpszClassName = TEXT("Philip"); wc.lpszMenuName = 0; wc.style = CS_HREDRAW | CS_VREDRAW; // Redraw the window RegisterClassEx( &wc ); HWND hwnd = CreateWindowEx( 0, TEXT("Philip"), TEXT("window's title!"), WS_OVERLAPPEDWINDOW, 10, 10, 200, 200, NULL, NULL, hInstance, NULL ); ShowWindow(hwnd, iCmdShow ); UpdateWindow(hwnd); MSG msg; while( GetMessage( &msg, NULL, 0, 0 ) ) { TranslateMessage( &msg ); DispatchMessage( &msg ); } return msg.wParam; // return from WinMain } LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam ) { switch( message ) { case WM_CREATE: // upon creation, let the speaker beep at 50Hz, for 10ms. Beep( 50, 10 ); printf("HELLO!!! I AM THE CONSOLE!" ) ; return 0; break; case WM_PAINT: { // we would place our Windows painting code here. HDC hdc; PAINTSTRUCT ps; hdc = BeginPaint( hwnd, &ps ); // draw a circle and a 2 squares Ellipse( hdc, 20, 20, 160, 160 ); Rectangle( hdc, 50, 50, 90, 90 ); Rectangle( hdc, 100, 50, 140, 90 ); printf("HELLO!!! I AM THE CONSOLE!" ) ; EndPaint( hwnd, &ps ); } return 0; break; case WM_LBUTTONDOWN: printf("STOP POKING MEEE!!!\n") ; break; case WM_DESTROY: PostQuitMessage( 0 ) ; return 0; break; } return DefWindowProc( hwnd, message, wparam, lparam ); }
Additional ref: Msdn on console handling in general
MSDN on “consoles”
Console functions on msdn
'2_ 바삭바삭 프로그래밍 > C and C++' 카테고리의 다른 글
C - math.h 일부 (pow, sqrt, floor, ceil) (0) | 2011.09.19 |
---|---|
C++ - 상속 (0) | 2011.03.18 |
C++ - 스레드를 돌리는 간단한 예제! (0) | 2011.01.26 |
C++ - 템플릿 : 함수 템플릿 정의 하기 (0) | 2011.01.24 |
C, C++ - 파일 입출력 (0) | 2011.01.07 |