I'm a Developer/MFC
-
Document Interface에서 Dialog 다루기I'm a Developer/MFC 2015. 8. 18. 19:49
SDI에서(아직 MDI는 다루지 않았으므로 SDI라고 그냥 말함) Dialog를 다루는데 순서가 헷갈려서 간단하게 정리해야 겠다는 생각이 들었다. 1) 메뉴에서 리소스 추가를 누른다. 2) [ Dialog - 새로 만들기 ]를 누른다. 3) 다음과 같은 화면이 나오면 Dialog상자 배경을 더블 클릭하여 클래스 마법사를 띄운다. 4) 다음과 같이 뜨면 클래스 이름을 설정해준다. 그러면 나머지는 알아서 설정된다. 5) 마침을 누르게되면 Dialog와 연결된 클래스가 만들어진다. 6) 대화상자를 메뉴와 연결하고 싶다면 리소스에서 [ MENU - IDR_MAINFRAME ]에 가면 메뉴표시줄을 구성할 수 있다. 7) 내가 원하는 메뉴를 만들고 메뉴의 속성에 보면 ID값을 원하는 이름으로 바꿔준다. 8) 이제 ..
-
fatal error LNK1120: 1개의 확인할 수 없는 외부 참조입니다.I'm a Developer/MFC 2015. 8. 18. 16:32
fatal error LNK1120: 1개의 확인할 수 없는 외부 참조입니다. 외부 기호를 확인할 수 없습니다. 내가 경험했던 위의 에러가 나는 경우는 주로 어딘가에서 사용한 함수에 대해 매칭이 되지 않은 경우였다. NullPointerException과 비슷한 경우인듯하다. MFC가 아닌 다른 곳에서도 이 에러는 함수를 어디선가 사용했지만 해당 함수에 대한 정의가 없을 때 뜬다. 클래스마법사에서 메시지 처리함수를 정의해놓은 오른쪽 박스에 보면 WM_PAINT메시지를 처리하는 메시지처리기 OnPaint 함수가 선언되어 있다. 이렇게 CView 구현부에서 OnPaint 함수가 없기때문에 참조할 수 없다고 나오게 된다. 따라서 없어진 함수를 잘 찾아서 구현해준다면 정상적으로 작동할 것이다. 이렇게 CView..
-
OnPaint OnDrawI'm a Developer/MFC 2015. 8. 18. 15:55
OnPaint는 CWnd클래스의 멤버함수이고 OnDraw는 CView클래스의 멤버함수이다.즉, OnPaint함수는 윈도우창 전체에 영향을 미치는 그리기 함수이고 OnDraw는 메뉴와 같은 윈도우의 기능을 제외한 순수 View부분에 그리는 함수이다. 그렇기 때문에 OnDraw함수는 프린터에 출력되는 영역을 그리기위해 쓴다고 말하기도 한다. OnDraw함수의 원형은 다음과 같다. virtual void OnDraw( CDC* pDC ) OnPaint함수의 원형은 다음과 같다. afx_msg void OnPaint( ) afx_msg는 메시지에 의해 호출되는 함수임을 나타낸다. 위와 같은 관계가 있기 때문에 OnDraw함수는 OnPaint함수 안에서 호출된다. void CTEST06View::OnDraw(CD..
-
윈도우 메뉴I'm a Developer/MFC 2015. 8. 17. 18:17
이 전에도 설명해 놓았지만 CView 클래스는 윈도우의 화면 처리 기능을 맡고 있다. 윈도우 메뉴를 띄우는 것은 우리가 화면적으로 보여주는 것이기 때문에 모두 View에서 처리를 한다.기본적인 것이지만 MFC를 처음해보는 초보자 입장에서 어느 클래스에서 작업을 해야하는지 헷갈리는 경우가 많은 것 같다.(특히, View와 Doc중 어디에서 써야할지)Doc는 데이터처리, View는 화면처리에 쓰인다는 것을 항상 기억해야겠다.윈도우 메뉴는 WM_COMMAND 메시지를 기반으로 처리된다.
-
ComboBoxI'm a Developer/MFC 2015. 8. 17. 17:23
Combo Box 컨트롤에서 선택할 때마다 다음 콤보박스에서 선택할 수 있는게 달라지도록 하고 싶은 경우가 있다. 예를 들어 첫 번째 콤보박스에서 "서울시"를 선택하면 그 다음 콤보박스는 노원구,성북구,강남구,강북구 등등 서울에 있는 지역이름을 선택할 수 있고만약 첫 번째 콤보박스에서 "경기도"를 선택하면 그 다음 콤보박스는 하남시, 광명시, 고양시 등등 경기도에 있는 지역이름을 선택할 수 있게 하는 경우이다. 이 경우 우리는 Combo Box 컨트롤의 선택이 바뀔 때마다 발생하는 CBN_SELCHANGE 이벤트를 처리하면 된다. Combo Box1, 2, 3를 각각 cBox1, cBox2, cBox3라고 선언했다고 가정했을 때 다음과 같은 로직을 이용하면 된다. 먼저 cBox1의 선택에 따라 cBox2..
-
3. 윈도우 프로그램의 뼈대I'm a Developer/MFC 2015. 8. 10. 12:12
MFC는 프로그램의 메인 윈도우를 창틀과 창을 분리해 내듯이 윈도우의 틀과 클라이언트 영역으로 서로 다른 오브젝트로 나누었습니다. ● 프레임 윈도우(CFrameWnd) - 윈도우의 창틀에 해당합니다. 스크롤바, 최소,최대,닫기 버튼, 메뉴표시줄 등이 여기에 속합니다.● 도큐먼트(CDocument) - 윈도우의 클라이언트 영역으로 데이터를 저장 및 처리하는 기능을 합니다. 우리 눈에는 보이지 않고 내부적으로 동작합니다.● 뷰(CView) - 윈도우의 창에 해당하고 클라이언트 영역으로 데이터들을 보여주는 역할을 합니다. 우리가 눈으로 보는 화면영역이라고 볼 수 있습니다. 여기에서 CDocument의 데이터를 참조할 수 있는 기능이 준비되어 있습니다. - 프로그램의 뼈대를 이루는 클래스들의 계층 구조 CObj..
-
2. 변수 표기법I'm a Developer/MFC 2015. 8. 7. 19:57
윈도우 프로그래밍을 하는데 있어서 반드시 알아둬야하는 표기법이 있습니다. 바로 헝가리안표기법인데요그 전에 우선 알아둬야 할 것이 있습니다. 윈도우 프로그래밍에서는 상수와 데이터형들을 정의 해놓고 헝가리안 표기법을 이용하기 때문에 변수 명만 보고도 무슨 타입의 변수인지 알수 있어야합니다. 다음 표는 꼭 알아두는게 좋을 것 같습니다. 데이터 형의미 BOOL 논리형. TRUE 또는 FALSE 값 BYTE 8 bit unsigned 정수형 DWORD 32 bit unsigned 정수형 LONG 32 bit signed 정수형 LONGLONG 64 bit signed 정수형 ULONGLONG 64 bit signed 정수형 FLOAT float형 변수 LPARAM 32 bit 메시지 파라미터 LPSTR NULL ..
-
1. MFC란?I'm a Developer/MFC 2015. 8. 7. 19:35
MFC(Microsoft Foundation Class)는 윈도우 프로그래밍에 필요한 약 300여 개의 클래스를 계층구조적으로 구현해 놓은 클래스 라이브러리 입니다. MFC 클래스들은 다음과 같은 부류로 나누어 볼 수 있습니다. - 프로그램의 뼈대를 이루는 클래스- 윈도우 관련 클래스- 그래픽 관련 클래스- 자료 구조 클래스- 파일 및 데이터베이스 관련 클래스- 인터넷 관련 클래스- OLE 관련 클래스- 에러 처리 및 디버깅을 위한 클래스 먼저 다음의 MFC의 자료구조 클래스들을 알아두면 앞으로 공부하는데 더 도움이 될 것입니다. CPoint 클래스 기능 2차원 좌표계의 점을 저장 주요 멤버변수 int x, y 주요 멤버함수 연산자 함수 : =, ==, !=, +=, -=, +, - 등을 이용한 연산기능..