목록딸기 공부방/MFC공부방 (25)
특별한딸기이야기
Check Box : BOOL Radio Button : int Combo Box : CString List Box : CString Edit : CString, int, UINT, long, DWORD, float, double, BYTE, short, BOOL, COleDateTime, COleCurrency
대화상자 화면에 출력하기 1. 대화상자 리소스를 이용하여 대화상자의 모양을 디자인 한다. 2. 이 리소스와 연결되는 CDialog 파생 클래스를 만든다. 3. CDialog 클래스의 멤버 함수인 DoModal을 실행한다. 예제 void CMyClass::OnDialog() { CMyDlg dlg; dlg.DoModal(); } 사용자가 OK버튼을 눌렀을 경우 이벤트 처리 예제 void CMyClass::OnDialog() { CMyDlg dlg; if(dlg.DoModal() == IDOK) { // OK버튼이 눌렸을 때만 실행되는 부분 } }
OnInitDialog함수 대화상자가 화면에 처음 나타날 때 호출되는 함수
대화상자 주요 속성 글꼴 Font 대화상자에서 사용될 글꼴을 지정합니다. 기타 ID 소스 코드에서 대화상자 리소스를 구별하기 위해 사용하는 ID를 지정합니다. Menu 대화상자에 메뉴를 만들 수 있습니다. 모양 Border 대화상자의 경계선 모양을 설정합니다 Caption 타이틀 바에 출력될 텍스트를 설정합니다. Maximize Box 타이틀 바에 최대화 버튼을 설정합니다. Mimimize Box 타이틀 바에 최소화 버튼을 설정합니다. Title Bar True면 타이틀 바가 나타납니다 위치 Center True면 화면의 대화상자가 중앙에 나타납니다. X Pos, Y Pos Center가 False로 설정된 경우, 대화상자가 나타날 좌표를 지정합니다.
LOGFONT m_font_setup; m_font_setup.lfHeight = 100; m_font_setup.lfWidth = 0; m_font_setup.lfEscapement = 0; m_font_setup.lfOrientation = 0; m_font_setup.lfWeight = FW_NORMAL; m_font_setup.lfItalic = FALSE; m_font_setup.lfUnderline = FALSE; m_font_setup.lfStrikeOut = FALSE; m_font_setup.lfCharSet = DEFAULT_CHARSET; m_font_setup.lfOutPrecision = OUT_CHARACTER_PRECIS; m_font_setup.lfClipPrecision =..
CDC::SetTextColor 텍스트의 색깔을 지정 CDC::SetBkMode 텍스트의 배경 설정 TRANSPARENT 텍스트의 배경을 투명하게 OPAQUE SetBkColor함수에 의해 지정된 색으로 지정 SetBkColor 텍스트의 배경 설정
CDC::TextOut 좌표를 기준으로 문자열 출력 SetTextAlign()을 통하여 설정 가로기준 TA_LEFT, TA_CENTER, TA_RIGHT 세로기준 TA_TOP, TA_BASELINE, TA_BOTTOM CDC::DrawText 지정된 사각형 안에 문자열 출력 좌우정렬 DT_LEFT, DT_CENTER, DT_RIGHT 상하정렬 DT_TOP, DT_VCENTER, DT_BOTTOM DT_VCENTER는 출력문자열이 한줄로 되어야 하고 DT_SINGLELINE속성이 같이 주어져야 한다.
1. CFont::CreatePointFont 글꼴의 크기와 이름을 매개변수로 논리적인 글꼴을 생성 코드 CFont font; font.CreatePointFont(100, _T("Time New Romans:)); 2. CFont::CreateFontIndirect LOGFONT 구조체 변수를 설정하고 그 변수를 매개변수로 논리적인 글꼴을 생성 코드 LOGFONT log; log.lfHeight = 100; ...// 구조체 변수 설정 CFont font; font.CreateFontIndirect(&log); 3. CFont::CreateFont LOGFONT를 이용하지 않고 멤버변수들을 직접 매개변수로 넘겨주어 논리적인 글꼴을 생성 코드 CFont font; font. CreateFont(100, ..
void View::OnMouseMove(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default if(nFlags & MK_LBUTTON) { // 여기에 코드를 넣으면 마우스 버튼이 눌린 동안 작동 } CView::OnMouseMove(nFlags, point); }
R2_BLACK : 0 R2_NOTMERGEPEN : ~P & D R2_MASKNOTPEN : R & ~D R2_NOTCOPYPEN : ~D R2_MASKPENNOT : P ^ D R2_NOT : ~(P & D) R2_XORPEN : P^D R2_NOTMASKPEN : ~(P ^ D) R2_MASKPEN : P & D R2_NOTXORPEN : ~(P | ^ D) R2_NOP : D R2_MERGENOTPEN : ~ P | D R2_COPYPEN : P R2_MERGEPENNOT : P | ~ D R2_MERGEPEN : P | D R2_WHITE : 1 ~ : NOT & : AND | : OR ^ : XOR
App -> Doc -> MainFrame -> View 헤드 파일을 쓸 때도 위 순서와 같아야 한다.
타 클래스에서 App에 접근하기 위해서는 AfxGetApp() 타 클래스에서 MainFrame에 접근하기 위해서 AfxGetMainWnd() MainFrame에서 Doc로 접근할 때 GetActiveDocument() MainFrame에서 View로 접근할 때 GetActiveView() View에서 Doc로 접근할 때 GetDocument() App에서 View 또는 Doc 접근할 때 MainFrame을 통해서 접근한다 View 또는 Doc에서 App를 접근할 때 MainFrame을 통해서 접근한다.
! 호출되는 시점 @ 창처음뜰때 @ 창크기조절할때 @ WM_SIZE가 ONDRAW보다 먼저 호출 ! 호출시 스스로 영역을 잡는다. 창 오른쪽 모서리의 좌표는 (cx, cy)
창처음뜰때 창크기조절 무효화영역(다른 프로그램이 위에 있을 때) Invalidate()함수가 사용될 때 : 기존의 내용을 지우고 다시 호출 할 수 있다.
CRect rect; GetClientRect(rect); rect변수에 화면의 크기 저장
뷰 윈도우가 최초로 화면에 나타나는 순간 호출되는 함수
설정부분 SetTimer(0, 1000, NULL); SetTimer(1, 800, NULL); // 첫번째 인자는 ID // 두번째 인자는 호출 간격 1000 = 1초 // 세번째 인자는 호출 함수 명(NULL지정시 OnTimer 호출) 구현부분 void View::OnTimer(UINT nIDEvent) { if(nIDEvent == 0) { // 타이머 아이디가 0일 때 } else if(nIDEvent == 1) { // 타이머 아이디가 1일 때 } } 중단부분 KillTimer(0); // 인자는 ID
// 코드 1 CPen pen; pen.CreatPen(PS_SOLID, 3, RGB(255, 0, 0)); // 코드 2 CClientDC dc(this); CPen *poldpen = dc.SelectObject(&pen); // 원래 들어있던 GDI 오브젝트 반환 dc.Rectangle(10, 10, 100, 100); dc.SelectObject(&poldpen); // 원래 들어있던 GDI 설정 위 코드처럼 하면 지역변수가 사라져도 프로그램은 문제가 없다. 단 내장 오브젝트는 위 과정을 생략할 수 있다. 예제코드 // 코드3 CClientDC dc; dc.SelectStockObject(WHITE_PEN); dc.Rectangle(10, 10, 100, 100) 내장 오브젝트 종류 펜 BLACK..
CDC클래스 이용 CDC *pDC = GetDC(); pDC->Rectangle(10, 10, 100, 100); ReleaseDC(pDC); CClientDC클래스 이용 CClientDC dc(this); dc.Rectangle(10, 10, 100, 100); 위 아래 코드 둘다 같은 내용임.
선그리기 옵션 선이나 영역의 경계선을 그릴 때 사용되며, 선의 두께, 컬러, 선의 패턴 등이 설정됩니다. 영역의 내부를 채우는 옵션 영역의 내부를 채울 때 사용되며, 채울 색, 패턴 등이 설정됩니다. 글꼴 옵션 문자를 출력할 때 사용되며, 글꼴의 모양, 크기 등이 설정됩니다. 비트맵 옵션 비트맵을 설정합니다 팔레트 옵션 화면에 출력될 수 있는 컬러 수에 제한이 있을 때, 실제로 출력될 컬러를 설정합니다. 영역 옵션 임의 모양의 다각형을 그리는 옵션이 설정됩니다.
ar 저장 ar >> 변수명 => 불러오기 여러개의 변수를 저장할 경우 저장하는 순서와 불러오는 순서를 같게 하자.
뷰에서 화면 업데이트를 할경우 Invalidate() 함수 호출 도큐먼트에서 화면 업데이트를 할 경우 UpdateAllView(NULL) 함수 호출
AppWizard에서 프로젝트 생성시 1단계에서 'Document / View architecture support?'옵션을 선택하지 않았을 경우 클래스 위자드에서 CMainFrame에 WM_CREATE를 추가한다 그리고 코드를 아래와 같이 교체한다. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; // TODO: Add your specialized creation code here if(!m_wndView.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW, CRect(0, 0, 0, 0), this, AFX_IDW_PANE_..
MessageBox Function The MessageBox function creates, displays, and operates a message box. The message box contains an application-defined message and title, plus any combination of predefined icons and push buttons. Syntax int MessageBox( HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType ); Parameters hWnd [in] Handle to the owner window of the message box to be created. If this paramete..
#include // WinMain()함수에서 참조하므로 함수 원형을 선언한다. LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nShowCmd) { HWND hwnd; MSG msg; WNDCLASS wndclass; // 윈도우 클래스를 초기화하고 운영체제에 등록한다. wndclass.style = CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = WndProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclas..