2011년 5월 10일 화요일

mfc 변수 헝기리엔 표기법

a 배열
b또는f BOOL형 변수
by BYTE형 변수
c 카운터로 사용되는 변수
ch char형 변수
cx, cy x, y길이를 나타내기 위해 사용 되는 변수
d 날짜형 변수
dbl 더블 형 변수
h 핸들 형 변수
n, i int 형 변수
l long형 변수
p 포인터변수
lp long형 포인터 변수
s 문자열
sz 널 문자로 끝나는 문자열
u unsigned int 형 변수
w WORD 형 변수
dw DWORD 형 변수
str CString 형 변수

가장 기본적인 것들이다.

꼭 지켜야 할 필요가 있다는건 아니지만,

가독성을 위해서 위의 표기법을 따라주면.

자기 소스를 나중에 확인 할 때도,

남의 소스를 내가 이해 할 때도 큰 도움이 된다.


그리고 변수명을 나타낼때도

첫자리는 소문자로 쓰고, 다음 단어는 대문자로 써주는게 맞다.



m_lpMyAddress = O

m_lpmyaddress = X

m_lpmyAddress = X

m_LpMyAddress = X



이 예를 든게 왜 이렇게 예를 든건지 알텐데.

각 단어별로 시작은 대문자로 해주며, 첫자만 대문자로 쓰고, 그 다음은 소문자로 써준다.

클래스를 선언할때도, 첫자는 대문자로 써주도록 한다.

처음엔, 귀찮고 필자의 경우도 임시변수로 쓰던걸, 계속 쓰는 경우가 생기는데

그래도, 처음엔 대충 막 짜도

나중에 중간쯤 짜다가, 변수명들을 변경을 해주는걸 추천한다.

지금은 모르겠지만, 나중에 가면, 이러한 습관이 굉장히 많이 도움이 되니까.

2011년 5월 9일 월요일

MFC 요점 정리

1. DC얻기
CClientDC dc(this);

2. Client 영역 구하기
GetClientRect(&rect);
WM_SIZE 메시지발생후 cx,cy 사용

3. 문자열 사각형안에 그리기
pDC->DrawText(문자열,사각형,Style);
Style: DT_BOTTOM - 문자열을 사각형 맨아래줄에배열 반드시 DT_SINGLELINE과 함께사용
DT_CENTER - 문자열을 가로중앙에 배치
DT_VCENTER - 문자열을 세로중앙에 배치
DT_LEFT,RIGHT - 문자열을 좌,우로 배치
DT_SINGLELINE - 문자열을 한줄로만 쓴다

4. Brush 사용법
CBrush brushname(RGB(red,green,blue)); //브러쉬 생성
CBrush *oldBrush=pDC->SelectObject(&brushname); //이전Brush 저장, 새로운 Brush 선택
pDC->SelectObject(oldBrush); //원래의 브러쉬로 반환

5. Pen사용법
CPen pen(Pen Style,RGB(red,green,blue)); //브러쉬생성
//Style: PS_SOLID,PS_DASH,PS_DOT,PS_DASHDOT,PS_GEOMETRIC,PS_COSMETRIC - 펜종류
PS_ENDCAP_ROUND,PS_ENDCAP_SQUARE - 펜끝을 둥글게,각지게 설정
CPen *oldPen=pDC->SelectObject(&pen); //이전Pen저장, 새로운 Pen설정
pDC->SelectObject(oldPen); //펜반환

6. 화면다시그리기
View Class에서 - Invalidate(TRUE) : 화면을 지우고다시그린다
Invalidate(FALSE) : 화면을 덮어씌운다
UpdateAllViews(NULL); // Doc Class에서 View 의 OnDraw 호출
RedrawWindow();

7. 메시지,함수 수동으로 넣기 (EX)버튼클릭함수넣기
헤더파일의 AFX_MSG_MAP 부분에 함수를 정의
EX) afx_msg void funcName();
.cpp파일의 AFX_MSG 부분에 메시지를 추가한다
EX) ON_BN_CLICKED(ID_NAME,funcName)...
ID 등록: View 메뉴의 Resource Symbol 에 들어가서 메뉴 ID 를 등록해준다..
.cpp파일의 맨아래에서 함수를 정의한다
EX) void CClass::funcName() { ... }

8. 마우스커서 바꾸기
리소스탭에서 커서를 그리고 저장한뒤 ID값은 준다음
SetCapture(); //커서의입력을 클라이언트영역을 벗어나더라도 받아낸다
SetCursor(AfxGetApp()->LoadCursor(nIDResource));
//APP클래스의 LoadCursor View의 SetCursor 사용
ReleaseCapture(); //SetCursor()상태를 해제한다

9. 색상표 사용하기
CColorDialog dlg;
if(dlg.DoModal()==IDOK) //Dialog 를 띄운후 OK버튼을누르면 실행할부분
MemberFunc: GetColor() //선택된 색상을 받아온다 return 형은 COLORREF 형

10. 팝업메뉴 만들기
CMenu menu; //메뉴 객체생성
CMenu *pmenu; //메뉴 포인터생성
menu.LoadMenu(IDR_MAINFRAME); //메뉴를 불러온다
pmenu=menu.GetSubMenu(3); //메뉴의 3번째 메뉴를 가져온다
menu.CheckMenuItem(ID_MENU,m_kind==ID_MENU ? MF_CHECKED : MF_UNCHECKED);
//메뉴 체크하기 (메뉴 ID, ID 체크조건)
pmenu->TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this) //(TMP_Style,x좌표,y좌표,hWnd) 메뉴 띄우기

*주의사항*
[안내]태그제한으로등록되지않습니다-OnContextMenu(CWnd* pWnd, CPoint point) //여기서 point 는 스크린 기준이고,
OnRButtonDown(UINT nFlags, CPoint point) //여기서 point 는 클라이언트 기준이다!

11. 클라이언트 포인터를 스크린 포인터로 변경
ClientToScreen(&point);

12. 그림판기능
if(m_flag==FALSE) return; //m_falg=그리기 기능 참,거짓설정 그리기 아니면 빠져나간다
CClientDC dc(this);
CPen myPen(PS_SOLID,m_width,m_color);
CPen *pOldPen=dc.SelectObject(&myPen);
switch(m_shape)
{
case ID_FREELINE: //자유선그리기
dc.MoveTo(m_oldpt.x,m_oldpt.y); //지난포인터부터
dc.LineTo(point.x,point.y); //새포인터까지 그린다
break;
case ID_RECT: //사각형그리기
dc.SetROP2(R2_NOTXORPEN);
dc.Rectangle(m_spt.x,m_spt.y,m_oldpt.x,m_oldpt.y); //지워지는 효과
dc.Rectangle(m_spt.x,m_spt.y,point.x,point.y); //그려지는 효과
break;
case ID_ELLIPSE: //원그리기
dc.SetROP2(R2_NOTXORPEN);
dc.Ellipse(m_spt.x,m_spt.y,m_oldpt.x,m_oldpt.y); //지워지는 효과
dc.Ellipse(m_spt.x,m_spt.y,point.x,point.y); //그려지는 효과
break;
case ID_LINE: //선그리기
dc.SetROP2(R2_NOTXORPEN);
dc.MoveTo(m_spt.x,m_spt.y); //시작점부터
dc.LineTo(m_oldpt.x,m_oldpt.y); //지난점까지 그은선을 지운다
dc.MoveTo(m_spt.x,m_spt.y); //시작점부터
dc.LineTo(point.x,point.y); //새로운점까지 그린다
break;
}
m_oldpt=point; //바로이전값 보관
dc.SelectObject(pOldPen); //펜 반환
13. MessageBox
AfxMessageBox() -> 전역함수를 이용하영 메세지 박스를 출력한다. //어디서든지 사용할수 잇다
int CWnd::MessageBox("메세지","창제목","아이콘|버튼(상수값)"); //View클래스에서 사용한다
아이콘 상수값 MB_IC[안내]태그제한으로등록되지않습니다-xxONERROR, MB_ICONWARNING, MB_ICONQUESTION,MB_ICONINFOMATION
MB_SYSTEMMODAL //시스템모달 대화창 닫기전에 다른작업 못함
MB_APPLMODAL //응용모달
버튼 상수값 MB_OK, MB_OKCANCEL, MB_YESNO

14. OS 컨트롤
ExitWindowEx(EWX_SHUTDOWN,NULL); //Shut Down
ExitWindowsEx(EWX_FORCE,0); //강제종료
ExitWindowsEx(EWX_LOGOFF,0); //로그오프
ExitWindowsEx(EWX_POWEROFF,0); //Shut Down -> Turn Off
ExitWindowsEx(EWX_REBOOT); //Shut Down -> Reboot

15. DialogBox 메시지 교환
UpdateData(FALSE); // 컨트롤에 멤버변수의 내용을 표시해준다
UpdateData(TRUE); // 컨트롤 내용을 다이얼로그 클래스의 멤버변수로 저장

16. 자료변환
atoi,itoa - int <=> ASCII(char) 변환
str.Format(" %d %d",x,y); // int형을 문자열로 변환
atol,ltoa - ASCII <=> long 변환
atof - ACSII => float 변환
fcvt,gcvt - 실수를 text로 변환
LPtoDP, DPtoLP - 장치좌표 <=> 논리좌표 변환

17. CEdit Class 사용하기
CEdit e_str.SetSel(int StartChae, int EndChar); //처음문자부터 마지막까지 블록 지정
CEdit e_str.GetSel(int SChar,int EChar); //블럭 지정한 처음문자와 마지막문자 받기
CString str=m_str.Mid(SChar,EChar-SChar); //블럭지정한 부분을 가져온다
18. 컨트롤과 자료교환
SetDlgItemText(컨트롤 ID,문자열) //컨트롤에 문자열을 넣는다
GetDlgItemText(컨트롤 ID,문자열) //컨트롤의 내용을 문자열에 넣는다
GetDlgItem(컨트롤 ID); //컨트롤의 주소를 가져온다
19. 상태바조작
CMainFrame 생성자 위에
static UINT indicators[] = //이안에 새로운 ID를 넣고 그 ID의 갱신핸들러를 만든다음 코딩
pCmdUI->SetText("표시할내용“);

20. 수동으로 Bitmap 컨트롤 사용하기
CStatic bitmap; //bitmap 컨트롤변수
bitmap.SetBitmap(CBitmap m_bitmap); //컨트롤에 비트맵지정
GetDlgItem(IDC_BITMAP)->ShowWindow(SW_SHOW,HIDE); // 그림을 보이거나 숨긴다.
21. 응용프로그램 실행하기
WinExec("프로그램경로“,SW_SHOW,HIDE); //응용프로그램실행,경로는 \\로 구분한다

22. Bitmap 사용하기
CBitmap bitmap.LoadBitmap(IDC_BITMAP); //비트맵객체에 비트맵지정
CDC memDC; //그림그릴 메모리DC생성
MemDC.CreateCompatibleDC(pDC); //화면 DC와 메모리 DC 호환 생성
CBitmap *pOldBitmap=MemDC.SelectObject(&m_bitmap); //메모리에 그림을그린다.
pDC->BitBlt(int x, int y,int Width, int Height, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop);
//BitBlt(그림x좌표,그림y좌표,그림넓이,그림높이,그림그려진메모리DC,그림시작x좌표,그림시작y좌표,스타일);
pDC->StretchBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, DWORD dwRop )
//StretchBlt(그림x좌표,그림y좌표,그림넓이,그림높이,그림그려진메모리DC,그림x좌표,그림y좌표,메모리그림넓이,메모리그림높이,스타일);
MemDC.SelectObject(pOldBitmap); // 메모리DC반환

23. Font 바꾸기
CFontDialog dlg; //폰트다이얼로그 생성
LOGFONT m_logFont; //폰트받을변수선언
if(dlg.DoModal()==IDOK) //폰트다이얼로그표시
{dlg.GetCurrentFont(&m_logFont)} //선택된 폰트받기
OnDraw()
CFont newFont,*pOldFont; //폰트 객체 만들기
newFont.CreateFontIndirect(&m_logFont); //폰트 생성
pOldFont=(CFont *)pDC->SelectObject(&newFont); //폰트 선택
OnCreate()
CClientDC dc(this); //DC 생성
CFont *pFont=dc.GetCurrentFont(); //클라이언트 영역의 폰트를
pFont->GetLogFont(&m_logFont); //로그폰트 멤버값으로 지정

24. Font 만들기
LOGFONT logfont; //폰트를 만든다
logfont.lfHeight=50; //문자열 높이
logfont.lfWidth=0; //너비
logfont.lfEscapement=0; //문자열기울기
logfont.lfOrientation=0; //문자개별각도
logfont.lfWeight=FW_NORMAL; //굵기
logfont.lfItalic=TRUE; //이탤릭
logfont.lfUnderline=TRUE; //밑줄
logfont.lfStrikeOut=FALSE; //취소선
logfont.lfCharSet=HANGUL_CHARSET; //필수
logfont.lfOutPrecision=OUT_DEFAULT_PRECIS;
logfont.lfClipPrecision=CLIP_DEFAULT_PRECIS; //가변폭폰트 고정폭폰트
logfont.lfPitchAndFamily=DEFAULT_PITCH|FF_SWISS; //글꼴이름
strcpy(logfont.lfFaceName,"궁서체");
CClientDC dc(this);
CFont newFont; //폰트객체생성
newFont.CreateFontIndirect(&logfont); //폰트지정
CFont *pOldFont=dc.SelectObject(&newFont); //폰트선택
dc.TextOut(100,100,m_text);
dc.SelectObject(pOldFont); //폰트반환

25. Font 만들기 2
CFont newFont;
newFont.CreateFont( int nHeight, int nWidth, int nEscapement, int nOrientation, int nWeight, BYTE bItalic, BYTE bUnderline, BYTE cStrikeOut, BYTE nCharSet, BYTE nOutPrecision, BYTE nClipPrecision, BYTE nQuality, BYTE nPitchAndFamily, LPCTSTR lpszFacename );
CFont *pOldFont=dc.SelectObject(&newFont);

26. ComboBox 사용하기
CComboBox combo; //콤보박스 선언
combo.Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );
//Style - WS_CHILD|WS_VISIBLE
int n=combo.GetCurSel(); //선택된 아이템의 index를 가져온다
combo.AddString("문자열“); //문자열을 추가한다
combo.GetLBText(n,str); //n번째 아이템을 str에 저장

27. Spin 사용하기
Spin은 바로앞의 Tab Order에 따라 붙는다
m_spinr.SetRange(1900,3000); //스핀 범위 지정
m_spinr.SetPos(m_nYear); //스핀 위치 지정

28. CTime사용하기
CTime time; //시간객체생성
time=CTime::GetCurrentTime(); //현재시간을 저장
time.GetYear(),time.GetMonth();,time.GetDay(),time.GetHour(),time.GetMinute(),time.GetSecond()

29. CListBox 메소드
AddString("문자열"); //리스트에 문자열 추가
DeleteString(index); //리스트에서 항목 삭제
GetCount() //전체 항목 갯수를 얻는다.
GetSelcount() //선택된 항목 갯수 리턴
GetSel() //선택된 것인지 아닌지를 리턴한다 -> 양수 = TRUE , 음수 => FALSE
GetText(int index,문자열변수) //index 번째 문자열을 문자열 변수에 넣는다
FindStringExact(문자열) //지정 문자열의 index 값 리턴 -> 없으면 리턴값 LB_ERR 반환
FindString("a") //"a"로 시작하는 항목을 모두 찾는다.
ResetCountent() //모든 내용을 지운다.

30. 파일입출력
프로젝트생성시 Step4 => Advanced => 저장파일확장자지정
.h 파일에 DECLARE_SERIAL(CSawon) //이 클래스를 저장,로드가능한 클래스로 쓰겟다는 선언
.cpp 파일에 IMPLEMENT_SERIAL(CSawon,CObject,1) //이거를 해야 저장이 가능하다
void CFileioDoc::Serialize(CArchive& ar)
if (ar.IsStoring()) //저장하기
{ar<
else //열기
{ar>>m_shape; //불러올걸 쓴다. 읽을때도순서대로읽어야한다}

31. MicroSoft FlexGrid 사용하기!
CMSFlexGrid m_Grid; //FlexGrid 컨트롤 변수
CString strTitle[]={"고객코드","고객성명","고객포인트","신장","몸무게","고객등급","BMT지수","판정결과"};
// Grid 의 제목에 넣을문자배열
int Width[]={900,900,1100,800,800,900,1000,900};
// Grid 의 열넓이 지정할 배열
m_Grid.SetRows(m_cnt+2); //전체행수 지정
m_Grid.SetCols(8); //전체열수 지정
m_Grid.Clear(); //지우기
m_Grid.SetFixedCols(0); //고정열은 없다.
m_Grid.SetRow(0); // 행선택
for(int i=0;i<=7;i++)
{
m_Grid.SetColWidth(i,Width[i]); //열 넓이 설정
m_Grid.SetCol(i); //열 선택
m_Grid.SetText(strTitle[i]); // 선택된행, 선택된열에 Text 를 넣는다
}

32. 4대 Class간 참조
//각각 헤더파일 include
#include "MainFrm.h" //메인프레임 헤더파일
#include "ClassDoc.h" //Doc클래스 헤더파일
#include "ClassView.h" //View를 include 할때는 반드시 Doc 헤더파일이 위에잇어야한다
#include "Class.h" //APP Class 의 헤더파일

void CClassView::OnMenuView() //뷰클래스
CClassApp *pApp=(CClassApp *)AfxGetApp(); //View -> App
CMainFrame *pMain=(CMainFrame *)AfxGetMainWnd(); //View -> MainFrm
CClassDoc *pDoc=(CClassDoc *)pMain->GetActiveDocument(); //View -> MainFrm -> Doc
CClassDoc *pDoc=(CClassDoc *)GetDocument(); //View -> Doc

//MainFrame 클래스
CClassView *pView=(CClassView *)GetActiveView(); //MainFrm -> View
CClassDoc *pDoc=(CClassDoc *)GetActiveDocument(); //MainFrm -> Doc
CClassApp *pApp=(CClassApp *)AfxGetApp(); //MainFrm -> App

//Doc 클래스
CClassApp *pApp=(CClassApp *)AfxGetApp(); //Doc -> App
CMainFrame *pMain=(CMainFrame *)AfxGetMainWnd(); //Doc -> MainFrm
CClassView *pView=(CClassView *)pMain->GetActiveView(); // Doc -> MainFrm -> View
CClassView *pView=(CClassView *)m_viewList.GetHead(); // Doc -> View

//App 클래스
CMainFrame *pMain=(CMainFrame *)AfxGetMainWnd(); //App -> MainFrm
CClassView *pView=(CClassView *)pMain->GetActiveView(); //App -> MainFrm -> View
CClassDoc *pDoc=(CClassDoc *)pMain->GetActiveDocument(); //App -> MainFrm -> Doc

33. ToolBar 추가하기
CMainFrame 으로 가서 멤버변수 추가
CToolBar m_wndToolBar1;
OnCreate 로 가서 다음 내용을 추가해준다 (위의 toolbar 부분을 복사하고 이름만 바꾸면 된다.3군데..)
if (!m_wndToolBar1.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar1.LoadToolBar(IDR_TOOLBAR1))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}

그 함수내에서 //TODO 아래에 내용추가..역시..복사해서 이름만 바꾸면 된다.
m_wndToolBar1.EnableDocking(CBRS_ALIGN_TOP|CBRS_ALIGN_BOTTOM);
//DockControlBar(&m_wndToolBar1); <= 이부분 대신..
이거를 넣는다..
CRect toolRect; //툴바 영역을 얻을 사각형
this->RecalcLayout(); //현상태의 Client 영역을 구해서 저장한다
m_wndToolBar.GetWindowRect(&toolRect); //툴바영역을 저장한다
toolRect.left+=1; //사각형의 왼쪽을 1Pixel 줄인다
DockControlBar(&m_wndToolBar1,AFX_IDW_DOCKBAR_TOP,&toolRect); //ToolRect에 툴바를 붙인다
return 0;

34. ToolBar에 ComboBox붙이기
CComboBox m_combo; //객체생성
ID 등록 => view 메뉴 => resource symbol => new => ID_COMBO
oncreate 에 내용 추가 (콤보를 만들고 표시하는 내용)
m_wndToolBar.SetButtonInfo(10,IDC_COMBO,TBBS_SEPARATOR,150);
//툴바의 10번째버튼을 편집한다
CRect itemRect; //콤보를넣을 사각형을 만든다
m_wndToolBar.GetItemRect(10,&itemRect); //툴바의 10번째 버튼을 사각형에 넣는다
itemRect.left+=5; //앞여백
itemRect.right+=5; //뒤여백
itemRect.bottom+=100; //콤보가열릴 공간확보
m_combo.Create(WS_CHILD|WS_VISIBLE|CBS_DROPDOWN,itemRect,&m_wndToolBar,IDC_COMBO);
//콤보박스를 툴바에 붙여준다
m_combo.AddString("이름"); //내용추가
m_combo.SetCurSel(0); //셀 선택

35. Toolbar에 수동으로넣은 ComboBox 사용하기
afx_msg void [안내]태그제한으로등록되지않습니다-xxOnSelectCombo(); //원형
ON_CBN_SELCHANGE(IDC_COMBO,[안내]태그제한으로등록되지않습니다-xxOnSelectCombo) //메세지맵에 추가
CMainFrame *pMain=(CMainFrame *)GetParent(); //메인프레임 주소참조
CComboBox *pCom=(CComboBox *)(pMain->m_wndToolBar.GetDlgItem(IDC_COMBO));
//콤보박스의 주소를 가져온다, 접근할 때 메인프레임 -> 툴바 -> 콤보박스 의 순서로 가야한다
int n=pCom->GetCurSel(); //현재선택된 셀의 인덱스를 가져온다
if(n==CB_ERR) return; //선택된셀이 없으면 중지한다
CString str;
pMain->m_combo.GetLBText(n,str); //선택된셀의 Text를 가져온다

36. UPDATE_COMMAND 사용하기
pCmdUI->Enable(TRUE); //버튼 활성화
pCmdUI->SetText((bAdd)?"취소":"신규"); //버튼의 text 설정
pCmdUI->SetCheck(TRUE); //버튼 체크

37. 프로그램정보저장
CWinApp::GetProfileString(섹션명,항목명,기본값); // 함수를 사용한다. (문자열)
CWinApp::GetProfileInt(섹션명,항목명,기본값); //불러올때사용 (숫자)
CWinApp::WriteProfileString(섹션명,항목명,값); //저장할때 사용 (문자열)
CWinApp::WriteProfileInt(섹션명,항목명,값); //저장할때 사용 (숫자)
//불러올때 사용할함수
void CMainFrame::ActivateFrame(int nCmdShow) //프로그램 실행후 프레임생성될때 실행
//저장할 때 WM_DESTROY 메시지 사용

38. 컨트롤바 표시하기
CMainFrame *pMain=(CMainFrame *)GetParent(); //MainFrame 주소가져오기
pMain->ShowControlBar(&pMain->m_wndToolBar,bTool1,FALSE); //툴바를 bTool2 에따라 보이고 감춘다

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); //이건 반드시 주석처리한다..

40. progress Bar 쓰기

m_progress.SetRange(m_first,m_last); //Progress 범위설정하기
m_progress.SetStep(m_step); //Progress Step설정하기
//m_progress.StepIt(); //스텝만큼 움직이기
//또는 다음을 사용한다
for(int a=m_first;a<=m_last;a+=m_step) //a가 처음부터 끝까지
{
m_progress.SetPos(a); // 위치를 a에 맞춘다
Sleep(50); //천천히 움직이게한다
}

41. 파일대화상자 FileDialog 사용하기
void CConDlg1::OnFileopen() //파일열기 버튼
{
CFileDialog *fdlg; //파일대화상자 객체 생성 // 포인터로 만든다..
static char BASED_CODE szFilter[] = "Animate Video Files (*.avi)|*.avi|All Files (*.*)|*.*||";
//필터를 만들어 준다..이건 할줄 모름..
fdlg =new CFileDialog(TRUE, ".avi", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter);
//대화상자 만들기..이렇게 해야댄다..
if(fdlg->DoModal()==IDOK) //이제..대화상자를 띠우고..
{ //OK 누르면 실행될 부분..
m_filename=fdlg->GetPathName(); //대화상자에서 경로를 받아서 저장.
UpdateData(FALSE);
}
}
선생님이 해준거 //파일 다이얼로그 만들기
CFileDialog fdlg(TRUE,"avi",".avi",OFN_OEVRWRITEPROMPT,"Vidoe Files(*.avi)|*.avi|All Files(*.*)|*.*||");

42. Animate Control 사용하기
m_animate.Open(m_filename); //파일을 연다
m_animate.Play(0,-1,1); //(처음프레임,마지막프레임,반복횟수)
m_animate.Stop(); //정지시키기
m_ani.SetAutoStart(TRUE); //자동으로 시작한다
43. Control 의 Style 바꿔주기
Control.ModyfyStyle(제거할스타일,추가할스타일); //스타일은 MSDN내용 참조

44. 시스템 날자바꾸기 버튼
//SetSystemTime(),GetSystemTime() //GMT 표준시를 가져온다.
//GetLocalTime(),SetLocalTime() //현재 지역시간을 가져온다.

SYSTEMTIME st;
GetLocalTime(&st); //현재 시간, 날자를 넣는다.
st.wYear=m_date2.GetYear();
st.wMonth=m_date2.GetMonth();
st.wDay=m_date2.GetDay();
SetSystemTime(&st);

45. 시스템 시간 바꾸기 버튼
UpdateData(TRUE);
SYSTEMTIME st;
GetLocalTime(&st);
st.wHour=m_time.GetHour();
st.wMinute=m_time.GetMinute();
st.wSecond=m_time.GetSecond();
SetLocalTime(&st);

46.시스템의 드라이브 문자 얻기

char temp[50];
GetLogicalDriveStrings(sizeof(temp),temp);
CString str,str1;
int n=0;
while(*(temp+n)!=NULL)
{
str=temp+n;
str1+= " "+str.Left(2);
n+=4;
}

47. 현재 작업경로 얻기
char temp[MAX_PATH]; //MAX_PATH 는 경로길이의 최대를 define 해놓은것.
GetCurrentDirectory(sizeof(temp),temp); // 현작업하는 경로를 얻어온다.(경로 길이,문자형);

48. Tree Control 사용하기
HTREEITEM hmov,hmus; //핸들을받을 변수 이게 잇어야 하위 디렉토리 생성가능
hmov=m_tree.InsertItem("영화",TVI_ROOT,TVI_LAST); //,TVI_ROOT,TVI_LAST는 default
hm1=m_tree.InsertItem("외화",hmov); //hmov 아래 “외화”트리 생성
CImageList m_image; //그림을 사용하기 위한 클래스다!! 알아두자..
m_tree.SetImageList(&m_image,TVSIL_NORMAL); //Tree View Style Image List => TVSIL
hmov=m_tree.InsertItem("영화",0,1,TVI_ROOT,TVI_LAST); //,TVI_ROOT,TVI_LAST는 default
hmus=m_tree.InsertItem("가요",1,2); //("문자열",처음그림번호,선택시그림)
hm1=m_tree.InsertItem("외화",2,3,hmov); //그림 번호는 default 로 0이 들어간다..

49. List Control 사용하기
m_list.ModifyStyle(LVS_TYPEMASK, LVS_ICON); //리스트를 큰아이콘형태로 보인다
m_list.ModifyStyle(LVS_TYPEMASK, LVS_SMALLICON); //리스트를 작은아이콘형태로 보인다
m_list.ModifyStyle(LVS_TYPEMASK, LVS_LIST); //리스트를 리스트형태로 보인다
m_list.ModifyStyle(LVS_TYPEMASK, LVS_REPORT); //리스트를 자세히형태로 보인다

CImageList m_treeimage; //이미지리스트
CImageList m_small, m_large;
m_large.Create(IDB_LARGE,32,0,RGB(255,255,255)); //이거는 클래스에서 추가해준거다
m_small.Create(IDB_SMALL,16,0,RGB(255,255,255)); (bmp ID값,
m_list.SetImageList(&m_large,LVSIL_NORMAL);
m_list.SetImageList(&m_small,LVSIL_SMALL);
CString name[]={"홍길동","진달래","한국남","개나리"};
CString tel[]={"400-3759","304-7714","505-9058","700-9898"};
CString born[]={"1980-1-1","1981-12-20","1980-05-15","1981-08-31"};
CString sex[]={"남자","여자","남자","여자"};
m_list.InsertColumn(0,"이름",LVCFMT_LEFT,70);
m_list.InsertColumn(1,"전화번호",LVCFMT_LEFT,80);
m_list.InsertColumn(2,"생일",LVCFMT_LEFT,90);
m_list.InsertColumn(3,"성별",LVCFMT_LEFT,50);
LVITEM it; //리스트 구조체
char temp[100];
for(int a=0;a<4;a++)
{
int n=(sex[a]=="남자")?0:1;
m_list.InsertItem(a,name[a],n); //insert item 은 행을 만들고..
it.mask=LVIF_TEXT|LVIF_IMAGE; //마스크 설정
it.iItem=a;
it.iSubItem=1; //열 설정
strcpy(temp,tel[a]); //이거 모하는거냐..
it.pszText=temp;
m_list.SetItem(&it); // setitem 열에 정보를 넣는다.

it.iSubItem=2; //열 설정
strcpy(temp,born[a]); //이거 모하는거냐..
it.pszText=temp;
m_list.SetItem(&it); // setitem 열에 정보를 넣는다.

it.iSubItem=3; //열 설정
strcpy(temp,sex[a]); //이거 모하는거냐..
it.pszText=temp;
m_list.SetItem(&it); // setitem 열에 정보를 넣는다.


50. Bitmap Button 사용하기
CBitmapButton 을 사용한다! CButton 에서 상속 받는클래스임..
m_button1.Create(NULL,
WS_CHILD|WS_VISIBLE|BS_OWNERDRAW,CRect(310,20,370,50),
this,IDC_MYBUTTON); //버튼만들기
m_button1.LoadBitmaps(IDB_UP,IDB_DOWN,IDB_FOCUS,IDB_DISABLE); //버튼의 그림설정
m_button1.SizeToContent(); //버튼을 그림 크기로 맞춰 준다!!

그냥 버튼을 비트맵버튼으로 바꾸기 -> 버튼을 만든다 속성에서 OWNERDRA 속성에 체크!!
m_button2.LoadBitmaps(IDB_UP,IDB_DOWN,IDB_FOCUS,IDB_DISABLE); //버튼의 그림설정
m_button2.SizeToContent(); //버튼을 그림 크기로 맞춰 준다!!

51. 중복없는 난수발생하기
int su; //발생된 난수저장
int a,b;
BOOL bDasi; //숫자가중복될경우 다시하기위한 변수
for(a=0;a<9;a++) //난수 9개 발생
{
bDasi=TRUE;
while(bDasi)
{
bDasi=FALSE;
su=rand()%10; //난수발생
for(b=0;b
{
if(temp[b]==su) //중복이면
{
bDasi=TRUE; //중복이 잇으면 다시while 문을 실행한다
break;
}//if
}//for
}//while
temp[a]=su; //중복이 아니면 대입한다

52. 메뉴 범위로 사용하기
ON_COMMAND_RANGE(ID_LEVEL3,ID_LEVEL9,OnLevel); //범위메세지 발생
//메뉴 ID의 값이 연속된 숫자일 경우 범위로 지정해서 사용할수잇다

53. 한,영 전환함수
void CCustView::SetHangul(BOOL bCheck) //T:한글 F:영문 이건 외우자..
{
HIMC hm=ImmGetContext(this->GetSafeHwnd()); //뷰클래스의 윈도우 핸들포인터를 얻는다.
if(bCheck)
{
::ImmSetConversionStatus(hm,1,0); //1은 한글 0은 영문
}
else
{
::ImmSetConversionStatus(hm,0,0); //영문으로 바꿔준다
}
::ImmReleaseContext(this->GetSafeHwnd(),hm); //장치를 풀어준다
}
#include "imm.h" //헤더 반드시 추가하고
imm32.lib (라이브러리 파일)를 반드시 링크해주어야 한다!
**** 라이브러리 추가하기
프로젝트메뉴 -> 셋팅 -> 링크탭

54. DLL함수정의하기
임포트함수 : extern "C" __declspec(dllimport) 리터형 함수명(매개변수,...) ;
- 메인프로그램에서 DLL에 있는 함수를 호출할때 사용한다.

엑스포트함수 : extern "C" __declspec(dllexport) 리터형 함수명(매개변수,...)
{
내용;
}

MFC 주요 함수

1. CObject 클래스

- CObject는 MFC 라이브러리에서 가장 기본이 되는 클래스이다.



생성

CObject : 디폴트 생성자

CObject : 복사 생성자

operator new : new연산자

operator delete : delete연산자

operator = : 할당 연산자


진단 관련 함수

AssertValid : 객체의 멤버들에 대한 유효성 여부를 검사한다.

Dump : 객체의 멤버들에 대한 진단 덤프를 생성한다.


직렬화 관련 함수

IsSerializable : 객체가 직렬화될 수 있는지를 알아보기 위해서 검사 작업을 수행한다.

Serialize : 아카이브를 이용하여 일반 파일에 객체를 저장하거나 또는 파일로부터 읽어 들인다.


기타 함수들

GetRuntimeClass : 객체의 클래스와 일치하는 CRuntimeClass 구조체를 반환한다.

IsKindOf : 주어진 클래스와 객체와의 관계를 검사한다.



2. 애플리케이션 프레임 워크 관련 클래스

- Visual C++에서 AppWizard가 생성해주는 기본 클래스들이다.

1)CWinApp

- CWinApp 클래스는 윈도우에서 수행되는 애플리케이션의 객체를 파생하기 위한 베이스 클래스이다.

데이터 멤버

m_pszAppName : 애플리케이션의 이름을 지정한다.

m_hInstance : 애플리케이션의 현재 인스턴스에 대한 핸들

m_hPrevInstance : 32비트 애플리케이션에서는 NULL로 설정된다.

m_lpCmdLine : 애플리케이션을 수행하기 위한 위한 명령행 문자열로 널 문자로 끝난다.

m_nCmdShow : 초기 윈도우가 어떻게 표시되는지를 지정한다.

m_bHelpMode : 사용자가 도움말 모드에 있는지를 알려준다.(shift + F1으로 호출)

m_pActiveWnd : OLE서버가 in-place모드로 활성화될 때 컨테이녀 애플리케이션의 메인 윈도에 대한 포인터이다.

m_pszExeName : 애플리케이션의 모듈명

m_pszHelpFilePath : 도움말 파일의 경로명

m_pazProfileName : 애플리케이션에서 사용되는 INI파일명

m_pszRegistrykey : 애플리케이션의 프로파일 설정 상태를 저장하기 위한 완전한 형태의 레지스트리 키를 지정하기 위해서 사용된다.

생성관련함수

CWinApp : CWinApp객체를 생성한다.


역할

LoadCuror : 커서 리소스를 읽어들인다.

LoadStandardCursor : WINDOWS.H 해더파일에서 이미 IDC_상수로 정의되어 있는 커서를 읽어 들인다.

LoadOEMCursor : WINDOWS.H 해더파일에서 윈도우 OEM에 이미 OCR_상수로 정의되어 있는 커서를 읽어 들인다.

LoadIcon : 아이콘 리소스를 읽어 들인다.

LoadStandardIcon : WINDOWS.H 해더파일에서 윈도우에 이미 IDI_ 상수로 정의되어있는 아이콘을 읽어 들인다.

LoadOEMIcon : WINDOWS.H 해더파일에서 윈도우 OEM에 이미 OIC_상수로 정의되어 있는 아이콘을 읽어 들인다.

RunAutomated : /Automation 옵션에 대해서 애플리케이션의 명령행 옵션의 전달을 테스트한다.
(CCommandLineInfo::m_bRunEmbedded에 있는 값을 이용하는 것이 더 낫다.)

RunEmbedded : /Embedding 옵션에 대해서 애플리케이션의 명령행 전달을 테스트한다.
(CCommandLineInfo::m_bRunEmbedded에 있는 값을 이용하는 것이 더 낫다.) ParseCommandLine : 명령행 문자열에서 피라미터와 플래그를 parsing한다.

ProcessShellCommand : 명령행 문자열에서 피라미터와 플래그를 처리한다.

GetProfileInt : 애플리케이션의 .INI 파일로부터 정수 값을 읽는다.

WriteProfileInt : 애플리케이션의 .INI 파일에 정수 값을 적는다.

GetProfileString : 애플리케이션의 .INI 파일로부터 문자열을 읽는다.

WriteProfileString : 애플리케이션의 .INI 파일에 문자열을 적는다.

AddDocTemplate : 애플리케이션에서 사용 가능한 문서 템플릿의 리스트에 문서 템플릿을 추가한다.

GetFirstDocTemplatePosition : 첫 번째 문서 템플릿으 위치를 얻어낸다.

GetNextDocTemplate : 문서 템플릿의 위치를 얻어낸다. (반복사용가능)

OpenDocumentFile : 파일에서 문서를 열기 위해서 프레임워크에 의해 호출된다.

AddToRecentFileList : 최근에 사용되었던 파일들의 리스트에 파일명을 추가한다. 최근 에 사용되었던 파일을 MRU파일이라고도 한다.

SelectPrinter : 프린터 대화상자를 통해서 사용자가 전에 지정한 프린터를 선택한다.

CreatePrinterDC : 프린터의 디바이스 컨테스트를 생성한다.

GetPrintDeviceDefaultsD : 프린터의 기본설정 값을 얻어낸다.

오버라이드 가능한 함수

InitApplication : 애플리케이션 수준의 초기화 작업을 수행할 때 오버라이드한다.

InitInstance : 윈도우 객체를 생성하는 것처럼 윈도우 시스템에서 사용하는 인스턴스에 대해서 초기화 작업을 수행하는 경우에 오버라이드한다.

Run : 디폴트 메시지 루프를 실행한다. 메시지 루프를 다른 방식으로 수행하기를 원하면 이 함수를 오버라이드한다.

OnIdle : 애플리케이션의 idle time에 작업을 수행하려면 오버라이드한다.

ExitInstance : 애플리케이션이 종료될 때 수행하려는 작업이 있으면 오버라이드한다.

HideApplication : 모든 문서를 닫기 전에 애플리케이션을 숨긴다.

CloseAllDocuments : 모든 문서를 닫는다.

PreTranslateMessage : 메시지가 윈도우 함수 ::TranslateMessage와 DispatchMessage로 보내기 전에 메시지를 필터링한다.

SaveAllModified : 수정된 모든 문서들을 저장한다고 사용자에게 알려준다.

DoMessageBox : 애플리케이션에서 AfxMessageBox를 구현한다.

ProcessMessageFilter : 어떤 메시지가 애플리케이션으로 보내지기 전에 가로챈다. ProcessWndProcException : 애플리케이션의 메시지가 명령 핸들러에 의해서 넘겨진 처리 되지 않은 모든 예외들을 처리한다.

DoWaitCuror : 대기 중임을 나타내는 커서(보통 모래시계 모양)를 출력하거나, 사라지게 한다.

OnDDECommand : DDE(Dynamic Data Exchange)를 실행한다는 명령에 대응하여 프레임워크 가 직접 호출한다.

WinHelp : 윈도우 함수인 WinHelp를 호출한다.


초기화 관련 함수

LoadStdProfileSettintgs : 표준 .INI파일에 설정된 값을 읽어들이고 최근에 사용한 파 일들의 목록을 유지하다.

SetDialogBkColor : 대화상자와 메시지 출력 상자의 기본 배경색을 지정한다.

SetRegistryKey : 애플리케이션의 설정 값들이 .INI파일 대신에 레지스트리에 저장되도 록 한다.

EnableShellOpen : 사용자가 파일 관리자에서 테이터 파일을 열 수 있도록 한다.

RegisterShellFileTypes : 파일 관리자에게 모든 문서의 타입을 등록한다.

Enable3dControls : 컨트롤의 모양이 3차원 형태를 하도록 한다.

Enable3dControlsStatic : 컨트롤의 모양이 3차원 형태를 하도록 한다.


명령 핸들러 관련 함수

OnFileNew : ID_FILE_NEW 명령을 수행한다.

OnFileOpen : ID_FILE_OPEN 명령을 수행한다.

OnFilePrintSetup : ID_FILE_PRINT_SETUP 명령을 수행한다.

OnContextHelp : 애플리케이션의 SHIFT+F1 키를 핸들링한다.

OnHelp : 애플리케이션에서 F1 키를 누를 경우 도움말의 수행을 핸들링한다.

OnHelpIndex : ID_HELP_INDEX 명령을 핸들링한다.

OnHelpFinder : ID_HELP_FINDER 명령과 ID_DEFAULT_HELP 명령을 핸들링한다.

OnHelpUsing : ID_HELP_USING 명령을 핸들링한다.


2) CFrameWnd

- CFrameWnd 클래스는 윈도우를 직접 다루는 멤버함수와 함께 오버라이드된 SDI 또는 팝업 프레임윈도우의 기능을 제공한다.



데이터 멤버

m_bAutoMenuEnable : 메뉴 아이템에 대한 자동 사용 및, 가능과 불가능여부를 제어한다. rectDefault : 윈도우가 초기 크기와 위치를 선택하도록 하는 CWnd 객체를 생성하는 경 우 정적 CRect 형인 멤버를 피라미터로 넘겨주게 된다.


생성 관련 함수

Create : CFrameWnd 객체와 관련된 프레임 윈도우를 생성하고 초기화하기 위해서 사용한 다.

LoadFrame : 리소스 정보를 이용하여 프레임 윈도우를 동적으로 생성하기 위해서 이 함 수를 호출한다.

LoadAccelTable : 가속키 테이블을 읽어 들이기 위해서 이 함수를 호출한다.

LoadBarState : 컨트롤 바의 설정 상태를 복원하기 위해서 호출한다.

SaveBarState : 컨트롤 바의 설정 상태를 보관하기 위해서 호출한다.

ShowControlBar : 컨트롤 바를 실제로 보이게 하기 위해서 이 함수를 호출한다.

SetDockState : 메인 윈도우 내의 프레임 윈도우를 도크상태(dock)로 설정한다.

GetDockState : 메인 윈도우 내의 프레임 윈도우 중 도크상태(dock)인 것들을 검색한다.


역할

ActivateFrame : 사용자가 사용 가능하고 실제로 보이는 프레임을 만든다.

InitialUpdateFrame : 프레임 윈도우 내에서 호출된 모든 뷰에 소속된 OnInitialUpdate 멤버 함수의 호출을 유발한다.

GetActiveFrame : 활성화된 CFrameWnd 객체를 설정한다.

SetActiveView : 활성화된 CView 객체를 설정한다.

GetActiveView : 활성화된 CView 객체를 반환한다.

CreateView : CView에서 파생되지 않은 프레임 내에 뷰를 생성한다.

GetActiveDocument : 활성화된 CDocument 객체를 반환한다.

GetControlBar : 컨트롤 바를 검색한다.

GetMessageString : 명령 ID와 일치하는 메시지를 검색한다.

IsTracking : 스플리터 막대가 이동되었는지를 확인하고자 하는 경우에 호출한다.

SetMessageText : 표준 상태 바의 텍스트를 설정한다.

EnableDocking : 컨트롤 바가 도킹되도록 허용한다.

DockControlBar : 컨트롤 바를 도킹시킨다.

FloatControlBar : 컨트롤 바를 분리시킨다.

BeginModalState : 프레임 윈도우를 modal로 설정한다.

EndModalState : 프레임 윈도우의 modal상태를 종료한다.

InModalState : 프레임 윈도우가 modal상태에 있는지를 알려주는 값을 반환한다.

ShowOwnedWindows : CFrameWnd객체에서 계승받은 모든 윈도우들을 보여준다.

RecalcLayout : CFrameWnd객체의 컨트롤 바를 다시 위치시킨다.


오버 라이드 가능한 함수

OnCreateClient : 프레임에 대한 클라이언트 윈도우를 생성한다.

OnSetPreviewMode : 애플리케이션의 메인 프레임 윈도우를 인쇄 미리 보기 모드 내부와 외부 모두를 설정한다.

GetMessageBar : 프레임 윈도우에 속한 상태 바에 대한 포인터를 반환한다.

NegotiateBorderSpace : 프레임 윈도우 내의 경계 공간을 결정한다.


명령 핸들러 관련 함수

OnContextaHelp : 도움말을 보고자 하는 아이템에 위치시키고 SHIFT+F1 키를 눌렀을 때 해당 도움말을 출력하는 기능을 한다.



3) CView - CView클래스는 사용자 정의 뷰 클래스의 기본적인 기능을 제공한다. 뷰는 문서와 연관 이 있으며 문서와 사용자 사이를 연결하는 중간 매개체가 된다. 즉, 뷰는 문서의 이미 지를 화면 상이나 프린터에 표현하고 사용자의 입력을 문서에 대한 조작으로 바꾸는 작업을 수행한다.


역할

DoPreparePrinting : 인쇄 대화상자를 표시하고 프린터 디바이스 컨텍스트를 생성한다. PreparePrinting 멤버 함수를 오버라이드하는 경우에 호출한다.

GetDocument : 뷰와 관련된 문서를 반환한다.


OLE 관련 오버라이드 가능한 함수

OnDragEnter : 아이템이 처음으로 뷰의 드래그-드롭 영역으로 드래그 되는 경우에 호출 된다.

OnDragLeave : 드래그된 아이템이 뷰의 드래그-드롭 영역을 벗어 나는 경우에 호출된다.

OnDragOver : 아이템이 뷰의 드래그-드롭 영역위로 드래그되는 경우에 호출된다.

OnDrop : 아이템이 뷰의 드래그-드롭 영역으로 드래그되었을 때 호출된다. (디폴트 핸들러)

OnDropEx : 아이템이 뷰의 드래그-드롭 영역으로 드래그되었을 때 호출된다. (디폴트 핸들러)

OnDragScroll : 커서가 윈도우의 스크롤 영역으로 드래그되었을 때 호출된다.

OnInitialUpdate : 뷰가 처음으로 문서에 추가된 후에 호출된다.

OnScrollBy : 활성화된 인-플레이스 OLE 아이템을 포함하는 뷰가 스크롤되는 경우에 호출 된다.

OnScroll : OLE 아이템이 뷰의 경계선을 넘어서 드래그될 때 호출된다.

오버라이드 가능한 함수

IsSelected : 문서 아이템이 선택되었는지를 확인한다. OLE에 대한 지원이 요구된다.

OnActivateView : 뷰가 활성화되었을 때 호출된다.

OnActivateFrame : 뷰를 포함하는 프레임 윈도우가 활성화 또는 비활성화될 때 호출된다.

OnBeginPrinting : 인쇄 작업이 시작될 때 호출된다. GDI 리소스를 할당하기 위해서 오버라이드 한다.

OnDraw : 문서의 이미지를 클라이언트 윈도우, 프린터, 인쇄 미리보기 윈도우로 출력하는 경우에 호출된다. 보통은 오버라이드 한다.

OnEndPrinting : 인쇄 작업이 끝나는 경우에 호출된다. GDI 리소스를 할당 해제하기 위해서 오버라이드한다.

OnEndPrintPreview : 미리보기 모드를 빠져나올 대 호출된다.

OnPrepareDC : 화면 표시를 위해 OnDraw멤버 함수를 호출하기 전이나 인쇄, 인쇄 미리보 기를 위해서 OnPrint 멤버 함수를 호출하기 전에 호출된다.

OnPreparePrinting : 문서가 인쇄되거나 미리보기 전에 호출된다. 인쇄 대화상자를 초기화 하려면 이 함수를 오버라이드 한다.

OnPrint : 문서의 한 페이지를 인쇄하거나 미리보기 하는 경우에 호출된다.


생성 관련 함수

CView : CView 객체를 생성한다.



4) CDocument

- CDocument클래스는 사용자에 의해서 정의된 문서 클래스들을 위해서 기본적인 기능 들을 제공한다 여기서 문서란 사용자가 "File" ▶ "Open" 명령을 사용하여 열고 "File" ▶ "Save" 명령을 사용하여 저장하는 데이터의 단위를 나타낸다.


생성 관련 함수

CDocument : CDocument 객체를 생성한다.


역할

AddView : 뷰를 문서에 연결시킨다.

GetDocTemplate : 문서 타입을 기술한 문서 템플릿에 대한 포인터를 반환한다.

GetFirstViewPosition : 뷰의 리스트에서 첫 번째 뷰의 위치를 반환한다. 보통 루프에서 처 음 위치로 사용된다.

GetNextView : 문서와 관련된 뷰의 포인터를 반환하고, 다음 뷰의 위치로 이동한다.

GetPathName : 문서에서 사용되는 데이터 파일의 경로를 반환한다.

GetTitle : 문서의 제목을 반환한다.

IsModified : 문서가 마지막으로 저장된 후에 수정이 되었는지의 여부를 가리킨다.

RemoveView : 문서에서 뷰와의 연결을 해제한다.

SetModifiedFlag : 마지막으로 저장이 된 후에 문서를 수정했는지의 여부를 가리키는 플래 그를 설정한다.

SetPathName : 문서에 의해 사용되는 데이터 파일의 경로를 설정한다.

SetTitle : 문서의 제목을 설정한다.

UpdateAllViews : 문서와 연관이 있는 모든 뷰를 갱신한다.


오버라이드 가능한 함수

CanCloseFrame : 미리 오버라이드할 수 있으며 이 문서를 보여주기 위한 프레임 윈도우를 닫기 전에 호출된다.

DeleteContents : 문서의 해제 작업을 수행하기 위해서 호출된다.

OnChangedViewList : 뷰가 문서에 추가되거나 혹은 해제될 때 호출된다.

OnCloseDocument : 문서를 닫기 위해서 호출된다.

OnNewDocument : 새로운 문서를 생성하기 위해서 호출된다.

OnOpenDocument : 이미 존재하는 문서를 열기 위해서 호출된다.

OnSaveDocument : 디스크에 문서를 저장하기 위해서 호출된다.

ReportSaveLoadException : 미리 오버라이드할 수 있으며 문서를 열거나 저장하는 작업을 수행하는 도중에 예외가 발생하였을 때 호출된다.

GetFile : 원하는 CFile 객체의 포인터를 반환한다.

ReleaseFile : 다른 애플리케이션이 파일을 사용할 수 있도록 하기 위해서 파일을 해제한 다.

SaveModified : 미리 오버라이드할 수 있으며 문서가 저장이 되어야 하는지를 사용자에게 묻기 위해서 호출된다.

PreClossFrame : 프레임 윈도우를 닫기 전에 호출된다.


메일 관련 함수

OnFileSendMail : 연결된 문서와 메일 메시지를 전송한다.

OnUpdateFileSendMail : 메일기능이 지원된다면, Send Mail 명령이 수행될 수 있다.



3. 윈도우 관련 클래스 : CWnd

- CWnd 클래스는 MFC의 모든 윈도우 클래스들에 대해서 기본적인 기능을 제공 하는 클래스이다.

데이터 멤버

m_hWnd : CWnd와 관련된 HWND를 가리킨다.


생성/소멸 관련 함수

CWnd : CWnd객체를 생성한다.

DestroyWindow : 윈도우를 소멸한다. 그렇지만 객체를 소멸시키는 것은 아니다.





초기화 관련 함수

Create : CWnd 객체와 관련된 자식 윈도우를 만들고 초기화한다.

PreCreateWindow : CWnd 객체와 관련된 실제 윈도우를 만들기 전에 호출된다.

CaleWindowRect : 클라이언트 사각형 영역에서 윈도우를 만들기 전에 호출된다.

GetStyle : 현재 윈도우의 스타일을 반환한다.

GetExStyle : 확장된 윈도우의 스타일을 반환한다.

Attach : CWnd 객체에 윈도우 핸들을 추가한다.

Detach : CWnd 객체에서 윈도우 핸들을 분리하고 핸들을 반환한다.

PreSubclassWindow : SubclassWindow가 호출되기 전에 필요한 다른 서브클래싱이 일어나 는 것을 허용한다.

SubclassWindow : CWnd 객체에 윈도우를 추가하고 CWnd의 메시지맵을 통해서 루트 메시 지로 만든다.

UnSubclassWindow : CWnd 객체에서 윈도우를 분리한다.

FromHandle : 윈도우에 핸들이 주어질 때 CWnd 객체에 대한 포인터를 반환한다. CWnd 객체가 핸들을 가지지 않는다면, 임시적인 CWnd 객체기 생성되고 추가된다.

FromHandlePermanent : 윈도우에 핸들이 주어질 때 CWnd 객체에 대한 포인터를 반환한다.

CWnd 객체가 핸들을 가지지 않는다면, NULL이 반환된다.

DeleteTempMap : CWinApp가 자동으로 호출하며 FromHandle에 의해서 생성된 어떠한 임시 CWnd 객체도 지운다.

GetSafeHwnd : 포인터가 NULL이면, m_hWnd, 또는 NULL을 반환된다.

CreateEx : 오버랩된 형태의 팝업 자식 윈도우를 생성하고 이것을 CWnd 객체에 추가한다

. CreateControl : MFC 프로그램에서 CWnd 객체에 의해서 표현되는 OLE 컨트롤을 생성한다.


윈도우 상태 함수

IsWindowEnabled : 윈도우에 마우스와 키보드 입력이 가능한지를 결정한다.

EnableWindow : 윈도우에 마우스와 키보드로 입력을 가능하게 하거나 불가능하도록 한다.

GetActiveWindow : 활성 윈도우를 얻는다.

SetActiveWindow : 윈도우를 활성화한다.

GetCapture : 마우스를 캡쳐한 CWnd를 얻는다.

SetCapture : 모든 일련의 마우스 입력이 CWnd로 보내지도록 한다.

GetFocus : CWnd가 현재 입력 포커스를 가지고 있는지 검사한다.

SetFocus : 입력 포커스를 설정한다.

GetDestktopWindow : 윈도우 시스템의 desktop윈도우를 얻는다.

GetForegroundWindow : 포그라운드 윈도우의 포인터를 반환한다.

SetForegroundWindow : 생성된 윈도우의 스레드를 포그라운드로 설정하고 윈도우를 활성 화 한다.

GetIcon : 핸들에서 아이콘을 얻는다.

SetIcon : 핸들에 특정 아이콘을 설정한다.

GetWindowContextHelpId : 도움말 항목에 대한 식별자를 얻는다.

SetWindowContextHelpId : 도움말 항목에 대한 식별자를 지정한다.

ModifyStyle : 현재 윈도우의 스타일을 수정한다.

ModifyStyleEx : 확장된 윈도우의 스타일을 수정한다.


윈도우의 크기와 위치

GetWindowPlacement : 윈도우가 보여지는 상태와 정상(복귀된), 최소, 최대화된 윈도우의 위치를 얻는다.

SetWindowPlacement : 윈도우가 보여지는 상태와 정상(복귀된), 최소, 최대화된 윈도우의 위치를 설정한다.

IsIconic : CWnd가 최소화되었는지를 알아본다.

IsZoomed : CWnd가 최대화되었는지를 알아본다.

MoveWindow : CWnd의 위치또는 크기를 변경한다.

SetWindowPos : 크기, 위치, 순서, 팝업, 최상위 윈도우에 대한 것을 설정한다.

ArrangeIconicWindows : 모든 축소된(아이콘화 된) 자식 윈도우에 대한 것을 설정한다.

BringWindowToTop : CWnd를 오버랩 된 윈도우의 맨 처음으로 보낸다.

GetWindowRect : CWnd의 화면 좌표를 얻는다.

GetClientRect : CWnd 클라이언트 영역의 크기를 얻는다.


윈도우 참조 관련 함수

ChildWinddowFromPoint : 어떤 자식 윈도우가 특정 점을 포함하고 있는지를 알아낸다.

FindWindow : 윈도우의 이름과 클래스로 확인이 가능한 윈도우의 핸들을 반환한다.

GetNextWindow : 윈도우 관리자의 리스트에서 다음 또는 이전 윈도우를 반환한다.

GetOwner : CWnd의 소유자에 대한 포인터를 얻는다.

SetOwner : CWnd의 소유자를 변경한다.

GetTopWindow : CWnd에 속한 맨 첫 번째 자식 윈도우를 반환한다.

GetWindow : 이 윈도우와 특정한 관계를 가지고 있는 윈도우를 반환한다.

GetLastActivePopup : CWnd이 가지고 있는 팝업 윈도우가 가장 최근에 활성화 되었는지를 알아낸다.

IsChild : CWnd가 자식 윈도우인지 또는 다른 특정 윈도우의 후손인지를 알아낸다.

GetParent : CWnd의 부모 윈도우가 있다면 그 윈도우를 얻는다.

GetSafeOwner : 지정된 윈도우의 소유자를 얻는다.

SetParent : 부모 윈도우를 변경한다.

WindowFromPoint : 특정 점을 포함하는 윈도우를 알아낸다.

GetDlgItem : 특정 대화상자에서 특정 ID의 컨트롤을 얻는다.

GetDlgCtrlID : CWnd가 자식 윈도우이면, 자신의 ID 값을 반환한다.

SetDlgCtrlID : 윈도우에 윈도우 또는 컨트롤의 ID를 설정한다.

GetDescendantWindow : 모든 자식 윈도우를 검색하고 윈도우의 특징 ID를 반환한다.

GetParentFrame : CWnd 객체의 부모 프레임 윈도우를 얻는다.

SendMessageToDescendants : 윈도우의 모든 자식 윈도우에게 메시지를 보낸다.

GetToLevelParent : 윈도우의 최상위 부모를 얻는다.

GetToLevelOwner : 최상위 윈도우를 얻는다.

GetParentOwner : 자식 윈도우의 부모 윈도우에 대한 포인터를 반환한다.

GetTopLevelFrame : 윈도우의 촤상위 프레임 윈도우를 얻는다.

UpdateDialogControls : 대화상자의 버튼이나 다른 컨트롤들의 상태 갱신을 요구한다.

UpdateData : 대화상자의 데이터를 초기화하고 유효화한다.

CenterWindow : 부모 윈도우의 중앙에 윈도우를 위치시킨다.


갱신/그리기 함수

BeginPaint : 드로잉 작업을 수행하기 위해서 CWnd를 준비한다.

EndPaint : 드로임 작업을 마친다.

Print : 특정 디바이스 컨텍스트에 현재 윈도우를 그린다.

PrintClient : 특정 디바이스 컨텍스트에 모든 윈도우를 그린다.

LockWindowUpdate : 정해진 윈도우에 드로잉을 불가능하도록 하거나 다시 가능하도록 한다.

GetDC : 클라이언트 영역에 표시된 디바이스 컨텍스트를 얻는다.

GetDCEx : 클라이언트 영역에 표시된 디바이스 컨텍스트를 얻고, 그리는 도중에 클리핑이 가능하도록 한다.

RedrawWindow : 클라이언트 영역에서 특정 사각형이나 특정 영역을 갱신한다.

GetWindowDC : 툴바나, 메뉴, 스크롤 바를 포함한 모든 윈도우 영역에 대한 디바이스 컨 텍스트를 얻는다.

ReleaseDC : 클라이언트와 윈도우 디바이스 컨택스트를 해제함으로써, 다른 애플리케이션 이 사용할 수 있도록 한다.

UpdateWindow : 클라이언트 영역을 갱신한다.

SetRedraw : CWnd가 변화된 것을 다시 그리도록 설정하거나, 다시 그릴 수 없도록 설정 하는 역할을 한다.

GetUpdateRect : CWnd의 갱신 영역을 완전히 둘러싸는 가장 작은 사각형의 좌표를 얻는다.

GetUpdateRgn : CWnd의 갱신 영역을 얻는다.

Invalidate : 모든 클라이언트 영역을 무효화한다.

InvalidateRect : 현재의 갱신 영역에 사각형을 추가함으로써 정해진 사각형 내의 클라이언 트 영역을 무효화한다.

InvalidateRgn : 현재의 갱신 영역에 영역을 추가함으로써 정해진 영역내의 클라이언트 영 역을 무효화한다.

VaildateRect : 현재의 갱신 영역에서 사각형을 제거함으로써 정해진 사각형 내의 클라이 언트 영역을 유효화시킨다.

VaildateRgn : 현재의 갱신 영역에 영역을 제거함으로써 정해진 영역 내의 클라이언트 영 역을 유효화시킨다.

ShowWindow : 윈도우를 보이도록 하거나 숨긴다.

IsWindowVisible : 윈도우가 보이는지를 알아낸다.

ShowOwnedPopups : 윈도우가 가지고 있는 모든 팝업 윈도우를 보이게 하거나 숨긴다.

EnableScrollBar : 스크롤 바의 화살표를 사용가능하도록 하거나 불가능하게 한다.


좌표 매핑 관련 함수

MapWindowPoints : CWnd의 좌표계로부터 다른 윈도우의 좌표계로 지정된 점들을 매핑시 킨다.

ClientToSreen : 클라이언트 좌표계를 화면 좌표계로 변환한다.

ScreenToClient : 화면 좌표계를 클라이언트 좌표계로 변환한다.


윈도우 텍스트 함수

SetWindowText : 윈도우의 텍스트나 캡션 제목을 지정된 텍스트로 설정한다.

GetWindowText : 윈도우의 텍스트나 캡션 제목을 반환한다.

GetWindowTextLength : 윈도우의 텍스트나 캡션 제목의 길이를 반환한다.

SetFont : 현재의 폰트를 설정한다.

GetFont : 현재의 폰트를 얻는다.


스크롤 관련 함수

GetScrollPos : 스크롤 박스의 현재 위치를 얻는다.

GetScrollRange : 지정된 스크롤 바에 대한 최소, 최대의 스크롤 바 위치 값을 얻는다.

ScrollWindow : 클라이언트 영역의 내용을 스크롤한다.

ScrollWindowEx : 클라이언트 영역의 내용을 스크롤한다. (ScrollWindow과 비슷)

GetScrollInfo : 스크롤 바에 대한 SCROLLINFO 구조체 값을 얻는다.

GetScrollLimit : 스크롤 바의 한계 값을 얻는다.

SetScrollInfo : 스크롤 바에 대한 정보를 설정한다.

SetScrollPos : 스크롤 박스의 현재 위치를 설정하고, 설정이 되면, 새로운 위치를 나타내 도록 스크롤 바를 다시 그린다.

SetScrollRange : 지정된 스크롤 바에 대한 최소와 최대 위치 값을 지정한다.

ShowScrollBar : 스크롤 바를 보이거나 숨긴다.

EnableScrollBarCtrl : 스크롤 바의 컨트롤을 가능하게 하거나 불가능하도록 한다.

GetScrollBarCtrl : 스크롤 바 컨트롤을 반환한다.

RepositionBars : 클라이언트 영역에 컨트롤 바를 재위치 시킨다.


드래그-드롭 함수

DragAcceptFiles : 윈도우가 드래그된 파일을 받아들일 것인지를 결정한다.


Caret 관련 함수

CreateCaret : 시스템 캐럿으로 새로운 형태를 생성하고 캐럿의 소유권을 얻는다.

CreateSolidCaret : 시스템 캐럿으로 솔리드 캐럿을 생성하고 캐럿의 소유권을 얻는다.

CreateGrayCaret : 시스템 캐럿으로 회색 캐럿을 생성하고 캐럿의 소유권을 얻는다.

GetCaretPos : 특정 위치로 캐럿을 이동시킨다.

SetCaretPos : 화면에서 캐럿을 숨긴다.

HideCaret : 캐럿의 현재 위치에서 캐럿을 보이도록 한다.

ShowCaret : 캐럿의 현재 위치에서 캐럿을 보이도록 한다. 일단 캐럿이 화면에 나타나면 캐럿은 자동적으로 깜박거리게 된다.


대화상자 아이템 관련 함수

CheckDlgButton : 버튼 컨트롤 다음에 체크 표시를 하거나 버튼 컨트롤에서 체크 표시를 제거한다.

CheckRadioButton : 특정 라디오 버튼을 체크하고, 특정 버튼 그룹 내에 있는 모든 다른 라디오 버튼에서 체크 표시를 제거한다.

GetCheckedRadioButton : 버튼 그룹에서 현재 체크된 라디오 버튼의 ID를 반환한다.

DlgDirList : 파일이나 디렉토리에 대한 리스트로 리스트 박스를 채운다.

DlgDirListComboBox : 파일이나 디렉토리에 대한 리스트 콤보 박스를 채운다.

DlgDirSelect : 리스트 박스에서 현재 선택된 항목을 얻는다.

DlgDirSelectComboBox : 콤보 박스에서 현재 선택된 항목을 얻는다.

GetDlgItemInt : 지정된 대화상자에서 컨트롤이 사용하는 텍스트를 정수 값으로 변환한다.

GetDlgItemText : 컨트롤과 관련된 캡션이나 텍스트를 얻는다.

GetNextDlgGroupItem : 컨트롤 그룹 내의 다음 또는 이전 컨트롤을 찾는다.

GetNextDlgTabItem : 특정 컨트롤의 다음 또는 이전 컨트롤 중에서 WS_TABSTOP속성을 가 지는 컨트롤을 얻는다.

IsDlgButtonChecked : 버튼 컨트롤이 체크되었는지를 결정한다.

IsDialogItemMessage : 지정된 메시지가 모달리스(modeless)대화상자를 위한 것인지를 알아 내고, 만약에 그렇다면 그것을 처리한다.

SendDigItemMessage : 특정 컨트롤에 메시지를 보낸다.

SendDigItemInt : 지정된 대화상자에서 컨트롤이 사용하는 텍스트를 정수 값에 해당하는 문 자열로 설정한다.

SendDigItemText : 지정된 대화상자에서 컨트롤의 캡션이나 텍스트를 설정한다.

SubclassDlgItem : CWnd 컨트롤에 윈도우 컨트롤을 추가하고 CWnd의 메시지 맵을 통해 메시지를 배정하도록 한다.

ExecuteDlgInit : 해당 대화상자의 리소스로 초기화한다.

RunModalLoop : 모달 상태에 있는 윈도우의 메시지를 검색하고, 번역하거나, 처리한다.

ContinueModal : 윈도우 모달 상태를 지속시킨다.

EndModalLoop : 윈도우 모달 상태를 마친다.


메뉴 함수

GetaMenu : 특정 메뉴에 대한 포인터를 얻는다.

SetMenu : 현재의 메뉴를 지정된 메뉴로 설정한다.

DrawMenuBar : 메뉴 바를 다시 그린다.

GetSystemMenu : 애플리케이션이 컨트롤 메뉴를 복사하거사 수정하도록 참조하는 것을 허용한다.

HiliteMenuItem : 최상위 메뉴 아이템에서 선택된 부분을 하이라이트하거나 해제한다.


툴팁 함수

EnableToolTips : 툴팁 컨트롤을 사용가능하도록 한다.

CancelToolTips : 툴팁 컨트롤을 사용 불가능하도록 한다.

FilterToolTipMessage : 대화상자에서 컨트롤과 관련된 제목이나 텍스트를 얻는다.

OnToolHitTest : 포인터가 특정 도구의 사각형 경계(보통 툴바 영역)안에 있는지를 알아내 고 그 도구에 대한 정보를 얻는다.


타이머 관련 함수

SetTimer : 시작될 때 WM_TIMER 메시지를 보내는 시스템 타미머를 설치한다.

KillTimer : 타이머를 해제한다.


경고 함수

FlashWindow : 윈도우를 한 번 반짝이게 한다.

MessageBox : 애플리케이션이 제공하는 캡션과 메시지를가지고 있는 윈도우를 생성하고 화면에 출력한다.


윈도우 메시지 관련 함수 GetCurrentMessage : 윈도우가 현재 처리하고 있는 메시지의 포인터를 반환한다. OnMessage 류의 메시지 핸들러 멤버 함수 내부에서만 호출되어야한다.

Default : 디폴트 윈도우 프로시저를 호출하며, 이것은 애플리케이션에게 어떤 윈도우 메 시지도 디폴트 형태로 처리하도록 한다.

PreTranslateMessage : TranslateMessage와 DispatchMessage 윈도우 함수에서 처리되기 전 에 윈도우의 메시지를 필터링하기 위해서 CWinApp가 사용한다.

SendMessage : CWnd 객체에 메시지를 보내고 메시지를 처리할 때 까지 반환되지 않는다.

PostMessage : 애플리케이션 큐에 메시지를 위치시키고, 윈도우가 메시지를 처리할 때까 지 기다리지 않고 바로 반환한다.

SendNotifyMessage : 특정 메시지를 윈도우에 보내고 호출한 스래드가 윈도우를 생성했는 지에 따라서, 가능한 빨리 반환한다.




클립보드 관련 함수

ChangeClipboardChain : 클립보드 뷰어의 체인으로부터 CWnd를 제거한다.

SetClientboardViewer : 클립보드의 내용이 변하면 윈도우의 체인에 CWnd를 추가한다.

SetClipboard : 클립보드를 연다. 다른 애플리케이션이 윈도우의 CloseClipboard 함수를 호 출할 때까지 클립보드를 수정하지 않도록 한다.

GetClipboardOwner : 클립보드의 현재 소유자에 대한 포인터를 얻는다.

GetOpenClipboardWindow :현재 클립보드가 열려진 윈도우에 대한 포인터를 얻는다.

GetClipboardViewer : 클립보드 뷰어의 체인에서 처음 윈도우에 대한 포인터를 얻는다.


OLE 콘트롤

SetProperty : OLE 컨트롤 프로퍼티를 설정한다.

OnAmbientProperty : 환경 프로퍼티 값을 구현한다.

GetControlUnknown : 알려지지 않은 OLE 컨트롤에 대한 포인터를 얻는다.

GetProperty : OLE 컨트롤 프로퍼티를 얻는다.

InvokeaHelper : OLE 컨트롤의 메소드나 프로퍼티를 호출한다.


오버라이드 가능한 함수

WindowProc : CWnd에 대한 디폴트 프로시저를 제공한다. 디폴트로 메시지 맵을 통해서 메시지를 처리하게 된다.

DefWindowProc : 디폴트 윈도우 프로시저를 요구하며, 이것은 애플리케이션이 처리하지 않은 모든 윈도우 메시지에 대해서 디폴트 처리를 하도록 한다.

PostNcDestroy : 윈도우가 소멸된 후에 디폴트 OnNcDestroy 함수에 의해서 호출되는 가상 함수이다.

OnChildNotify : 컨트롤 통지 메시지를 처리하기 위한 기회를 컨트롤에게 주기 위해서 부 모 윈도우에 의해 호출된다.

DoDateExchange : 대화상자의 데이터 교환이나 유효화 검사를 위해서 UpdateData에 의해 서 호출된다.


초기화 메시지 핸들러

OnInitMenu : 메뉴가 활성화될 때 호출된다.

OnInitMenuPopup : 팝업 메뉴가 활성화될 때 호출된다.


시스템 메시지 핸들러

OnSysChar : 사용자가 컨트롤 문자로 변환하기 위해서 호출된다.

OnSysCommand : 사용자가 컨트롤 메뉴에서 항목을 선택하거나, 사용자가 최대화 또는 최 소화 버튼을 누를 때 호출된다.

OnSysDeadChar : 키 입력을 시스템의 Dead 문자((')등이 추가된 문자)로 변환할 때 호출 된다.

OnSysKeyDown : 사용자가 Alt 키를 누르고 다른 키를 누를 때 호출된다.

OnSysKeyUp : 사용자가 Alt 키를 누른 상태로 다른 키를 놓을 때 호출된다.

OnCompacting : 윈도우 시스템에서 시스템 메모리가 부족한 경우에 호출된다.

OnDevModeChange : 사용자가 디바이스의 모드 설정을 바꿀 때 최상위 윈도우가 호출된다.

OnFontChange : 폰트 리소스의 풀이 변할 때 호출된다.

OnPaletteChanged : 애플리케이션이 논리 팔레트를 적용할 것임을 다른 애플리케이션들에 게 알린다.

OnPaletteChanging : 윈도우가 논리 팔레트를 적용할 것임을 다른 애플리케이션들에게 알 린다.

OnSysColorChange : 시스템의 컬러 설정에 변화가 있을 때 최상위 윈도우가 호출한다.

OnWindowPosChanging : SetWindowPos나 다른 윈도우-관리 함수의 호출의 결과로 크기, 위치, 또는 Z-Order가 변하려 할 때 호출된다.

OnWindowPosChanged : SetWindowPos나 다른 윈도우-관리 함수의 호출의 결과로 크기, 위치, 또는 Z-Order가 변했을 때 호출된다.

OnDropFiles : 사용자가 드롭된 파일을 실행하기 위한 프로그램으로 등록된 윈도우 위에서 왼쪽 마우스 버튼을 놓을 때 호출된다.

OnSpoolerStatus : 프린트 관리자의 작업이 추가되거나 삭제될 때마다 프린트 관리자가 호출한다.

OnTimeChange : 시스템 시간 설정이 변경되면 최상위 윈도우가 호출한다.

OnWinIniChange : 윈도우의 초기화 파일인 WIN.INI가 변경되면 최상위 윈도우가 호출한다.


일반 메시지 핸들러

OnCommand : 사용자가 명령을 선택할 때 호출된다.

OnActivate : CWnd가 활성화되거나 비활성화될 때 호출된다.

OnActivateApp : 애플리케이션이 활성화되려고 하거나 비활성화되려고 하는 경우에 호출 된다.

OnCancelMode : CWnd가 마우스 캡쳐와 같은, 어떤 내부적인 모드를 취소하는 것을 허용 하기 위해서 호출된다.

OnChildActivate : MDI의 자식 윈도우에서 CWnd의 크기나 위치가 변경되거나 CWnd가 활 성화될 때 호출된다.

OnClose : CWnd이 종료되는 신호로서 호출된다.

OnCreat : 윈도우 생성의 일부분으로서 호출된다.

OnCtlColor : 컨트롤이 그려지려 할 때 CWnd가 컨트롤의 부모 윈도우이면 호출된다.

OnDestroy : CWnd가 소멸될 때 호출된다

OnEnable : CWnd가 사용 가능하거나 불가능할 때 호출된다.

OnEndSession : 세션이 종료될 때 호출된다.

OnEnterIdle : 모달 대화상자나 메뉴가 유휴(idle)상태에 들어갈 때 애플리케이션의 메인 윈 도우 프로시저에서 호출된다.

OnEraseBkgnd : 윈도우의 바탕이 지워져야 할 때 호출된다.

OnGetMinMaxInfo : 윈도우가 최대화된 위치나 크기, 또는 최소 또는 최대 트랙킹 크기를 알아야 할 때마다 호출된다.

OnIconEraseBkgnnd : CWnd가 최소화되거나 아이콘이 그려지기 전에 아이콘의 배경을 채 워야 하는 경우에 호출된다.

OnKillFocus : CWnd가 입력포커스를 잃기 전에 호출된다.

OnMenuChar : 사용자가 현재 메뉴에서 이미 정의된 코드와 대응이 안되는 문자를 눌렀을 때 호출된다.

OnMenuSelect : 사용자가 메뉴 아이템을 선택할 때 호출된다.

OnMove : CWnd의 위치가 변경된 후에 호출된다.

OnMoving : 사용자가 CWnd 객체를 이동하고 있음을 나타낸다.

OnDeviceChange : 디바이스나 컴퓨터의 하드웨어 설정이 변경되었음을 알려준다.

OnStyleChanged : ::SetWindowLong 윈도우 함수를 사용하여 하나나 혹은 그 이상의 윈도우 의 스타일이 변했음을 알려준다.

OnStyleChanging : ::SetWindowLong 윈도우 함수를 사용하여 하나나 혹은 그 이상의 윈도 우의 스타일이 변하려 하는 것을 알려준다.

OnPaint : 윈도우의 일부분을 다시 그리기 위해서 호출된다.

OnParentNotify : 자식 윈도우가 생성되거나 소멸될 때, 또는 커서가 자식 윈도우 위에 있 는 동안 마우스 버튼을 클릭하는 경우에 호출된다.

OnQueryDragIcon : 최소화된 CWnd가 사용자에 의해서 드래그될 때 호출된다.

OnQueryEndSession : 사용자가 윈도우의 세션 종료를 선택하는 경우에 호출된다.

OnQueryNewPalette : CWnd가 입력 포커스를 받게됨을 알려준다.

OnQueryOpen : CWnd가 아이콘이거나 사용자가 아이콘이 열려지지기를 요구할 때 호출된다.

OnSetFocus : CWnd가 입력 포커스를 얻은 후에 호출된다.

OnShowWindow : CWnd가 감추어지거나 혹은 보여질 때 호출된다.

OnSize : CWnd의 크기가 변한 후에 호출된다.

OnSizing : 사용자가 사각형의 크기를 다시 조정하고 있음을 나타낸다.

OnStyleChanged : 윈도우의 하나나 혹은 그 이상의 스타일이 변한 것을 나타낸다.

OnStyleChanging : 윈도우의 하나나 혹은 그 이상의 스타일이 변하려 하는 것을 나타낸다.


컨트롤 메시지 핸들러

OnCharToItem : LBS_WANTKEYBOARDINPUT 스타일을 가지고 있는 리스트 박스에 의해서 WM_CHAR에 대한 응답으로 호출된다.

OnCompareItem : 정렬이 가능한 owner draw 형태의 콤보 박스나 리스트 박스에서 새로운 아이템의 상대 위치를 지정하기 위해서 호출된다.

OnDeleteItem : owner draw 형태의 리스트 박스나 콤보 박스가 소멸되거나 아이템이 컨트 롤에서 제거될 때 호출된다.

OnDrawItem : owner draw 형태의 버튼 컨트롤, 콤보 박스 컨트롤, 리스트 박스 컨트롤이 다시 그려져야 할 때 호출된다.

OnGetDlgCode : 컨트롤이 화살표 키와 Tab 키에 대한 입력을 수행할 수 있도록 하기 위 해서 호출된다.

OnMeasureItem : 컨트롤이 생성될 때 owner draw 형태의 콤보 박스, 리스트 박스, 또는 메뉴 아이템을 요구한다. CWnd는 윈도우에게 컨트롤의 크기를 알려준다.

SendChildNotifyLastMsg : 부모 윈도우가 자식 윈도우에게 통보 메시지를 제공하여 자식 윈도우가 작업을 수행할 수 있도록 한다.

OnWndMsg : 윈도우의 메시지가 핸들링되고 있는 것을 나타낸다.

ReflectLastMsg : 자식 윈도우의 마지막 메시지를 나타낸다.

OnVKeyToItem : WM_KEYDOWN 메시지에 대하여 CWnd가 소유한 리스트 박스가 호출된다.


입력 메시지 핸들러

OnChar : 키 입력이 시스템 문자가 아닌 문자로 변환될 때 호출된다.

OnDeadChar : 키 입력이 시스템 문자가 아닌 Dead 문자로 변환될 때 호출된다.

OnHSroll : 사용자가 CWnd의 수평 스크롤 바를 클릭하는 경우에 호출된다.

OnKeyDown : 시스템 키가 아닌 키보드가 눌러 졌을 때 호출된다.

OnKeyUp : 시스템 키가 아닌 키보드가 놓을 때 호출된다.

OnLButtonDblClk : 사용자가 왼쪽 버튼을 더블 클릭 했을 때 호출된다.

OnLButtonDown : 사용자가 왼쪽 버튼을 눌렀을 때 호출된다.

OnLButtonUp : 사용자가 왼쪽 버튼을 놓을 때 호출된다.

OnMButtonDblClk : 사용자가 가운데 버튼을 더블 클릭 했을 때 호출된다.

OnMButtonDown : 사용자가 가운데 버튼을 눌렀을 때 호출된다.

OnMButtonUp : 사용자가 가운데 버튼을 놓을 때 호출된다.

OnMouseActivate : 커서가 비활성화된 윈도우에 있고 사용자가 마우스 버튼을 누를 때 호출된다.

OnMouseMove : 마우스커서가 움직일 때 호출된다.

OnRButtonDblClk : 사용자가 오른쪽 버튼을 더블 클릭 했을 때 호출된다.

OnRButtonDown : 사용자가 오른쪽 버튼을 눌렀을 때 호출된다.

OnRButtonUp : 사용자가 오른쪽 버튼을 놓을 때 호출된다.

OnSetCuror : 마우스 입력이 캡쳐되지 않고 마우스가 윈도우에서 커서를 움직이게 하려면 호출된다.

OnTimer : SetTimer에서 정해진 간격마다 호출된다.

OnVScroll : 사용자가 윈도우의 수직 스크롤 바를 클릭할 때 호출된다.

OnCaptureChanged : 마우스 캡쳐를 놓치는 윈도우 메시지를 보낸다.


비 클라이언트 영역 메시지 핸들러

OnNcActivate : 비 클라이언트 영역이 활성화된 상태인지 비활성화된 상태인지를 가리키 기 위해서 변환이 필요한 경우 호출된다.

OnNcCalcSize : 비 클라이언트 영역의 크기와 위치가 계산될 때 호출된다.

OnNcCreate : 비 클라이언트 영역이 생성될 때 OnCreate 보다 먼저 호출된다.

OnNcDestroy : 비 클라이언트 영역이 소멸될 때 호출된다.

OnNcHitTest : CWnd가 커서를 포함하고 SetCapture로 마우스 입력을 캡쳐할 때 마우스가 움직일 때 마다 윈도우에 의해서 호출된다.

OnNcLButtonDblClk : 커서가 CWnd의 비 클라이언트 영역 내에 있는 동안 사용자가 왼쪽 마우스 버튼을 더블 클릭 했을 때 호출된다.

OnNcLButtonDown : 커서가 CWnd의 비 클라이언트 영역 내에 있는 동안 사용자가 왼쪽 마우스 버튼을 눌렀을 때 호출된다.

OnNcLButtonUp : 커서가 CWnd의 비 클라이언트 영역 내에 있는 동안 사용자가 왼쪽 마우스 버튼을 놓을 때 호출된다.

OnNcMButtonDblClk : 커서가 CWnd의 비 클라이언트 영역 내에 있는 동안 사용자가 가운데 마우스 버튼을 더블 클릭 했을 때 호출된다.

OnNcMButtonDown : 커서가 CWnd의 비 클라이언트 영역 내에 있는 동안 사용자가 가운데 마우스 버튼을 눌렀을 때 호출된다.

OnNcMButtonUp : 커서가 CWnd의 비 클라이언트 영역 내에 있는 동안 사용자가 가운데 마우스 버튼을 놓을 때 호출된다.

OnNcMouseMove : 커서가 CWnd의 비 클라이언트 영역 내에서 이동할 때 호출된다.

OnNcPaint : 비클라이언트 영역이 다시 그려지기를 요구할 때 호출된다.

OnNcRButtonDblClk : 커서가 CWnd의 비 클라이언트 영역 내에 있는 동안 사용자가 오른쪽 마우스 버튼을 더블 클릭 했을 때 호출된다.

OnNcRButtonDown : 커서가 CWnd의 비 클라이언트 영역 내에 있는 동안 사용자가 오른쪽 마우스 버튼을 눌렀을 때 호출된다.

OnNcRButtonUp : 커서가 CWnd의 비 클라이언트 영역 내에 있는 동안 사용자가 오른쪽 마 우스 버튼을 놓을 때 호출된다.


MDI 메시지 핸들러

OnMDIActivate : MDI child 윈도우가 활성화되거나 비활성화될 때 호출된다.


클립보드 메시지 핸들러

OnAskCbFormatName : 클립보드의 소유자가 클립보드의 내용을 나타낼 때 클립보드 뷰어 애플리케이션에 의해서 호출된다.

OnChangeCbChain : 특정 윈도우가 체인에서 제거되었는지를 통지한다.

OnDestroyClipboard : 클립보드가 윈도우 EmptyClipboard 함수의 호출에 의해서 비워지는 경우에 호출된다.

OnDrawClipboard : 문장이 변경되었을 때 호출된다.

OnHScrollClipboard : 클립보드의 소유주가 클립보드의 이미지를 스크롤해야 하고 적절한 섹션을 무효화할 때 호출되며, 스크롤 바의 값들을 갱신한다.

OnPaintClipboard : 클립보드 뷰어의 클라이언트 영역이 다시 그려져야 할 때 호출된다.

OnRenderAllForamts : 소유주 애플리케이션이 파괴되고 있고 모든 포맷들을 다시 만들 필 요가 있을 때 호출된다.

OnSizeClipboard : 클립보드 뷰어 윈도우의 클라이언트 영역의 크기가 변하는 경우에 호출 된다.

OnVSrollClipboard : 소유주가 크립보드 이미지 스크롤해야 하는 경우에 호출되며, 적절한 섹션을 무효화하고, 스크롤바 값들을 갱신한다.


메뉴 루프 통지

OnEnterMenuLoop : 메뉴의 모달 루프가 수행되는 경우에 호출된다.

OnExitMenuLoop : 메뉴의 모달 루프가 마치는 경우에 호출된다.



4. 디바이스 컨텍스트 클래스

1) CDC 클래스

- CDC 객체는 디스플레이 또는 프린터와 같이 윈도우 클라이언트 영역과 관련된 디스 플레이 컨텍스트와 관계된 작업을 수행하기 위한 멤버 함수를 제공한다.

데이터 멤버

m_hDC : CDC 객체에 의해서 사용되는 출력 디바이스 컨텍스트.

m_hAttribDC : CDC 객체에 의해서 사용되는 속성 디바이스 컨텍스트.

생성 관련 함수

CDC : CDC 객체를 생성한다.

CreateDC : 특정 디바이스에 대한 디바이스 컨텍스트를 만든다.

CreateIC : 특정 디바이스에 대한 정보 컨텍스트를 만든다. 이것은 디바이스 컨텍스트를 만들지 않고 디바이스에 관한 정보만 빠르게 얻을 수 있는 방법을 제공한다.

CreateCompatibleDC : 다른 디바이스 컨텍스트와 호환이 가능한 메모리 디바이스 컨텍스 트를 만든다. 이것은 메모리에 이미지를 미리 읽어 들이기 위해서 사용할 수 있다.

DeleteDC : CDC 객체와 관련된 윈도우 디바이스 컨텍스트를 삭제한다.

FromHandle : 디바이스 컨텍스트에 대한 핸들이 주어졌을 때 CDC 객체에 대한 포인터를 반환한다. 만약 CDC 객체가 핸들과 연관되지 않았다면 임시로 CDC 객체를 만들고 핸들을 추가한다.

DeleteTempMap : FromHandle에 의해서 만들어진 임시 CDC 객체를 삭제하기 위해서 CWinApp가 유휴 시간 핸들러를 사용해서 호출하도록 한다. 이것은 디바이스 컨텍스트로 부터 핸들을 분리시킨다.

Attach : CDC 객체에 윈도우 핸들을 추가한다.

Detach : CDC 객체로부터 윈도우 핸들을 분리한다.

SetAttribDC : 속성 디바이스 컨텍스트인 m_hAttribDC를 설정한다.

SetOutputDC : 출력 디바이스 컨텍스트인 m_hDC를 설정한다.

ReleaseAttribDC : 속성 디바이스 컨텍스트인 m_hAttribDC를 해제한다.

ReleaseOutputDC : 출력 디바이스 컨텍스트인 m_hDC를 해제한다.

GetCurrentBitmap : 현재 선택된 CBitmap 객체에 대한 포인터를 반환한다.

GetCurrentBrush : 현재 선택된 CBrush 객체에 대한 포인터를 반환한다.

GetCurrentFont :현재 선택된 CFont객체에 대한 포인터를 반환한다.

GetCurrentPalette : 현재 선택된 CPalette 객체에 대한 포인터를 반환한다.

GetCurrentPen : 현재 선택된 CPen 객체에 대한 포인터를 반환한다.

GetWindow : 디스플레이 디바이스 컨텍스트와 관련된 윈도우를 반환하다.

디바이스 컨텍스트 관련 함수

GetSafeHdc : 출력 디바이스 컨텍스트인 m_hDC를 반환한다.

SaveDC : 디바이스 컨텍스트의 현재 상태를 저장한다.

RestoreDC : SaveDC로 저장하기 이전 상태로 디바이스 컨텍스트를 복원한다.

ResetDC : m_hAttribDC 디바이스 컨텍스트를 갱신한다.

GetDeviceCaps : 주어진 디스플레이 디바이스의 성능에 관한 세부적인 디바이스 정보를 얻어 온다.

IsPrinting : 디바이스 컨텍스트가 인쇄를 위해서 사용될지의 여부를 결정한다.



드로잉 도구(drawing tool)

관련 함수

GetBrushOrg : 현재의 브러시의 원점 값을 얻는다.

SetBrushOrg : 디바이스 컨텍스트에서 선택된 브러시의 원점을 설정한다.

EnumObjects : 디바이스 컨텍스트에서 이용할 수 있는 펜들과 브러시들을 열거한다.



선택 helper 함수

SelectObject : 펜들과 같은 GDI 드로잉 객체를 선택한다.

SelectStockObject : 미리 정의된 스톡 펜, 브러시 또는 윈도우에 의해서 제공되는 폰트 중 에서 하나를 선택한다.


컬러와 컬러

팔레트 관련 함수

GetNearestColor : 지정된 디바이스가 나타낼 수 있는 논리 컬러에 가장 근접한 논리 컬러 를 얻는다.

SelectPalette : 논리 팔레트를 선택한다.

RealizePalette : 시스템 팔레트에 현재 논리 팔레트의 항목들을 매핑한다.

UpdatedColors : 픽셀당 픽셀을 기본으로 시스템 팔레트를 이용하여 현재 클라이언트 영 역을 일치시킴으로써 디바이스 컨텍스트의 클라이언트 영역을 갱신한다.

GetHalftoneBrush : 하프톤 브러시를 얻어온다.



드로잉 속성 관련 함수

GetBkColor : 현재의 배경색을 얻는다.

SetBkColor : 현재의 배경색을 설정한다.

GetBkMode : 배경 모드를 얻는다.

SetBkMode : 배경 모드를 설정한다.

GetPolyFillMode : 현재의 다각형을 채우기 위한 모드를 얻어 온다.

SetPolyFillMode : 다각형을 채우기 위한 모드를 설정한다.

GetROP2 : 현재의 드로잉 모드를 얻는다.

SetROP2 : 현재의 드로잉 모드를 설정한다.

GetStretchBltMode : 현재의 비트맵 확대 모드를 얻는다.

SetStretchBltMode : 비트맵 확대 모드를 설정한다.

GetTextColor : 현재의 텍스트 컬러를 얻는다.

SetTextColor : 텍스트 컬러를 설정한다.

GetColorAdjustment : 디바이스 컨텍스트에 대한 컬러 보정 값을 얻는다.

SetColorAdjustment : 특정 값을 사용하여 디바이스 컨텍스트에 대한 컬러 보정 값을 설정 한다.

매핑 관련 함수

GetMapMode : 현재의 매핑 모드를 얻는다.

SetMapMode : 현재의 매핑 모드를 설정한다.

GetViewportOrg : 뷰포트의 원점의 x와 y좌표를 얻는다.

SetViewportOrg : 뷰포트의 원점을 설정한다.

OffsetViewportOrg : 현재 뷰포트 원점의 좌표와 관련된 뷰포트의 원점을 수정한다.

GetViewportExt : 뷰포트의 x와 y좌표를 얻는다.

SetViewportExt : 뷰포트의 x와 y좌표를 설정한다.

ScaleViewportExt : 현재 값과 관련있는 뷰포트의 범위를 수정한다.

GetWindowOrg : 관련된 윈도우의 원점에 대한 x와 y 좌표를 얻는다.

SetWindowOrg : 디바이스 컨텍스트의 윈도우 원점을 설명한다.

OffsetWindowOrg : 현재의 윈도우 원점의 좌표와 관련된 윈도우의 원점을 수정한다.

GetWindowExt : 관련된 윈도우의 x와 y의 범위를 얻는다.

SetWindowExt : 관련된 윈도우의 x와 y의 범위를 설정한다.

ScaleWindowExt : 현재 값과 관련있는 윈도우의 범위를 수정한다.




좌표 변환 함수

DPtoHTMETRIC : 디바이스 단위를 HTMETRIC 단위로 변환한다.

DPtoLP : 디바이스 단위를 논리 단위로 변환한다.

HTMETRICtoDP : HTMETRIC 단위를 디바이스 단위로 변환한다.

HTMETRICtoLP : HTMETRIC 단위를 논리 단위로 변환한다.

LPtoDP : 논리 단위를 디바이스 단위로 변환한다.

LPtoHTMETRIC : 논리 단위를 HTMETRIC 단위로 변환한다.




영역 관련 함수

FillRgn : 지정된 브러시로 특정 영역을 채운다.

FrameRgn : 브러시를 사용하여 특정 영역 주위의 경계선을 그린다.

InvertRgn : 영역에 있는 컬러들을 전부 반전시킨다.

PaintRgn : 선택한 브러시로 특정 영역을 채운다.


클리핑(clipping)관련 함수

SetBoundsRect : 지정된 디바이스 컨텍스트에 대한 사각형 경계영역의 정보를 설정한다.

GetBoundsRect : 지정된 디바이스 컨텍스트에 대해서 현재 설정된 사각형 경계영역의 정 보를 반환한다.

GetClipBox : 화면의 클리핑 경계에 가장 가까운 사각형의 크기를 얻는다.

SelectClipRgn : 특정 모드를 사용하여 현재 클리핑 영역과 조합한다.

ExcludeClipRect : 현재의 클리핑 영역에서 지정된 사각형 영역을 빼낸 후에 새로운 클리핑 영역을 생성한다.

ExcludeUpdateRgn : 클리핑 영역에서 윈도우에 있는 갱신될 영역을 제외함으로써 유효하지 않은 영역에 그려지는 것을 막는다.

IntersectClipRect : 현재 영역과 사각형의 교차 영역을 만들어서 새로운 클리핑 영역을 만 든다.

OffsetClipRgn : 주어진 디바이스의 클리핑 영역 x 축과 y 축으로 각각 이동한다.

PtVisible : 클리핑 영역에 주어진 점이 존재하는지의 여부를 알아낸다.

RectVisible : 주어진 사각형의 임의의 부분이 클리핑 영역 내에 있는지를 알아낸다.


선 출력 함수

GetCurrentPosition : 펜의 현재 좌표를 얻는다.

MoveTo : 현재 좌표를 이동한다.

LineTo : 현재 좌표에서 지정된 좌표까지 선을 그린다.

Arc : 타원형의 호를 그린다.

Arcto : 타원형의 호를 그린다. (현재 좌표가 갱신되는 것을 제외하면 Arc와 비슷하다.)

AngleArc : 선분과 호를 그리고 현재 좌표를 호의 끝점으로 이동한다.

GetArcDirection : 디바이스 컨텍스트에서 현재 호를 그리는 방향을 반환한다.

SetArcDirection : 호와 사각형을 그리기 위한 방향을 설정한다.

PolyDraw : 선분과 베지어 스플라인을 그린다. 이 함수는 현재 좌표를 갱신한다.

PolyLine : 지정된 점들을 연결하는 선을 그린다.

PolyPolyLine : 연결된 선을 여러 개 그린다. 현재 좌표는 함수에 의해서 사용되거나 갱신되지 않는다.

PolyLineTo : 하나 이상의 직선을 그리고 마지막 선의 끝점으로 현재 좌표를 이동한다.

PolyBezier : 하나 이상의 베지어 스플라인을 그린다. 현재 좌표는 사용되나 갱신되지 않는 다.

PolyBezierTo : 하나 이상의 베지어 스플라인을 그리고 마지막 베지어 스플라인의 끝점으로 현재 좌표를 이동한다.


단순 드로잉 함수

FillRect : 특정 브러시를 사용하여 지정된 사각형을 채운다.

FrameRect : 사각형 주변에 경계선을 그린다.

InvertRect : 사각형 내부를 반전시킨다.

DrawIcon : 아이콘을 그린다.

DrawDragRect : 드래그된 사각형을 지우거나 다시 그린다.

FillSolidRect : 솔리드 컬러로 사각형을 채운다.

Draw3dRect : 3차원 형태의 사각형을 그린다.

DrawEdge : 사각형의 모서리를 그린다.

DrawFrameControl : 프레임 컨트롤을 그린다.

DrawState : 이미지를 출력하고 현재 상태를 나타내는 효과를 적용한다.


타원과 다각형(Polygon) 함수

Chord : 현을 그린다.

DrawFocusRect : 포커스를 가지고 있는 형태로 사각형을 그린다.

Ellipse : 타원을 그린다.

Pie : 파이 모양을 그린다.

Polygon : 선들에 의해서 연결된 두 개 이상의 점들로 이루어지는 다각형을 그린다.

PolyPolygon : 현재의 다각형 채우기 모드를 사용하여 두 개 이상의 다각형을 그린다. 이 다각형들은 합쳐지지는 않지만 겹쳐질 수는 있다.

Polyline : 지정된 점들을 연결하는 선들의 조합으로 이루어진 다각형을 그린다.

Rectangle : 현재의 펜을 사용하여 사각형을 그리고 현재의 브러시를 사용하여 사각형을 채운다.

RoundRect : 현재의 펜을 사용하여 모서리가 둥근 형태의 사각형을 그리고, 현재의 브러시 를 사용하여 채운다.


비트맵 함수

PatBlt : 비트 패턴을 만든다.

BitBlt : 지정된 디바이스 컨텍스트에서 비트맵을 복사한다.

StretchBlt : 디바이스의 원본 사각형에서 대상 사각형으로 비트맵을 이동시킨다. 비트맵의 크기가 대상 사각형의 원본보다 크거나 작다면 비트맵을 적당히 늘리거나 줄여서 이동시킨다.

GetPixel : 지정된 픽셀의 RGB컬러 값을 얻는다.

SetPixel : 지정된 컬러의 근사값으로 지정된 좌표에 점을 찍는다.

SetPixelV : 지정된 컬러의 근사값으로 지정된 좌표에 점을 찍는다. SetPixelV는 찍힌 점의 컬러 값을 반환할 필요가 없기 때문에 SetPixel보다 더 빠르다.

FloodFill : 현재의 브러시를 사용하여 영역을 채운다.

ExtFloodFill : 현재의 브러시로 영역을 채운다. FloodFill 멤버함수보다는 약간의 유연성을 제공한다.

MaskBlt : 주어진 마스크와 래스터 연산을 사용하여 원본과 대상 비트맵에 대한 컬러 데이터를 합친다.

PlgBlt : 원본 디바이스 컨텍스트의 지정된 사각형에서 주어진 디바이스 컨텍스트의 지정 된 평행사변형 영역에 비트맵을 복사한다.


텍스트 관련 함수

TextOut : 현재의 선택된 폰트를 사용하여 지정된 위치에 문자열을 출력한다.

ExtTextOut : 현재의 선택된 폰트를 사용하여 지정된 사각형의 영역 내에 문자열을 출력 한다.

TabbedTextOut : 탭이 멈추는 위치를 지정해 주면 그 위치에 문자열을 출력한다.

DrawText : 지정된 사각형 안에 포맷된 형태의 텍스트를 출력한다.

GetTextExtent : 크기를 결정하기 위해서 현재 폰트를 사용한 속성 디바이스 컨텍스트 상 에서 텍스트의 폭과 높이를 얻는다.

GetOutputTextExtent : 출력 디바이스 컨텍스트 상에서 텍스트의 폭과 높이를 얻는다.

GetTabbedTextExtent : 속성 디바이스 컨텍스트 상에서 주어진 탭 지정 문자열의 폭과 높이를 얻는다.

GetOutputTabbedTextExtent : 출력 디바이스 컨텍스트 상에서 주어진 탭 지정 문자열의 폭 과 높이를 얻는다.

GrayString : 주어진 위치에 희미하게 출력되는 텍스트를 출력한다.

GetTextAlign : 텍스트 정렬 플래그 값을 얻는다.

SetTextAlign : 텍스트 정렬 플래그 값을 설정한다.

GetTextFace : 버퍼에 현재 폰트의 폰트 이름을 복사한다.

GetTextMetrics : 속성 디바이스 컨텍스트에서 현재의 폰트에 대한 크기를 얻는다.

GetOutputTextMetrics : 출력 디바이스 컨텍스트에서 현재의 폰트에 대한 크기를 얻는다.

SetTextJustification : 문자열의 사이에 공백을 추가한다.

GetTextCharacterExtra : 현재 설정된 문자 사이의 공백을 얻는다.

SetTextCharacterExtra : 문자 사이의 공백을 설정한다.


폰트 함수

GetFontData : 폰트의 크기 정보를 가변폭 폰트 파일로 얻는다. 얻기 위한 정보는 폰트 파일 안에 오프셋을 지정함으로써 구별되고, 반환된 정보의 길이 역시 구별된다.

GetKerningPairs : 현재 지정된 디바이스 컨텍스트에서 선택된 폰트에 대한 문자 kerning 쌍을 얻는다.

GetOutputTextMetrics : 트루 타입 폰트에 대한 폰트 크기 정보를 얻는다.

GetGlyphOutline : 현재의 폰트에서 외곽선 문자에 대한 곡선 또는 비트맵을 얻는다.

GetCharABCWidths : 지정된 범위에 있는 연속된 문자의 폭을 논리 단위로 얻는다.

GetCharWidth : 속성 디바이스 컨텍스트에서 연속된 문자열에 대한 개별 문자의 폭을 얻는다.

GetOutputCharWidth : 출력 디바이스 컨텍스트에서 연속된 문자열에 대한 개별 문자의 폭 을 얻는다.

SetMapperFlags : 논리적인 폰트를 물리적인 폰트로 매핑할 때 폰트 매퍼가 사용할 알고리즘을 설정한다.

GetAspectRatioFilter : 현재 폰트의 종횡비 필터에 대한 설정 값을 얻는다.


프린터 확장 함수

QueryAbort : 애플리케이션에서 인쇄를 수행하거나 혹은 인쇄가 종료되었는지를 쿼리하기 위한 AbortProc 콜백함수를 호출한다.

Escape : GDI를 통해서 특별한 디바이스에 직접 사용할 수 없는 부분을 참조하기 위해서 애플리케이션을 허용하도록 한다. 또한 윈도우 확장 함수에 대한 참조를 허가한다

. 애플리케이션에 의해서 만들어진 Escape 호출은 적절히 변환되어 디바이스 드라이버에게 보내진다.

DrawEscape : GDI를 통해서 직접적으로 이용할 수 없는 비디오 디스플레이의 드로잉 능력을 참조한다.

StartDoc : 새로운 인쇄 작업이 시작되었음을 디바이스 드라이버에게 알린다.

StartPage : 새로운 페이지가 시작되었음을 디바이스 드라이버에게 알린다.

EndPage : 페이지가 끝났음을 디바이스 드라이버에게 알린다.

SetAbortProc : 인쇄 작업이 중단될 때 프로그래머가 작성한 콜백 함수를 호출할 수 있도록 설정한다.

AbortDoc : 애플리케이션이 StartDoc 멤버 함수의 마지막 호출 후에 디바이스 컨텍스트에 출력한 모든 내용을 지우고 현재의 인쇄 작업을 종결한다.

EndDoc : StartDoc 멤버 함수에 의해서 시작된 인쇄 작업을 마친다.


스크롤 관련 함수

ScrollDC : 직사각형 영역을 수평과 수직으로 스크롤한다.


메타 파일 관련 함수

PlayMetaFile : 주어진 디바이스 상에서 지정된 메타 파일의 내용을 수행한다. PlayMetaFile 의 확장된 버전은 주어진 확장 포맷 메타 파일에 저장된 그림을 출력한다. 메타 파일 은 원하는 만큼 재생이 가능하다.

AddMetaFileComment : 버퍼에서 지정된 확장 포맷 형태의 메타 파일로 주석을 복사한다.


경로 함수

AbortPath : 디바이스 컨텍스트에서 임의의 경로를 닫고 없앤다.

BeginPath : 디바이스 컨텍스트에서 경로 대괄호를 연다.

CloseFigure : 경로에서 열려있는 도형을 닫는다.

EndPath : 경로 대괄호를 닫고 디바이스 컨텍스트에서 대괄호로 정의된 경로를 선택한다.

FillPath : 현재 경로에 열려 있는 도형들을 닫고 현재의 브러시와 다각형을 채우기 위한 모드를 사용하여 경로의 내부를 채운다.

FlattenPath : 현재의 디바이스 컨텍스트의 선택된 경로에서 임의의 곡선을 전달하고 연속 된 선으로 변환한다.

GetMiterLimit : 디바이스 컨텍스트에 대한 미터 제한을 반환한다.

GetPath : 선의 끝점을 정의하는 좌표를 얻고 곡선의 제어점을 디바이스 컨텍스트에서 선택된 경로에서 찾는다.

SelectClipPath : 현재의 경로를 지정된 모드를 사용하여 기존의 클리핑 영역과 새로운 영 역을 결합한 디바이스 컨텍스트를 위한 클리핑 영역을 선택한다.

SetMiterLimit : 디바이스 컨텍스트를 위한 미터 결합의 한계를 설정한다.

StrockeAndFillPath : 경로 상에 열려 있는 도형을 닫고, 현재의 펜을 사용하여 경로의 외곽선을 그린 후에 현재의 브러시를 사용하여 내부를 채운다.

StrockPath : 현재의 펜을 사용하여 지정된 경로를 표현한다.

WidenPath : 디바이스 컨텍스트에서 선택된 현재의 펜으로 경로가 그려지면, 그 영역이 그려짐으로 인해서 현재 경로를 다시 정의하게 된다.



2) CDC 파생 클래스들

CPaintDC 클래스


데이터 멤버

m_ps : 클라이언트 영역을 그리기 위해서 PAINTSTRUCT 를 포함한다.

m_hWnd : CPaintDC 객체에 추가되는 HWND


생성

CPaintDC : 지정된 CWnd와 연결된 CPaintDC를 생성한다.


CClientDC 클래스

데이터 멤버

m_hWnd : CClientDC 객체에 추가되는 HWND

생성

CClientDC : 지정된 CWnd에 연결된 CClientDC를 생성한다.

CWindowDC 클래스

데이터 멤버

m_hWnd : CWindowDC 객체에 추가되는 HWND

생성

CWindowDC : CWindowDC 객체를 생성한다.


CMetaFileDC 클래스

생성

CMetaFileDC : CMetaFileDC 객체를 생성한다.


초기화

Create : 윈도우 메타파일 디바이스 컨텍스트를 생성하여 CMetaFileDC객체에 추가한다.

CreateEnhanced : 개선된 포맷의 메타파일에 대한 디바이스 컨텍스트를 생성한다.


역할

Close : 디바이스 컨텍스트를 종료하고 메타파일의 핸들을 생성한다.

CloseEnhanced : 개선된 포맷의 메타파일에 대한 디바이스 컨텍스트를 종료하고 개선된 포맷의 메타파일에 대한 핸들을 생성한다.


3) CGdiObject 클래스

- CGdiObject 클래스는 비트맵, 영역, 브러시, 팬, 폰트처럼 그래픽 처리를 위한 다양한 GDI 객체를 사용하기 위한 베이스 클래스를 제공한다. 그러나 직접 CGdiObject 객체를 생성 할 수는 없다. CBitmap, CBrush, CFont, CPalette, CPen, CRgn 와 같은 파생 클래스로 부터 객체를 생성해야 한다.

데이터 멤버

m_hObject : 이 객체에 추가된 HBITMAP, HPALETTE, HRGN, HBRUSH, HPEN, HFONT를 포함하 는 핸들값이다.

생성

CGdiObject : CGdiObject 객체를 생성한다.


역할

GetSafeHandle : this 포인터가 NULL이 아니면 m_hObject를 반환하고 그렇지 않으면 NULL을 반환한다.

FromHadle : 윈도우 GDI 객체의 핸들에 부여된 CGdiObject에 대한 포인터를 반환한다.

Attach : 윈도우 GDI 객체를 CGdiObject 객체에 추가한다.

Detach : CGdiObject 객체에서 윈도우 GDI 객체를 분리하고 윈도우 GDI 객체에 대한 핸들 을 반환한다.

DeleteObject : 객체와 관련된 시스템 저장 장소를 모두 해제함으로써 메모리에서 CGdiObject 객체에 추가된 윈도우 GDI 객체를 삭제한다.

DeleteTempMap : FromHandle에 의하여 작성된 임시 CGdiObject 객체를 삭제한다.

GetObject : CGdiObject 객체에 추가된 윈도우 GDI 객체를 설명하기 위한 데이터를 저장하 는 버퍼를 채운다.

CreateStockObject : 이미 정의된 스톡펜, 브러시, 폰트 중에서 하나의 핸들을 얻는다.

UnrealizeObject : 논리 팔레트나 브러시의 원점을 재설정한다.

GetObjectType : GDI 객체의 타입을 얻는다.