190719-3 객체 : 정적인 상태 = 프로퍼티 기능 = 기능 [생산성] 재사용 확장성 유연성 수정성 유지보수 : trade off 캡슐화 상속 다형성 객체를 만드는 2가지 방법 #include using namespace std; class Point { }; int main() { Point p1; Point* p = new Point; } virtual 함수가 아닌것은 컴파일 시간대 그 함수가 정해진다. 어떤 함수를 호출할지 결정된다. virtual 함수는 컴파일 타임에 결정되지 않고. 다음에 virtual 함수 테이블을 검색해서 호출하라고 결정된다. 함수가 virtual 테이블에 저장되고 참조하여 사용하게된다. (좀더 느리다 그래서) class Point { int x; int y; public..
190719-2 템플릿 등 C++ 의 중요 문법 함수 중복 new, delete inline 함수 static 메서드 / 멤버변수 객체 생성/소멸 객체 복사 객체 생성순서 상속-다형성 추상화 (인터페이스) 템플릿 함수 템플릿 클래스 템플릿 형식변환 연산자 중복 RTTI (런타임 타입 인포메이션) C언어 VS C++ C #include using namespace std; int main() { int n = 10; double d = 5.5; cout
190717-3 워커 스레드 : MFC 를 사용한 네모계속그리는 쓰레드를 만들어보자 static UINT WorkerThread(LPVOID param); //* static 함수만 가능 UINT CWTView::WorkerThread(LPVOID param) { //* Data* pd = (Data*)param; CClientDC dc(pd->m_pWnd); CPoint pt = pd->m_pt; delete pd; for (int count = 0; count
190718-2 MDI SDI 1.CWinApp 2.CFrameWnd 3.CDocument 4.CView MDI 1. CWinApp 2-1. CMDIFrameWnd 2-2. CMDIChildWnd 3. CDocument 4. CView Document Template : 데이터에 따라서 틀이 만들어 지더라. 데이터에 따라서 뷰가 결정되고 외관의 틀이 결정되고 리소스가 결정되고... BOOL CMDIApp::InitInstance() // 애플리케이션의 문서 템플릿을 등록합니다. 문서 템플릿은 // 문서, 프레임 창 및 뷰 사이의 연결 역할을 합니다. CMultiDocTemplate* pDocTemplate; pDocTemplate = new CMultiDocTemplate(IDR_MDITYPE, RUNT..
190718-1 생성(실행)순서 1. App객체의 생성자 2. Doc생성자 3. Frame생성자 4. View생성자 닫기 버튼 클릭! 5. View 소멸 6. Frame 소멸 7. Doc 소멸 8. (App 객체 소멸) OnCreate에서 자식윈도우를 선택 앱의 생성자 CSDIApp::InitInstance Doc생성자 Frame생성자 Frame::onCreate() View생성자 CSDIDoc::OnNewDocument CSDIView::OnInitialUpdate() m_pMainWnd->ShowWindow(SW_SHOW); CSDIApp::Run() 닫기 버튼 CSDIView::~CSDIView() CMainFrame::~CMainFrame() CSDIDoc::~CSDIDoc() (내부적으로 APP..
190717-Study - 복사로 아래 텍스트 영역에 텍스트 복사하기 #UpdateDate(TRUE) #UpdateDate(FALSE) - Hide/Show 로 컨트롤 보이기 숨기기 #GetWindowText #ShowWindow #SW_HIDE #SW_SHOW #SetWindowTextW() - 스크롤바 다이얼로그 부분 초기화 작업 및 닫았을 때 처리하기 #InitDialog #OnClose #PostNcDestroy #GetActiveView #delete this - 스크롤바 변경시 처리 #pScrollBar #SB_LINELEFT #UpdateBrushColor - 좌표이동하는 모달 다이얼로그 pos로 데이터를 얻어와서 전부 해당 x,y값 만큼 이동한다. #OffsetRect() 로 좌표를 이동한..
190717 - 4 사각 정보 이동 다이얼로그 만들기 이벤트 처리기를 Doc에 생성 출처링크 프레임은 어디서든지 메인프레임을 얻을 수 있다. #include "MainFrm.h" CMainFrame* pFrame = (CMainFrame*)AfxGetMainWnd(); void CCBDoc::OnRectmove() { CMoveDlg dlg; if (IDOK == dlg.DoModal()) { // TODO: 정보 변경 하는 코드 추가 POSITION pos = m_rtList.GetHeadPosition(); while (pos) { CRect& rt = m_rtList.GetNext(pos); rt.OffsetRect(dlg.m_nX, dlg.m_nY); } //방법1 pos = this->GetFi..
190717-3 스크롤은 별도의 커맨드 메세지가 발생되지 않는다. void CScrollDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { switch (nSBCode) { case SB_LINELEFT: m_nR = max(0, m_nR - 1); // 구간설정 시 팁 max,min을 사용한다. break; case SB_LINERIGHT: m_nR = min(255, m_nR + 1); break; case SB_PAGELEFT: m_nR -= max(0, m_nR - 5); break; case SB_PAGERIGHT: m_nR += min(255, m_nR + 5); break; case SB_THUMBTRACK://잡고 드래그 m..
190717-2 모달리스 다이얼로그 메인 프레임에 모달리스 다이얼로그를 만들어보자. 클래스 선언 void CMainFrame::OnModalless() { // if 이미 객체가 있다면 포커스 else 없다면 생성 if (m_pDlg == NULL){ m_pDlg = new CScrollDlg; m_pDlg->Create(IDD_DIALOG2, this); // this : parent setting m_pDlg->ShowWindow(SW_SHOW); } else { m_pDlg->SetFocus(); } } - 생성 및 포커스 주기 이후에 종료처리도 해주어야한다. X버튼 클릭시 화면에서 사라지지만 완전히 지워진건 아니다. [WM_CLOSE] x버튼 클릭시 발생하는 핸들러 추가 [PostNcDestroy..
190717-1 컨트롤 베이스 리소스의 클래스를 만들어야한다.(자동) 다이얼로그 리소스 생성 -> 오른쪽 마우스 클래스 생성 (모달 다이얼로그를 띄우는 코드) 이벤트 처리기 추가 -> 헤더 include후 사용. void CCBDoc::OnModal() { CTestDlg dlg; // 객체 생성 if (dlg.DoModal() == IDOK) AfxMessageBox(_T("OK 누름")); else AfxMessageBox(_T("CANCEL 누름")); } - 버튼 클릭시 처리하기 - 모달리스 다이얼로그 : 모달 다이얼로그 보다는 복잡하다. (이는 잠시후에 해보겠다.) - 안에 있는 텍스트박스, 버튼의 부모는 다이얼로그다. 버튼 두번 클릭시 자동으로 가장 많이 사용되는 Clicked 처리기가 추가된..