1 / 25

MFC 프로그래밍 기본

MFC 프로그래밍 기본. 강성관. CString 클래스 (1/3). 특성 가변 길이 문자열을 지원한다 . 프로그램 실행 도중 문자열 길이를 자유롭게 바꿀 수 있다 . 최대 길이는 (INT_MAX - 1) 이다 . const char* 나 LPCTSTR 대신 CString 객체를 직접 사용할 수 있다 . 이때는 CString 객체에 대해 (LPCTSTR) 연산자를 명시적으로 적용하는 것이 좋다 . CString str = " 안녕하세요 .";

sierra
Download Presentation

MFC 프로그래밍 기본

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. MFC 프로그래밍 기본 강성관

  2. CString 클래스 (1/3) • 특성 • 가변 길이 문자열을 지원한다. • 프로그램 실행 도중 문자열 길이를 자유롭게 바꿀 수 있다. 최대 길이는 (INT_MAX - 1)이다. • const char*나 LPCTSTR 대신 CString 객체를 직접 사용할 수 있다. • 이때는 CString 객체에 대해 (LPCTSTR) 연산자를 명시적으로 적용하는 것이 좋다. CString str = "안녕하세요."; cout << (LPCTSTR)str << endl; // 실행 결과? cout << str << endl; // 실행 결과?

  3. CString 클래스 (2/3) • 객체 생성 및 초기화 CString str1; str1 = "안녕하세요."; CString str2("오늘은"); CString str3(str2); CString str4 = str1 + " " + str2 + " 즐거운 날입니다."; cout << (LPCTSTR)str1 << endl; cout << (LPCTSTR)str2 << endl; cout << (LPCTSTR)str3 << endl; cout << (LPCTSTR)str4 << endl; str4 += " 하하하"; cout << (LPCTSTR)str4 << endl;

  4. CString 클래스 (3/3) • CString::Format( ) • CString::LoadString( ) CString str; str.Format("x=%d, y=%d", 100, 200); MessageBox(NULL, (LPCTSTR)str, "CString 연습", MB_OK); CString str; str.LoadString(IDS_HELLO); MessageBox(NULL, (LPCTSTR)str, "CString 연습", MB_OK);

  5. CPoint, CRect 클래스 • 클래스 정의 • 업캐스팅 void SomeFunc(RECT* rect) { ... } RECT r1; CRect r2; SomeFunc(&r1); // OK! SomeFunc(&r2); // OK! (Upcasting)

  6. CPoint 클래스 • 생성자 • 예 CPoint::CPoint (int x, int y); CPoint pt1(10, 20); POINT pt = {30, 40}; CPoint pt2(pt); pt1.Offset(40, 30); pt2.Offset(20, 10); if(pt1 == pt2) cout << "두 점의 좌표가 같습니다." << endl; else cout << "두 점의 좌표가 다릅니다." << endl;

  7. CRect 클래스 (1/2) • 생성자 • 사각형의 폭과 높이 • 좌표의 포함 여부 판단 CRect::CRect (int l, int t, int r, int b); int CRect::Width (); int CRect::Height (); BOOL CRect::PtInRect (POINT point);

  8. CRect 클래스 (2/2) • 예 CRect rect1; rect1.SetRect(0, 0, 200, 100); CRect rect2(0, 0, 200, 100); if(rect1 == rect2) cout << "두 사각형의 좌표가 같습니다." << endl; else cout << "두 사각형의 좌표가 다릅니다." << endl; RECT rect = {100, 100, 300, 200}; CRect rect3(rect); cout << rect3.Width() << " " << rect3.Height() << endl; CPoint pt(200, 150); if(rect3.PtInRect(pt)) cout << "점이 사각형 내부에 있습니다." << endl; else cout << "점이 사각형 외부에 있습니다." << endl;

  9. MainFrame 객체 GetActiveView() GetActiveDocument() GetFirstViewPosition() GetNextView() View 객체 Document객체 GetDocument() 객체들 사이에서 상호참조를 위한 함수들

  10. CArchive 클래스 • 각종 외부문서 데이터를 읽고 저장하는 기능을 지원하기 위한 클래스 • 이 클래스를 이용하여 데이터를 파일에 저장하거나 파일로부터 데이터를 읽어들 일 수 있다. • 문서 파일을 디스크가 아닌 메모리나 네트워크와의 연결을 통해 저장하 거나 전송하기 위한 처리에서도 이 클래스를 사용 디스크 저장 CFile 클래스 메모리 저장 Cdocument 클래스 Serialize 함수 CMemFile 클래스 네트워크 연결 CSocketFile 클래스 Carchive 클래스를 통한 데이터의 입출력

  11. GDI(Graphic Device Interface) • 윈도우 시스템은 디바이스 드라이버를 이용하여 하드웨어에 독립적인프로그래밍이 가능 • 장치 의존적인 하드웨어 구동은 디바이스 드라이버 프로그램이 담당 • 윈도우 운영체제는 디바이스 드라이버를 구동하는 식 • Application program은 하드웨어 종류에 상관없이 동일한 명령을 사용하여그래픽 출력을 처리할 수 있고 하드웨어에 독립적이 될 수 있는 전반적인윈도우가 제공하는 그래픽 환경 • DC(Device Context) • 그래픽에 필요한 모든 옵션을 한곳에 모아놓은 구조체 • 선그리기, 글꼴처리, 비트맵과 팔레트 옵션, 영역 처리등의 그래픽을 처리하는 모든 옵션들을 DC에 모아놓고 제어할 수 있도록 함. • CDC(Class of Device Context) • MFC에서 제공하는 DC클래스 = = MFC에서 DC를 클래스로 구현 • 그래픽에 필요한 모든 기능은 CDC에 있으므로 화면에 뭔가를 출력하려고하는 경우에 CDC 클래스의 instance를 얻어와서 이용해야 함. • DC는 시스템 자원이므로 얻어와서 사용후 반드시 반납해야 함. • CDC *pDC = GetDC(); //instance를 얻어옴 • pDC->TextOut(100,100, “문자출력예”) ;(100,100)위치에 문자를 출력함 • ReleaseDC(pDC); //얻어온 instance를 시스템에 반환.

  12. 그래픽 디바이스 인터페이스 (GDI: Graphic Device Interface) • 그래픽 기능과 관련해서 윈도우 운영체제가 어플리케이션 프로그램에 제공하는 모든 기능 • 디바이스 컨텍스트 (DC: Device Context) • 그래픽에 필요한 모든 옵션을 한곳에 모아둔 구조체 • GDI 오브젝트 (GDI Object) • 독립적으로 저장되는 각 범주의 그래픽 옵션 12

  13. GDI 객체 사용 및 해지 과정 • GDI 객체를 생성 • 생성된 GDI 객체를 DC에 선택하여 넣기 • 이때, DC에 있던 이전의 객체를 저장해야함 • DC를 쓰고 난 다음에 DC를 원래 상태로 복구하기 위해 사용됨 • DC를 사용하여 그림 그리기를 함 • DC에 단계 2)에서 얻은 원래 GDI 객체를 선택하여 넣기. • DC를 원래 상태로 복구하는 과정

  14. GDI 객체와 MFC 클래스 SRCCOPY

  15. 이미지 파일의 구조 헤드없음 영상의 헤드 (Head) BMP,JPG,GIF등의 헤드가 있는 영상 파일들 RAW파일(헤드가 없음) • 헤드 내에는 영상의 크기, 컬러의 수, 팔레트 등의 다양한 정보가 들어있다. • RAW파일은 헤드정보가 없으며 파일을 읽기 위해서는 영상의 크기를 미리 알고 있어야 한다.

  16. RAW 및 BMP 파일 형식의 비교 헤드없음 BMP 파일의 헤드 RAW파일(헤드가 없음) RAW 포맷 BMP 포맷

  17. BITMAPINFOHEADER • The BITMAPINFOHEADER structure contains information about the • dimensions and color format of a device-independent bitmap (DIB). • typedef struct tagBITMAPINFOHEADER • { • // bmih • DWORD biSize; LONG biWidth; LONG biHeight; • WORD biPlanes; WORD biBitCount; DWORD biCompression; • DWORD biSizeImage; LONG biXPelsPerMeter; LONG biYPelsPerMeter; • DWORD biClrUsed; DWORD biClrImportant; • } BITMAPINFOHEADER; • Members • biSize • Specifies the number of bytes required by the structure. • biWidth • Specifies the width of the bitmap, in pixels. • biHeight • Specifies the height of the bitmap, in pixels. • biSizeImage • Specifies the size, in bytes, of the image. • This may be set to zero for BI_RGB bitmaps.

  18. biBitCount • Specifies the number of bits per pixel. • The biBitCount member of the BITMAPINFOHEADER • structure determines the number of bits that define each • pixel and the maximum number of colors in the bitmap.

  19. 화면 DC와 메모리 DC 만들기 • 비트맵을 출력하려면 DC가 두개 필요 • 비트맾이 출력될 화면 윈도우의 DC • 메모리에 만들어진 DC

  20. RGBQUAD • The RGBQUAD structure describes a color consisting of relative • intensities of red, green, and blue. • typedef struct tagRGBQUAD • { • // rgbq BYTE rgbBlue; • BYTE rgbGreen; • BYTE rgbRed; • BYTE rgbReserved; • } • 멤버변수 : • rgbBlue • Specifies the intensity of blue in the color. • rgbGreen • Specifies the intensity of green in the color. • rgbRed • Specifies the intensity of red in the color. • rgbReserved • Reserved; must be zero.

  21. Invalidate([FALSE | TRUE])함수 • 강제로 WM_PAINT 메시지를 발생시켜 OnDraw()함수가 호출되게 함. • 파라미터 FALSE 이면 • background 영역은 안지워지고 업데이트 되는 부분만다시 그려짐 • 파라미터 TRUE 이면 • background 영역이모두 지워지고 업데이트 되는 부분도 다시 그려짐 • PreCreateWindow() 함수 • 윈도우가 생성되기 직전에 호출 • 앞으로 생성될 윈도우에 대한 정보가 매개변수로 넘어오 고 , 이 매개변수를 그대로 이용하여 윈도우가 생성됨 • 프레임(메인) 윈도우가 생성될 때, 윈도우의 속성을 바꾸어 줄 수 있다.

  22. Serialize() 함수 • 클래스 데이터의 내용을 파일에 저장하거나 읽어옴. • 거의 모든 MFC 클래스가 Serialize()함수를 사용할 수 있음. • 자신의 멤버변수를 디스크에 저장하거나 , 디스크에 저장되어 있는내용을 읽어오도록 함. • 프로젝트를 SDI나 MDI로 생성할 경우 • Document클래스 생성 • 파일|열기 메뉴를 선택해 주면 자동으로 Serialize() 함수호출 • 프로젝트를 DialogBased 로 생성할 경우 • 대화상자에는 파일|열기 기능이 없으므로 파일 열기 대화상자를출력하고, CArchive 객체를 생성한 후에 Serialize() 함수호출 • 대화상자에서 [열기] 버튼 클릭에 대한 이벤트를 처리하는 함수 void CDlgPrnDlg::OnFileOpen() { char szFilter[] = "Text Files(*.TXT)|*.TXT|All Files(*.*)|*.*||"; CFileDialog fileDlg(TRUE, "txt", NULL, OFN_HIDEREADONLY, szFilter); if(IDOK == fileDlg.DoModal()) { CFile file(fileDlg.GetFileName(), CFile::modeRead); // 파일 읽기를 위한 CArchive 오브젝트 생성 CArchive ar(&file, CArchive::load); // Serialize 함수 호출 Serialize(ar); } }

  23. OnDraw() 함수, OnPaint() 함수 • 윈도우에서 화면을 복원(다시 그려주는)해주는 함수 • WM_PAINT 메시지가 발생할 때마다 호출되는 함수 CWnd afx _msg void OnPaint() 상속 //CView.cpp 에서 afx_msg void OnPaint() { OnDraw() ; } //CView.h에서 virtual void OnDraw() ; CView void OnDraw() { }

  24. 화면을 업데이트 하는 방법 • Document 클래스에서 화면을 업데이트 • UpdateAllViews(NULL) 함수 호출 • NULL if all views are to be updated • View 클래스에서 화면을 업데이트 • Invalidate(TRUE|FALSE) 함수 호출 • 두 함수 모두 WM_PAINT 메시지를 발생시킴으로써 OnDraw()함수가호출되게 함.

  25. CWnd*GetDlgItem(intnID)const; • Retrieves a pointer to the specified control or child window in a dialog box or other window. • intGetCurSel()const; • return value • The zero-based index of the currently selected item. • 기능 • Retrieves the zero-based index of the currently selected item, if any, in a single-selection list box. • GetCurSel should not be called for a multiple-selection list box. • CButton::GetCheck • intGetCheck()const; • return value • 버튼이 체크되지 않았으면 0, 체크되었으면 1 • 기능 • Retrieves the check state of a radio button or check box.

More Related