반응형
반응형
반응형

다운로드시

 

저장할수 있는 열기, 저장, 취소 창이 열리지 않고

 

바로 파일이 익스플로러에서 열릴때..

 

 

 

내컴퓨터 -> 도구 -> 폴더 옵션 -> 파일형식 -> 해당 파일 확장자를 찾은 다음 ->

 

  고급 -> 다운로드후 열기 전에 확인 check


반응형
반응형

* 네임 스페이스

 

 : 명칭 부여의 자유를 보장한다.

   네임 스페이스(Name Space)는 말 뜻 그대로 명칭들이 기억되는 영역이며 명칭의 소속 공간이라고 할 수 있다.

 

1. 필요 이유

 

짧고 간단한 프로그램에서 명칭을 작성하는 것은 그리 어려운 일이 아니다. 그러나 프로그램이 복잡해지고 규모가 커질수록 더 많은 명칭이 필요해져서 고유한 이름을 붙이는 일이 점점 더 어려워지고 있다.

게다가 팀 단위로 작업할 때는 혼자서 명칭을 다 만드는 것이 아니며 외부 라이브러리를 가져다 쓰는 일도 흔해져서 우연히 명칭이 충돌하는 일이 잦아졌다.

 

예) Count라는 변수를 쓰고 싶은데 팀의 다른 개발자가 이미 이 명칭을 전역 변수로 쓰고 있다거나 외부 라이브러리에서 다른 의미로 사용중이라면 이 이름을 쓸 수 없다.

 

2. 형식

 

namespace 이름

{

          여기에 변수나 함수를 선언한다.

}

 

 

3. 적용 사례

 

1) 문제점 발생

: namespace1

#include <Turboc.h>

 

int i;

double i;

void func()

{

     i=123;        // 어떤 i 인지 중복문제 발생

}

 

void main()

{

     func();

}

 

2) 해결안

 

 

: namespace2

#include <Turboc.h>

 

namespace A {

     double i;

}

namespace B {

     int i;

}

void func()

{

     A::i=12.345;

     B::i=123;

}

 

void main()

{

     func();

}

 

 

3) 네임 스페이스의 종류 - 전역(디폴트), 지정이냐

 

=>네임 스페이스를 별도로 정의하지 않아도 항상 존재하는 네임 스페이스가 있는데 이를 전역 네임 스페이스라고 한다. 이른바 디폴트 네임 스페이스라고 볼 수 있는데 흔히 전역 변수를 선언하는 영역,그러니까 함수의 바깥쪽이 바로 이 영역이다.

 

: namespace3

#include <Turboc.h>

 

int i;                  // 전역 네임 스페이스 소속

namespace A {

     int i;             // A 소속

}

 

void func()

{

     int i;

 

     i=1;              // 지역 변수 i

     ::i=2;            // 전역 네임 스페이스의 i

     A::i=3;          // A 네임 스페이스의 i

}

 

void main()

{

     func();

}

 

 

2. 네임 스페이스 사용 (좀더 간편한 방식)

 

=> 네임 스페이스는 명칭의 선언 영역을 분리하여 명칭의 충돌을 방지한다. 그래서 네임 스페이스안에 명칭을 선언하면 이름을 붙일 때 충돌을 걱정하지 않고 자유롭게 이름을 붙일 수 있다.

 

=>이렇게 작성된 명칭을 사용하려면 매번 소속을 밝히고 참조해야 하므로 무척 번거롭다. 다음과 같이 선언된 네임 스페이스가 있다고 하자.

 

1) using 지시자 - 전체 다 가져오기 : using 지시자

 

using namespace 다음에 네임 스페이스를 지정하는 방식이다. 지정한 네임 스페이스의 모든 명칭을 이 선언이 있는 영역으로 가져와 소속 지정없이 명칭을 바로 사용할 수 있도록 한다.

 

: usingdirective

#include <Turboc.h>

 

namespace MYNS {

     int value;

     double score;

     void func() { printf("I am func\n"); }

}

 

using namespace MYNS;           // 네임 스페이스의 모든 명칭을 이 선언으로 가져온다.

 

void main()

{

     value=3;

     score=1.2345;

     func();

}

 

 

2) 변수 하나만 가져오기  : using 선언

 

: usingdecl

#include <Turboc.h>

 

namespace MYNS {

     int value;

     double score;

     void func() { printf("I am func\n"); }

}

 

void main()

{

     using MYNS::value;    // using 선언

 

     value=3;

     MYNS::score=1.2345;

     MYNS::func();

}

 

void subfunc()

{

     MYNS::value=3;

}

 

  

3) 사용에 대한 추천

 

가급적이면 using 지시자로 네임 스페이스의 전체 명칭을 가져 오는 것보다 using 선언으로 꼭 필요한 것만 가져오는 것이 더 좋다.

 

 

3. 별명의 사용

 

네임 스페이스는 우연한 충돌을 방지하기 위해 보통 긴 이름을 주는데 이름이 너무 길면 입력하기에 번거롭고 코드도 지저분해진다. 이럴 경우 namespace 키워드 다음에 A=B; 형태로 긴 이름 대신 짧은 별명을 정의할 수 있다. 별명은 동일한 대상에 대한 다른 이름이므로 이후 B라는 이름 대신 A를 대신 사용하면 된다. 다음 예를 보자.

 

namespace VeryVeryLongNameSpaceName {

     struct Person { };

}

 

void main()

{

     namespace A=VeryVeryLongNameSpaceName;

     A::Person P;

}

 


반응형

'프로그래밍 > MFC' 카테고리의 다른 글

클래스 계층 구조  (0) 2009.02.11
SDI 함수 호출순서(생성시)  (0) 2009.02.11
Dialog의 생성 순서  (0) 2009.02.11
메세지맵 Class :: CCmdTarget  (0) 2009.02.11
DB 사용하기..  (0) 2009.02.11
반응형

반응형

'프로그래밍 > MFC' 카테고리의 다른 글

namespace  (0) 2009.02.11
SDI 함수 호출순서(생성시)  (0) 2009.02.11
Dialog의 생성 순서  (0) 2009.02.11
메세지맵 Class :: CCmdTarget  (0) 2009.02.11
DB 사용하기..  (0) 2009.02.11
반응형

CTestApp()
      CTestApp::InitApplication()
      CTestApp::InitInstance()
      AddDocTemplate()
      ParseCommandLine()
      ProcessShellCommand()

CTestDoc::CTestDoc()
CMainFrame::CMainFrame()
CMainFrame::LoadFrame()
CMainFrame::PreCreateWindow()
CMainFrame::PreCreateWindow()
CMainFrame::PreSubclassWindow()
CMainFrame::OnCreate() - Call
      CMainFrame::OnCreateClient() - Call
            CTestView::CTestView()
            CTestView::Create() - Call
                  CTestView::PreCreateWindow()
                  CTestView::PreSubclassWindow()
                  CTestView::OnCreate() - Called
                  CTestView::OnCreate() - Return
                  CTestView::OnShowWindow() - Call
                  CTestView::OnShowWindow() - Return
            CTestView::Create() - Return
      CMainFrame::OnCreateClient() - Return
      CMainFrame - m_wndToolBar.CreateEx
      CMainFrame - m_wndStatusBar.Create
CMainFrame::OnCreate() - Return
CTestDoc::OnNewDocument()
CTestView::OnInitialUpdate() - Call
CTestView::OnInitialUpdate() - Return

 Initialize OK!! --------------------------------------

CMainFrame::OnActivateApp() - Call
CMainFrame::OnActivateApp() - Return
CMainFrame::OnActivate() - Call
CMainFrame::OnActivate() - Return
CMainFrame::OnShowWindow() - Call
CMainFrame::OnShowWindow() - Return

### CTestApp::Run() - Call ###

 

 

* Application Program Close ----------------------------

CMainFrame::OnClose() - Call
      CMainFrame::OnShowWindow() - Call
      CMainFrame::OnShowWindow() - Return
      CMainFrame::OnActivate() - Call
      CMainFrame::OnActivate() - Return
      CMainFrame::OnActivateApp() - Call
      CMainFrame::OnActivateApp() - Return
      CMainFrame::DestroyWindow() - Call
            CMainFrame::OnDestroy() - Call
            CMainFrame::OnDestroy() - Return
            CTestView::OnDestroy() - Call
            CTestView::OnDestroy() - Return
                  CTestView::PostNcDestroy() - Call
                        CTestView::~CTestView()
                  CTestView::PostNcDestory() - Return
            CMainFrame::OnNcDestroy() - Call
                 CMainFrame::PostNcDestroy() - Call
                        CMainFrame::~CMainFrame()
                  CMainFrame::PostNcDestroy() - Return
            CMainFrame::OnNcDestroy() - Return
      CMainFrame::DestroyWindow() - Return
      CTestDoc::~CTestDoc()
 CMainFrame::OnClose() - Return
 CTestApp::ExitInstance()

### CTestApp::Run() - Return ###

반응형

'프로그래밍 > MFC' 카테고리의 다른 글

namespace  (0) 2009.02.11
클래스 계층 구조  (0) 2009.02.11
Dialog의 생성 순서  (0) 2009.02.11
메세지맵 Class :: CCmdTarget  (0) 2009.02.11
DB 사용하기..  (0) 2009.02.11
반응형
MFC Dialog의 생성 순서
 
가끔씩 MFC의 DialogBase의 class를 만들 경우 기본적으로 호출되는 함수들의 순서가 궁금해서
정리해 둔다.

함수의 호출 순서가 예매한 4개의 함수의 호출 순서는
  1. Dialog class의 생성자 함수
  2. OnSize함수
  3. OnInitDialog함수
  4. OnPaint함수

여기에서 주목해야 할 부분은 InitDialog를 하기 전에 OnSize가 호출된다는 사실이다.

OnSize를 할 경우에는 OnInitDialog의 실행 여부를 확인하고 원하는 작업을 수행해야 한다.


반응형

'프로그래밍 > MFC' 카테고리의 다른 글

클래스 계층 구조  (0) 2009.02.11
SDI 함수 호출순서(생성시)  (0) 2009.02.11
메세지맵 Class :: CCmdTarget  (0) 2009.02.11
DB 사용하기..  (0) 2009.02.11
SDI 기반에서..  (0) 2009.02.11

+ Recent posts