반응형

http://www.winapi.co.kr/reference/Function/CreateWindowEx.htm

CreateWindowEx

원형

HWND CreateWindowEx(DWORD dwExStyle, LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HANDLE hInstance, LPVOID lpParam);

MFC 원형

BOOL CWnd::CreateEx( DWORD dwExStyle, LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hwndParent, HMENU nIDorHMenu, LPVOID lpParam = NULL );

BOOL CWnd::CreateEx(DWORD dwExStyle, LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, LPVOID lpParam = NULL);

인수

▶dwExStyle : 생성될 윈도우의 확장 스타일을 지정한다.

스타일설명
WS_EX_DLGMODALFRAME이중 경계선을 가진 윈도우를 만든다.
WS_EX_NOPARENTNOTIFY생성되거나 파괴될 때 부모 윈도우에게 WM_PARENTNOTIFY 메시지를 보내지 않도록 한다.
WS_EX_TOPMOST모든 윈도우보다 수직적으로 위에 있는 윈도우를 만든다. 비활성화된 상태에서도 다른 윈도우에 가려지지 않는다. 이 속성을 실행중에 변경할 때는 SetWindowLong 함수를 사용할 수 없으며 SetWindowPos 함수를 사용해야 한다.
WS_EX_ACCEPTFILES드래그되는 파일을 받을 수 있다. 이 속성을 지정하지 않고 윈도우를 생성했을 경우 DragAcceptFiles 함수로 실행중에 이 속성을 변경할 수 있다.
WS_EX_TRANSPARENT형제 윈도우가 다 그려지기 전에 그려지지 않아 투명하게 보이는 윈도우를 만든다.
WS_EX_MDICHILDMDI 차일드 윈도우를 만든다.
WS_EX_TOOLWINDOW플로팅 툴바 형식의 윈도우를 만든다. 타이틀 바의 높이가 보통 윈도우보다 낮으며 작은 폰트를 사용한다. 툴 윈도우는 타스크 바에 나타나지 않으며 Alt+Tab키로 전환할 수도 없다. 시스템 메뉴 아이콘은 없으나 Alt+Space키로 시스템 메뉴는 호출할 수 있다.
WS_EX_WINDOWEDGE양각 모양의 경계선을 가진 윈도우를 만든다.
WS_EX_CLIENTEDGE작업영역이 쑥 들어간 음각 모양으로 만든다.
WS_EX_CONTEXTHELP타이틀 바에 ?표 버튼을 출력한다. 이 버튼은 도움말 제공에 사용된다.
WS_EX_LAYERED2000에서 추가된 속성이며 레이어드 윈도우를 생성한다.
WS_EX_RIGHT한국어에는 적용되지 않는 스타일
WS_EX_LEFT한국어에는 적용되지 않는 스타일
WS_EX_RTLREADING한국어에는 적용되지 않는 스타일
WS_EX_LTRREADING한국어에는 적용되지 않는 스타일
WS_EX_LEFTSCROLLBAR한국어에는 적용되지 않는 스타일
WS_EX_RIGHTSCROLLBAR한국어에는 적용되지 않는 스타일
WS_EX_CONTROLPARENTTab키로 차일드 사이를 전환할 수 있도록 한다.
WS_EX_STATICEDGE사용자의 입력을 받아들이지 않는다는 의미의 삼차원 장식을 한다.
WS_EX_APPWINDOW윈도우가 보일 때 강제로 타스크 바 위에 있도록 한다.
WS_EX_OVERLAPPEDWINDOW(WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE)복합 속성
WS_EX_PALETTEWINDOW(WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST) 복합 속성

▶나머지 인수 : CreateWindow와 동일하다.

리턴

윈도우 생성에 성공했으면 생성된 윈도우의 핸들을 리턴하며 에러 발생시 NULL을 리턴한다.

설명

윈도우를 생성하는 기능은 CreateWindow 함수와 동일하되 확장 스타일을 지정하는 dwExStyle 멤버가 있다는 점만 다르다. CreateWindow 함수는 dwExStyle이 0인 매크로 함수로 정의되어 있다.

예제 1 

다음 예제는 항상 위에 있으며 툴 윈도우 모양의 타이틀 바를 가진다. 툴 윈도우는 타이틀 바의 높이가 낮으며 타스크 바에 나타나지 않고 Alt+Tab으로 작업 전환을 할 수 없다.

hWnd=CreateWindowEx(WS_EX_TOPMOST | WS_EX_TOOLWINDOW,
	lpszClass,lpszClass,WS_OVERLAPPEDWINDOW,
	CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
	NULL,(HMENU)NULL,hInstance,NULL);

참고함수

CreateWindow

플렛폼

95이상

참조

 

반응형
반응형

http://kazeonme.springnote.com/pages/3607111

 

CTestApp, CMainFrame, CTestDoc, CTestView

 App 포인터 얻기 
-          CTestApp *pApp = (CtestApp *) AfxGetApp();


◎ CTestApp에서
CMainFrame* pFrame = (CMainFrame*)AfxGetMainWnd();
CTestDoc* pDoc = (CTestDoc*)((CMainFrame*)AfxGetMainWnd())->GetActiveDocument();
CTestView* pView = (CTestView*)((CMainFrame*)AfxGetMainWnd())->GetActiveView();

◎ CMainFrame에서
CTestApp* pApp = (CTestApp*)AfxGetApp();
CTestDoc* pDoc = (CTestDoc*)GetActiveDocument();
CTestView* pView = (CTestView*)GetActiveView();

◎ CTestDoc에서
CTestApp* pApp = (CTestApp*)AfxGetApp();
CMainFrame* pFrame = (CMainFrame*)AfxGetMainWnd();
CTestView* pView = (CTestView*)((CMainFrame*)AfxGetMainWnd())->GetActiveView();

◎ CTestView에서
CTestApp* pApp = (CTestApp*)AfxGetApp();
CMainFrame* pFrame = (CMainFrame*)AfxGetMainWnd();
                  or (CMainFrame*)GetParent();
CTestDoc* pDoc = (CTestDoc*)((CMainFrame*)AfxGetMainWnd())->GetActiveDocument();
              or (CTestDoc*)GetDocument();

 

◎ 기타 클래스에서 View얻기

CTestView* pView = (CTestView*) ((CFrameWnd*)AfxGetApp()->GetMainWnd())->GetActiveView();


반응형
반응형

http://jaram.tistory.com/55
39. Window 창크기,위치정보 저장하기

  MainFrame 의 WM_DESTROY 에

    WINDOWPLACEMENT w;

    this->GetWindowPlacement(&w); //윈도우의 정보를 저장한다.

    CString strRect;

    strRect.Format("%04d,%04d,%04d,%04d", //04d 는 4자리 확보하고 남은건 0으로 채워라

         w.rcNormalPosition.left,w.rcNormalPosition.top,

         w.rcNormalPosition.right,w.rcNormalPosition.bottom); //윈도우의 위치,크기 확보..

        

        BOOL bMax,bMin; //윈도우의 상태를 저장하기위한 변수

        //w.falg 는 이전상태의 정보를 가지고 잇다!!

        if(w.showCmd==SW_SHOWMINIMIZED)           //최소화 상태

        {

                bMin=TRUE;

                if(w.flags==0) //falg 값이 0 이면 이전 상태가 보통상태이다!!

                        bMax=FALSE;

                else   //이전상태가 대화 상태

                        bMax=TRUE;

        }

        else                            

        {

                if(w.showCmd==SW_SHOWMAXIMIZED) //최대화상태

                {

                        bMax=TRUE;

                        bMin=FALSE;

                }

                else //보통 상태

                {

                        bMax=FALSE;

                        bMin=FALSE;

                }

        }

        AfxGetApp()->WriteProfileString("WinStatus","Rect",strRect);

        AfxGetApp()->WriteProfileInt("WinStatus","Max",bMax);

        AfxGetApp()->WriteProfileInt("WinStatus","Min",bMin);



//읽어올차례..

ActivateFrame 함수로 가서

        WINDOWPLACEMENT w;  //윈도우의 상태를 저장하는 구조체..

        BOOL bMax,bMin;               //최대,최소상태를 저장할 변수

        CString strRect; //창크기를 받아올 변수

        strRect=AfxGetApp()->GetProfileString("WinStatus","Rect","0000,0000,0500,0700");

        bMin=AfxGetApp()->GetProfileInt("WinStatus","Min",FALSE);

        bMax=AfxGetApp()->GetProfileInt("WinStatus","Max",FALSE);

        int a=atoi(strRect.Left(4)); //문자열을 int 로 바꿔준다.

        int b=atoi(strRect.Mid(5,4));     //atoi 아스키 값을 int형으로 바꿔준다..

        int c=atoi(strRect.Mid(10,4));

        int d=atoi(strRect.Mid(15,4));

        w.rcNormalPosition=CRect(a,b,c,d);

        if(bMin)

        {

                w.showCmd=SW_SHOWMINIMIZED;

                if(bMax)

                {

                        w.flags=WPF_RESTORETOMAXIMIZED  ;

                }

                else

                {

                        w.flags=0;

                }

        }

        else

        {

                if(bMax)

                {

                        w.showCmd=SW_SHOWMAXIMIZED;

                }

                else

                {

                        w.showCmd=SW_SHOWNORMAL;

                }

        }

        this->SetWindowPlacement(&w); //설정된 값으로 윈도우를 그리게 한다..

        

        //CFrameWnd::ActivateFrame(nCmdShow); //이건 반드시 주석처리한다..


반응형
반응형

ShowWindow

원형BOOL ShowWindow(HWND hWnd, int nCmdShow);
인수

▶hWnd : 대상 윈도우 핸들

▶nCmdShow : 지정하고자 하는 보이기 상태이며 다음 값중 하나를 지정한다.

설명
SW_FORCEMINIMIZE

2000 이후에만 쓸 수 있는 플레그이다. 윈도우를 소유한 스레드가 블록된 상태에서도 윈도우를 최소화시킨다.

SW_HIDE

윈도우를 숨긴다.

SW_MAXIMIZE

윈도우를 최대화시킨다.

SW_MINIMIZE

윈도우를 최소화시키며 다음 Z순서를 가지는 윈도우가 활성화된다.

SW_RESTORE

최대, 최소화된 윈도우를 이전 위치로 복구한다.

SW_SHOW

윈도우를 활성화하며 보인다.

SW_SHOWDEFAULT

STARTUPINFO 구조체가 지정하는 보이기 상태로 만든다.

SW_SHOWMAXIMIZED

윈도우를 최대화된 상태로 활성화한다.

SW_SHOWMINIMIZED

윈도우를 최소화한 상태로 활성화한다.

SW_SHOWMINNOACTIVE

윈도우를 최소화 상태로 보이며 활성화 상태는 변경되지 않는다.

SW_SHOWNA

윈도우를 헌재 상태로 보이며 활성화 상태는 변경되지 않는다.

SW_SHOWNOACTIVATE

최근 크기와 위치에 윈도우를 보이며 활성화 상태는 변경되지 않는다.

SW_SHOWNORMAL

윈도우를 보이며 활성화한다. 만약 윈도우가 최소화되어 있거나 최대화되어 있다면 윈도우를 원래 크기대로 복구한다. 윈도우를 처음 화면에 보일 때는 이 플래그를 사용해야 한다.

 

리턴윈도우가 이전에 보이는 상태였으면 0이 아닌 값을 리턴하며 보이지 않는 상태였으면 0을 리턴한다.
설명

윈도우의 보이기 상태를 지정한다. 보이기 상태(show state)란 보이기/숨기기는 물론이고 최대화/최소화/복구 상태 등 윈도우의 현재 상태를 통칭하는 용어이며 nCmdShow 인수가 지정하는 여러 가지 보이기 상태 중 하나를 선택할 수 있다.

단, 이 함수가 처음 호출될 때는 반드시 WinMain의 인수로 전달된 nCmdShow를 그대로 넘겨 주는 것이 좋다. 쉘은 프로그램을 실행할 때 사용자가 지정해 놓은 등록 정보를 WinMain으로 전달해 주는데 이 설정 상태대로 보여야 하기 때문이다. 만약 이 프로그램이 STARTUPINFO 구조체의 정보대로 생성되었다면 첫번째 ShowWindow 호출에서 nCmdShow 인수 지정은 무시되며 이 구조체가 지정하는 보이기 상태가 적용된다. 두번째 호출부터는 원하는 보이기 상태로 변경할 수 있다.

참고함수CreateWindow, ShowOwnedPopups
플렛폼95이상
본문참조 

written by http://www.winapi.co.kr

반응형
반응형




http://microdev.tistory.com/14

작업표시줄에 현재 윈도우의 캡션(?)을 안나오게 하는 방법....

윈도우가 초기화 될때 아래의 코드를 쓰면 장땡!!

ex) CDialog::OnInitDialog()

1
2
3
4
DWORD dwStyle = GetWindowLong( HWND, GWL_EXSTYLE );
dwStyle &= ~WS_EX_APPWINDOW;
dwStyle |= WS_EX_TOOLWINDOW;
SetWindowLong( HWND, GWL_EXSTYLE, dwStyle );    

반응형
반응형

http://www.winapi.co.kr


SetWindowPos

원형

BOOL SetWindowPos(HWND hWnd, HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags);

인수

▶ hWnd : 이동 대상 윈도우의 핸들

▶ hWndInsertAfter : 윈도우의 Z순서를 지정한다. 이 인수가 지정하는 윈도우 앞에 hWnd가 배치되는데 단 hWnd가 액티브 상태일 경우 이 인수가 지정하는 윈도우 핸들은 무시된다. 또는 다음과 같이 Z순서를 지정하는 값들이 올 수 있다.

설명
HWND_BOTTOM

hWnd윈도우를 Z순서의 제일 바닥으로 보낸다. 만약 이 윈도우가 항상 위(Top Most)속성을 가지고 있었다면 이 속성은 해제되고 모든 윈도우의 제일 아래쪽에 배치된다.

HWND_NOTOPMOST

항상 위 속성을 가지지 않은 윈도우 중 제일 위쪽에 배치된다. 즉, 항상 위 속성을 가진 윈도우 바로 아래에 배치된다. 이 옵션은 항상 위 속성을 해제할 때 사용된다. 만약 항상 위 옵션을 가지고 있지 않다면 이 옵션은 아무런 효과도 가지지 않는다.

HWND_TOPMOST

항상 위 속성을 설정한다. 항상 위 속성을 가지지 않는 윈도우들보다 위쪽에 배치된다.

HWND_TOP

Z순서상의 제일 위쪽에 배치한다.

▶X,Y : 윈도우의 새로운 좌상단 좌표를 지정한다. 픽셀 단위이다.

▶cx, cy : 윈도우의 새로운 폭과 높이를 지정한다. 픽셀 단위이다.

▶uFlags : 위치와 크기 변경에 대한 여러 가지 옵션들이며 플래그들을 조합하여 지정할 수 있다.

플래그설명
SWP_ASYNCWINDOWPOS

이 함수를 부른 스레드와 윈도우를 소유한 스레드가 다른 입력 큐를 사용할 경우 시스템은 윈도우를 소유한 스레드에게 요구를 포스팅하기만 한다. 이는 호출 스레드가 다른 스레드가 요구를 처리하는 동안 블럭되는 것을 방지한다.

SWP_DEFERERASE

WM_SYNCPAINT 메시지 발생을 금지한다.

SWP_DRAWFRAME

윈도우 주변에 프레임을 그린다.

SWP_FRAMECHANGED

SetWindowLong으로 경계선 스타일을 변경했을 경우 새 스타일을 적용한다. 이 플래그가 지정되면 크기가 변경되지 않아도 WM_NCCALCSIZE 메시지가 전달된다.

SWP_HIDEWINDOW

윈도우를 숨긴다. 이 경우 이동과 크기 변경은 무시된다.

SWP_NOACTIVATE

크기 변경 후 윈도우를 활성화시키지 않는다.

SWP_NOCOPYBITS

이 플래그가 지정되지 않으면 작업영역의 내용이 저장되었다가 크기나 위치변경 후 다시 작업영역으로 복사된다. 이 플래그가 지정되면 이런 저장을 하지 않는다.

SWP_NOMOVE

위치는 이동하지 않고 크기만 변경한다. X,Y인수가 무시된다.

SWP_NOOWNERZORDER

소유자의 Z순서를 변경하지 않는다.

SWP_NOREDRAW

크기, 위치를 바꾼 후 그리기를 하지 않는다. 해당 윈도우는 물론이고 이 윈도우에 의해 다시 드러나는 윈도우도 다시 그리기를 하지 않는다. 이 플래그를 주었을 경우 프로그램은 필요한 부분을 즉시 무효화시켜 다시 그리도록 해 주어야 한다.

SWP_NOREPOSITION

=SWP_NOOWNERZORDER

SWP_NOSENDCHANGING

윈도우에게 WM_WINDOWPOSCHANGING 메시지를 보내지 않는다.

SWP_NOSIZE

크기는 변경하지 않고 위치만 이동한다. cx, cy 인수가 무시된다.

SWP_NOZORDER

현재의 Z순서를 그대로 유지한다. hWndInsertAfter 인수를 무시한다.

SWP_SHOWWINDOW

윈도우를 보인다. 이 경우 이동과 크기 변경은 무시된다.

 

리턴

성공하면 0이 아닌 값을 리턴하며 에러 발생시 0을 리턴한다.

설명

이 함수는 윈도우의 위치, 크기, Z순서를 동시에 또는 일부만 변경할 때 사용된다. 예를 들어 크기는 그대로 두고 위치만 변경하고자 한다거나 위치와 크기는 그대로 두고 Z순서만 변경하고자 할 때 사용한다. MoveWindow 함수는 크기와 위치를 항상 같이 변경하지만 이 함수는 SWP_NOSIZE, SWP_NOMOVE 플래그로 위치와 크기를 개별적으로 변경할 수 있다.

또한 이 함수는 Z순서를 변경하기 위한 목적으로, 특히 항상 위(Top Most) 속성을 토글하기 위한 용도로도 많이 사용되는데 두번째 인수에 HWND_(NO)TOPMOST를 줌으로써 이 속성을 토글할 수 있다. 이 함수로 항상 위 속성을 설정하면 이 윈도우에 소유된 윈도우도 항상 위 속성을 같이 가지게 된다. 그러나 이 윈도우를 소유한 윈도우는 영향을 받지 않는다. 반대로 이 함수로 항상 위 속성을 해제하면 이 윈도우에 소유된 윈도우와 이 윈도우를 소유한 윈도우의 항상 위 속성이 모두 해제된다.

일반적으로 항상 위 속성을 가지지 않은 윈도우가 항상 위 속성을 가진 윈도우를 소유할 수는 있지만 반대는 불가능하다. 왜냐하면 소유된 윈도우는 소유한 윈도우보다 Z순서의 위쪽에 있어야 하므로 소유한 윈도우만 항상 위 옵션을 가질 수는 없기 때문이다. 이렇게 되면 항상 위 옵션을 가지는 윈도우의 차일드로 열려 있는 대화상자가 밑으로 숨어 버리는 현상이 발생할 수 있다. SetWindowPos 함수는 이 모든 처리를 다 해 주므로 항상 위 스타일을 토글 할 때는 SetWindowLong으로 SWL_EXSTYLE을 조작하지 말고 반드시 이 함수를 사용해야 한다.

예제 1 

다음 예제는 SetWindowPos 함수로 윈도우의 위치만 변경하는 방법과 항상 위 스타일을 토글하는 방법을 보여준다.

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	HDC hdc;
	PAINTSTRUCT ps;
	char Mes[]="왼쪽=위치 변경, 오른쪽=항상 위 옵션 변경";
	static BOOL bTopMost=FALSE;

	switch(iMessage) {
	case WM_LBUTTONDOWN:
		SetWindowPos(hWnd, HWND_NOTOPMOST,
			rand()%640, rand()%480, 0, 0, SWP_NOSIZE);
		return 0;
	case WM_RBUTTONDOWN:
		if (bTopMost) {
			SetWindowPos(hWnd,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
		} else {
			SetWindowPos(hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
		}
		bTopMost=~bTopMost;
		return 0;
	case WM_PAINT:
		hdc=BeginPaint(hWnd, &ps);
		TextOut(hdc,10,10,Mes,lstrlen(Mes));
		EndPaint(hWnd, &ps);
		return 0;
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	}
	return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

왼쪽 버튼을 누르면 난수로 정한 새 위치로 윈도우를 옮기되 SWP_NOSIZE 플래그를 주어 크기는 변경하지 않도록 하였다. 오른쪽 버튼을 누르면 항상 위 옵션을 토글시킨다.

참고함수

MoveWindow : 윈도우의 위치와 크기를 동시에 변경한다.

플렛폼

95이상

본문참조

 

반응형
반응형

//return CView::PreCreateWindow(cs);


 CView::PreCreateWindow(cs);

 if(!CWnd::PreCreateWindow(cs))
  return FALSE;

 HINSTANCE hInst=AfxGetInstanceHandle();
 WNDCLASS wc;

 ::GetClassInfo(hInst, cs.lpszClass, &wc);
 wc.lpszClassName=cs.lpszClass=WINDOW_CLASSNAME;

 return AfxRegisterClass(&wc);

반응형
반응형

#pragma comment(linker, "/entry:WinMainCRTStartup /subsystem:console" )

 

아무대나 이 한줄을 적는다


_DEBUG   전처리를 해도 좋다..


p.s 전에 한번 올린적이 있음

반응형
반응형

furyheimdall.springnote.com


MFC 나 API 에서는 유저에게 숨겨진 실제 엔트리포인트가  CRTWinMain 으로 콘솔과는 전혀 다르게 사전에 초기화가 됩니다.

하지만 MFC 나 API 환경에서 간단한 수치를 디버깅 하기 위해선 익숙해지더라도 참 번거롭기 마련입니다.

이런 답답한 부분때문에 네이버에서 콘솔을 띄우는 방법에 대해 검색해보았는데 의외로 많더군요.

그중에 가장 좋다 싶은 방법을 선택하여 클래스로 만들어보았습니다만... 민망할 정도로 사용상 편의점이 아니고서는 썰렁하네요.


사용자 삽입 이미지

일단 기본적인 방법에 대해서 살펴보겠습니다.

  1. AllocConsole();   //콘솔을 할당    
  2. FreeConsole();   //콘솔을 해제   

  1. /* stdout 에 대한 설정 */  
  2. hCrt = _open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE),_O_TEXT);    
  3. hf = _fdopen(hCrt,"w");  
  4. *stdout = *hf;  
  5. setvbuf( stdout, NULL, _IONBF, 0 );   

기본적으로 위의 두가지 블럭안에 있는 코드만으로 콘솔을 띄우고 난 후 printf 나 cout 을 이용하여 출력, 콘솔을 닫는 작업들이 가능합니다.


그럼 완성된 클래스를 보지요.


  1. //[MFCConsole.h]    
  2. #pragma once  
  3. #include <io.h>  
  4. #include <fcntl.h>  
  5. #include <stdio.h>  
  6. #include <iostream>  
  7. using namespace std;    
  8. #define DEBUG_PRINT(x) printf("%s - Value : %ld[0x%lx], Address : 0x%lx\n",#x,x,x,&x)    
  9.   
  10. class CMFCConsole  
  11. {  
  12. public:  
  13.  CMFCConsole(void);  
  14.  ~CMFCConsole(void);  
  15.  void OpenConsole(void);  
  16.  void CloseConsole(void);   
  17. };  

  1. //[MFCConsole.cpp]    
  2. #include "StdAfx.h"  
  3. #include "MFCConsole.h"    
  4. CMFCConsole::CMFCConsole(void)  
  5. {  
  6.  //초기화 콘솔을 열고 stdout, stdin 설정후 콘솔을 닫음  
  7.  AllocConsole();  
  8.  int hCrtout = _open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE),_O_TEXT);  
  9.  FILE *hout = _fdopen(hCrtout,"w");  
  10.  *stdout = *hout;    
  11.  int hCrtin = _open_osfhandle((long)GetStdHandle(STD_INPUT_HANDLE),_O_TEXT);  
  12.  FILE *hin = _fdopen(hCrtin,"r");  
  13.  *stdin = *hin;  
  14.  setvbuf( stdin, NULL, _IONBF, 0 );  
  15.  FreeConsole();  
  16. }    
  17. CMFCConsole::~CMFCConsole(void)  
  18. {  
  19.  //해제  
  20.  _fcloseall();  
  21. }    
  22. void CMFCConsole::OpenConsole(void)  
  23. {  
  24.  //콘솔을 열고 타이틀을 셋팅, 열린 콘솔이 있을경우 무시됨  
  25.  if(AllocConsole()){  
  26.   SetConsoleTitle(_T("Furyheimdall's Console"));  
  27.   printf("-----------------------------------------------\n");  
  28.   printf("             Console Class for MFC             \n");  
  29.   printf("              Made by Furyheimdall             \n");  
  30.   printf("-----------------------------------------------\n\n");  
  31.  }  
  32. }    
  33. void CMFCConsole::CloseConsole(void)  
  34. {  
  35.  //콘솔을 닫음. 열린 콘솔이 없을경우 무시  
  36.  FreeConsole();  
  37. }   

반응형

+ Recent posts