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 처리기가 추가된..
190716-2 - 내일은 컨트롤과 윈도우 - 뷰는 Paint() 에서 그린다. Paint()에서는 document를 참고하여 그린다. 하나라도 수정이 된다면 SetModifiedFlag(true)를 하면된다. - 새로운 문서(ctrl+n 등)를 했을 때 1. 'DeleteContents()' 2. 'OnInitialUpdate()' -직렬화 객체 포메터 스트림(파일스트림, 네트워크스트림 등) IO 장치에 입출력을 한다. 프로그램을 껏다가 켯을 때 필요한 객체들(객체집합)만 복원하면된다. 복원할 때 어떤 데이터인지를 알려면 해당 정보를 모두 저장해야한다. (모든 정보가 필요하다) 그리고 복원시에 포멧을 보고 알아내어 데이터를 복원해야한다. 시리얼라이즈(직렬화) -> 저장을 할 때는 복원가능한 바이트배열로..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/cyCej4/btqyG8LxC24/MHyauiwNrkHwJEj2GlsDXk/img.png)
티스토리에서는 여러가지 플러그인을 제공하는데 그중 제가 자주쓰는 에버노트(Evernote) 노트 불러오기 플러그인이 갑자기 작동이 잘 안되는 문제가 발생했습니다. 위와 같이 티스토리의 글쓰기 에디터에서 추가메뉴 플러그인 Evernote 순서로 클릭을 해주게되면, 해당 플러그인은 사용할 수가 있습니다. 에버노트에 작성된 노트들 중에서 태그가 tistory 또는 티스토리로 되어있는 노트들의 목록이 뜨게됩니다. 이후 원하는 노트를 클릭하면 자동으로 편집기로 불러와지는 기능이라 에버노트에 작성하고 바로 글을 쓸 수 있는 아주 편리한 플러그인입니다. 그러나 저는 몇일 전부터 "데이터를 불러오는데 실패했습니다. 잠시 후 다시 시도해 주세요." 라는 메세지 오류가 뜨면서 제대로 작동이 안됩니다. 그래서 고객 센터에도..
190716-1 .h #pragma once #include class CClientDCU : public CDC { HDC m_hDCu; HWND m_hWndu; public: CClientDCU(CWnd* pWnd); ~CClientDCU(); void Ellipse(int x1, int y1, int x2, int y2)const; }; .cpp #include "pch.h" #include "CClientDCU.h" CClientDCU::CClientDCU(CWnd* pWnd) { m_hWndu = pWnd->m_hWnd; m_hDCu = ::GetDC(m_hWndu); } CClientDCU::~CClientDCU() { ::ReleaseDC(m_hWndu, m_hDCu); } void CCli..
190715 매니패스트 형식메타데이터 CIL CODE [리소스] 닷넷은 독립적인 라이브러리(.net 프레임워크)를 사용한다. MFC : Windows os 의 바이너리만 만들 수 있다. 닷넷은 CLR만 있으면 다른 운영체제에서도 가능하다. 우리는 MFC를 공부해볼 것이다. MFC는 c++을 사용해서 윈도우즈 개발을하는데 라이브러리 이름이 MFC인 것이다. IL DASM 형식 데이터(?) (ctrl+m) MFC (90년대 초) (프레임워크 프로그래밍 공부하기 좋다.) - Afx 가 앞에 붙어있는 함수들은 전역함수다. AfxGetApp() : 주소를 반환하는데 CWinApp 객체의 주소를 반환한다. FrameWork 프로그래밍 : 이미 구조가 만들어져있고 그 위에서 하는 프로그래밍. (정형화) 먼저 구조를 ..
190712-4 - IOCP 모델 비동기 입출력을 쉽게 할 수 있는 객체를 만들었다. // 입출력 완료 포트 생성 HANDLE hcp = CreateIoCompletionPort( INVALID_HANDLE_VALUE, NULL, 0, 0);//- 첫 번째 인수가 -1이면 ICOP 오브젝트를 생성 if(hcp == NULL) return -1; // 소켓과 입출력 완료 포트 연결 HANDLE hResult = CreateIoCompletionPort((HANDLE)client_sock, hcp, (DWORD)client_sock, 0); // 첫 번째 인수가 IOCP인수를 가지면 IOCP와 해당 소켓을 연결한다. //키=소켓번호 로 설정, 0 = 스레드를 전부 깨운다. if(hResult == NULL)..
190712-3 Overlapped 모델 동기 : 비동기 : 완료보고를 받고 동작을 처리해야한다. 닷넷에가면 비동기 델리게이트로 구현되어있다. // 소켓 정보 저장을 위한 구조체 struct SOCKETINFO { WSAOVERLAPPED overlapped; SOCKET sock; char buf[BUFSIZE+1]; int recvbytes; int sendbytes; WSABUF wsabuf; // 전송할 데이터의 크기와 버퍼의 주소값이 포함되는 구조체 (WSAsend함수에필요) }; // 더미(dummy) 이벤트 객체 생성 WSAEVENT hEvent = WSACreateEvent(); if(hEvent == WSA_INVALID_EVENT) err_quit("WSACreateEvent()"); ..