MFC 65

MFC 객체간 통신 방법

MFC 객체간 통신 방법 (Programming/Windows Programming, 2007/06/26 14:59) 출처 : 데브피아 채상혁님(serapian) 자주쓰이는 MFC 객체간의 통신입니다. 외워쓰기에는 시간이 아깝고, 매번 찾으려면 귀찮았는데 한번에 모아놓으니 편리하네요.^^ [SDI 형태] 1. MainFrame 얻기 - CMainFrame *pFrame = (CmainFrame *) AfxGetMainWnd(); 2. App 포인터 얻기 - CTestApp *pApp = (CtestApp *) AfxGetApp(); 3. Document 포인터 얻기 - CMainFrame *pFrame = (CMainFrame *)AfxGetMainWnd(); CTestDoc *pDoc = (CTestD..

MFC 2008.09.02

RTTI의 이해

2007/02/13 22:53 RTTI의 이해 2007/02/13 22:53 in C/C++ RTTI는 Run-Time Type Information의 약자로써, 실행시간에 객체의 타입 정보를 얻게 하는 C++의 확장? 정도 이다. 자바나 C#의 경우에는 리플렉션의 축소판 정도라고 생각하면 되겠다. 우선은 RTTI를 위하여 구현해야 하는 기능을 보자. - 실행 시에 알려지지 않은 클래스의 이름과 크기를 얻을 수 있어야 한다. - 실행 시에 알려지지 않은 클래스를 동적으로 생성할 수 있어야 한다. 우선 실행 시에 클래스의 이름을 얻는 방법부터 보자. 이를 위해서는 딱 두가지의 처리만 해주면 된다. 1. 자신의 클래스의 이름을 저장하는 정적변수를 만든다. 2. 그 이름을 리턴하는 GetClassName()을..

MFC 2008.09.02

MFC 프로그램의 흐름 살펴보기 - 인터널

1. 예제 앞으로 MFC의 내부속으로 들어가 보기 위해 실제 예제 코드를 가지고 실험하게 될 것이다. Visual C++ 6.0 sp5 기반으로 설명할 것이며 아래 코드가 실험용으로 사용하게 될 예제이다. // Simple.hpp #include class CSimpleApp: public CWinApp { public: virtual BOOL InitInstance(); }; MFC를 이용하려면 afxwin.h는 반드시 포함시켜야 한다. CWinApp를 비롯한 MFC에서 제공하는 주요 클래스와 함수들의 프로토타입들이 정의, 또는 선언되어 있는 헤더 파일이다. CSimpleApp 클래스를 선언하면서 CWinApp를 상속받도록 했다. CWinApp는 application object라 해서 어플리케이션의 ..

MFC 2008.09.01

클래스 멤버 함수를 윈도우 프로시져로 등록하기 [3/3]

우선 클래스 멤버 함수를 윈도우 프로시져로 등록하는건 간단합니다.아래처럼 클래스 선언에서 함수명 앞에 static를 붙여주기면 하면 됩니다.class A{public:    HWND CreateEventWnd(HINSTANCE hInstance);    static LRESULT CALLBACK EventWndProc(HWND hWnd, UINT uMsg, WPARAM wParam,         LPARAM lParam);}멤버 함수들은 보이지 않게 인자 하나를 추가로 더 전달받게 되는데요.아시겠지만 this 포인터 입니다.이 this 포인터가 인자로 하나 더 붙기 때문에 윈도우 프로시져가 될 수 없습니다.그래서 this 포인터를 전달하기 않게 하기 위해 static 멤버로 만듭니다.  이렇게 하면 컴..

MFC 2008.09.01

클래스 맴버함수를 콜백함수로 사용하기 [2/3]

클래스 맴버함수를 콜백함수로 사용하기 (passing class member function as callback function) --------------------------------------------------- 이 문제는 윈도우즈 API 와 C++ 언어를 같이 사용할 때 부딪히는 문제이다. 콜백함수를 인자로 요구하는 API 에 클래스의 멤버함수를 넘겨 줄 수는 없는 것인가? 여기 그 해결의 가능성을 보여준다. --------------------------------------------------- 항상 고민해 왔던것. 마음속 깊은곳으로 부터, 나를 괴롭히던 문제. DLGPROC 형 파라메터에 클래스의 맴버함수를 넘겨줄수는 없는것인가. DialogBoxParam( hInst, MAKEIN..

MFC 2008.09.01

클래스 멤버함수를 윈도우 프로시저로 사용하기 [1/3]

클래스 멤버함수를 윈도우 프로시저로 사용하기 [1/3]Win_API 2008/07/19 21:01 원문 : Window Procedures as Class Member Functions  원문위치: http://www.rpi.edu/~pudeyo/articles/wndproc/index.html   원저자 : Oleg Pudeyev  원문 마지막 수정일: 2003년 1월 29일  번역자 : sobahoko  번역시작일 : 2006.3.11  번역 마지막 수정일 : 2006.3.18   클래스 멤버함수를 윈도우 프로시저로 사용하기  Oleg Pudeyev 저    이 문서에서, 나(Oleg Pudeyev)는 클래스 멤버함수를 윈도우 프로시저로 사용하는 몇가지 방법에 대해 살펴볼 것이다. 나는 특정 메시지를..

MFC 2008.09.01

MFC 메인 윈도우의 생성 흐름

아래 발췌한 부분 중에 다음이 좀 잘못된 듯 하다. 1. 예제 소스에 InitApplication을 InitInstance로 수정해야 한다. 2. AfxHookWindowCreate함수의 기능을 잘못 설명한 듯 하다. 윈도우 프로시저를 후킹하고, _AFX_THREAD_STATE 전역변수에 해당 윈도우 객체 포인터 값를 입력함으로써 위 후킹과정이 이니셜라이즈되었음을 알려준다. void AFXAPI AfxHookWindowCreate(CWnd* pWnd) { // MFC sets a trhead-global m_pWndInit, which points // to the window being created. This is the only way // CWnd::CreateEx and AfxHookWindow..

MFC 2008.09.01

MFC 팁들

타이틀바에 제목없음 제거하기 (일반적으로 프로그램을 실행하면 아래와 같이 제목없음이 나온다.) 제목없음을 제거하려면 아래와 같이 FWS_ADDTOTITLE 속성을 제거해 주는 부분을 추가해 준다. BOOL CMainFrame::PreCreateWindow( CREATESTRUCT& cs ) { if( !CFrameWnd::PreCreateWindow(cs) ) return FALSE; cs.style ^= FWS_ADDTOTITLE; return TRUE; } ------------------------------------------------&^>^;;--------------------------------------------- 실행 시 창의 크기 조절 다음과 같이 cs.cx, cs.cy 값을 변..

MFC 2008.09.01