본문 바로가기

C130

MFC-마우스입력( 드래그 & 드랍 ) 마우스 입력을 활용하여, 드래그 & 드랍의 기능을 구현해 보자. 또한 마우스가 윈도우에서 벗어 났을 때 어떻게 확인 해야 할지에 대해서도 하나씩 알아 보자. 기본 적으로 드래그 & 드랍을 생성하기 위해서는, 3가지의 WM메시지가 필요 하다.( 마우스 왼쪽 버튼을 사용한다고 하였을 때 ) 1. LBUTTONDOWN 2. MOUSEMOVE 3. LBUTTONUP 다음의 3가지 WM메시지를 메시지탭에서 추가한다. 기본적인 드래그 & 드랍의 구조는 마우스 왼쪽 버튼이 눌리면(LBUTTONDOWN) 그 위치에 있는 대상과 위치를 검사하여, 왼쪽 버튼이 눌려 있는 부분이 대상의 위치와 일치 한다면, 특정 플래그를 On(true)시키고, 마우스가 움직였을 때(MOUSEMOVE) 특정 플래그가 On(true)라면 마우.. 2010. 5. 16.
MFC-마우스 입력 MFC에서 마우스 입력에 대해서 알아보자. 기존의 API의 WM_MOUSEMOVE라던가, WM_LBUTTONDOWN등을 mfc에서는 그대로 함수를 추가해 하면된다. 특별히 달라진건 존재 하지 않는거 같다. 예제를 통해서 하나씩 살펴보자. View에서 WM_MOUSEMOVE를 추가 하게 되면 마우스가 이동할 때 마다 OnMouseMove() 함수에 들르게 된다. UINT 타입의 nFlags와, CPoint를 인자로 받아 오게 되는데, nFlags는 현재 마우스 입력( 버튼 클릭 )에 대해서 CPoint는 마우스의 X,Y좌표를 가지고 있다. if( (nFlags & MK_LBUTTON) == MK_LBUTTON && (nFlags & MK_RBUTTON) == MK_RBUTTON ) { m_ptMouse =.. 2010. 5. 16.
MFC-GetKeyState() GetKeyState는 전역으로 미리 선언되어 있는 함수인데, 특정키에 대한 정보를 가져 오는 역활을 한다. 예를 들어 Alt + Enter 키를 확인한다고 했을 때 시스템키인 Alt, F10에 대해서 키 조합을 확인 하기 위해 쓰인다. OnSysKeyDown 함수를 생성하고(WM_SYSKEYDOWN) void CTest1View::OnSysKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) { // TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다. WORD wResult = ::GetKeyState( VK_RETURN ); BYTE byHigh = HIBYTE(wResult); // 상위 1번 비트가 1이면 키가 눌려진 상태라고 함 if( byH.. 2010. 5. 12.
MFC-GetWindowRect(), ScreenToClient(), SetWindowPos() CWnd 클래스에 포함되어 있는 함수들, 이 외에도 어마어마 하겠지만, 하나하나 생각나고 보이는 대로 그때 그때 매번 확인 하도록하자. GetWindowRect는 CRect의 주소를 입력해 주면 대상 CRect에 윈도우의 두 좌표를 입력해 준다. ScreenToClient는 클라이언트 뷰 기준의 좌표로 변환한다. 즉, 스크린 기준 작업영역에 대한 뷰 기준의 좌표로 변환 하게 되는데 CPoint를 인자로 받게 된다. GetWindowPos는 대상 윈도우의 위치를 이동하기 위한 함수이다. 인자는 z축, 시작 x,y 와 크기 x, y, 플래그 값을 매개변수로 받는다. 대략 이정도로 살펴 보고 예제 코드를 살펴 보자. 먼저 CWnd를 하나 추가하고, (코드 생략) 적당한 위치에 생성해 주자.(OnCreate사용.. 2010. 5. 12.
MFC-키보드 입력 API에 존재하는 WM_KEYDOWN이나 WM_KEYUP, WM_CHAR, WM_SYSKEYDOWN 등이 존재 하는데, 그 부분을 MFC로 다루어 보자. 일단 키 입력이 이루어 졌을 때 재대로 작동하는지 확인 하기 위해, 새로운 윈도우 클래스을 2개정도(STATIC으로) 만들자.( 새로운 윈도우 클래스 생성은 이전 포스팅 참조 ) //View.h public: CWnd m_wndChild;// 첫번째 Static을 위한 CWnd CWnd m_wndChild2;// 두번째 Static을 위한 CWnd //View.cpp int CTest1View::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) retu.. 2010. 5. 12.
MFC-새로운 자식 클래스 생성하기 MFC에 대해서 뭐랄까 심도 있게 설명해 놓고 싶지만, 아무래도 그 내용이 방대하고, API에 대한 윈도우 구조를 다 파악 했다면 구지 다시 그 부분을 집고 넘어갈 필요는 없을것 같다. MFC에 대한 내용은, 가능한 나 스스로가 복습하면서 다시 한번 되돌아 본다는 식으로 포스팅을 하기로 하겠다. 프로젝트 생성은 살펴 보았고, 이제 기본적인 창에 무언가를 추가해 보자. View.cpp 부분에 존재하는 CView를 상속받은 클래스가 존재할 것이다. // 작업입니다. public: CWnd m_wndChild; // CWnd 클래스 변수인 m_wndChild를 멤버 변수로 추가 하였다.​ 다음 처럼 멤버 변수를 CWnd로 추가하고, [클래스뷰]-[속성]-[메시지탭]-[WM_CREATE]-[OnCreate 생성.. 2010. 5. 12.