본문 바로가기
반응형

C & C++444

[Scrollbar] Scrollbar message handler 처리하기 CDialog-derived 에서뿐만이 아니라, SDI나 MDI에서도 동적으로든 정적으로든 CScrollBar를 쓰게 될 때, scrollbar에서 오는 message를 일일이 작성해 줄 때가 있는데, 다음과 같은 코드가 자주 사용된다. void CTestView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { // scroll 되기 전의 위치를 저장해 놓는다. UINT nOldPos = pScrollBar->GetScrollPos(); int diff = 0; // scroll 될 정도 switch(nSBCode){ // 왼쪽이 눌리면 예전 값에서 1을 뺀다. case SB_LINELEFT: diff = -1; break; // PAGE의 .. 2011. 3. 29.
[Grid] MSFlexGrid 사용하기 1. 이벤트 입력 받는 방법 2. 체크 박스 흉내 내는 방법 3. 클릭된 쎌 찾는 방법 ////////////////////////////////////////////////////////////////////////////// 1. 이벤트 입력 받는 방법 2가지를 해 주어야 한다. active x control에서 이벤트를 받을 수 있게 event sink map을 만들어 주어야 하고, 그 이벤트들에 대한 message map을 만들어 주어야 한다. 우선 헤더 파일에, [code cpp] //h 파일 afx_msg void OnClickGrid(); DECLARE_EVENTSINK_MAP() [/code] 선언을 해준 후, cpp 파일에, [code cpp] //CPP파일 BEGIN_EVENTSINK_.. 2011. 3. 29.
폴더 선택 다이얼로그 이전 경로 기억하기 처음 시작 폴더를 지정해 준 후, 폴더 선택 다이얼로그를 띄우는 방법. 종종 기존에 선택했던 경로가 선택된 상태로 폴더 선택 대화 상자를 열고 싶을 때가 있는데, 그 때 사용한다. 기본적인 원리는 폴더 선택 대화 상자를 표시할 때, 기존에 저장된 경로를 선택하도록 하는 것이다. 그리고 IDOK에 해당하는 버튼을 누르면, 즉 폴더를 선택하고 '취소'를 누르지 않았다면, 선택된 경로를 특정 파일에다 저장해 놓는다. 그리고 다음 번에 폴더 선택 대화 상자를 표시할 때 파일에 저장해 놓았던 경로를 읽어 와서 SHBrowseForFolder API에 인자로 넘기는 콜백 함수에 그 경로를 넘겨 주면 된다. 우선 코드를 보고 방법을 이해해 보자. int CALLBACK MyBrowseCallbackProc(HWND .. 2011. 3. 29.
[Tree] CTreeCtrl 에 디렉토리 표시하기 탐색기의 폴더 목록 트리와 같은 기능을 하는, CTreeCtrl 을 상속받은 클래스를 만들어 보자. 델파이의 것을 사용해도 되긴 하는데, 좀 너무 모양이 옛날 것 같아서... 여하튼, 탐색기와 비교를 해보면 다음과 같다. 왼쪽: CDirTree, 오른쪽: 윈도우즈 탐색기 소스 코드는 다음에 있다. 소스는 Visual C++ 6.0 으로 작성되어 있다. Visual Studio 2008 에서 열어도 별 문제 없이 실행되는 것을 확인하였다. 단, STL을 사용할 시 VC++ 6.0 에서 경고 메세지가 너무 많아 Warning level 을 0 으로 해놓고 컴파일해서 경고는 많을 수 있으므로 이 부분은 이용자가 적당히 처리해 준다. 탐색기에 나오는 '내 네트워크 환경'과 같은 항목은 CDirTree에 없는 것.. 2011. 3. 29.
CWnd 이해하기 CWnd 이해하기 서론 MFC를 하는 사람들이 한 번은 시도해 보게 된다는 일, MSDN의 CWnd 설명 해석하기. 그만큼 MFC를 함에 있어 CWnd를 이해하는 것은 중요하다. MFC의 수많은 컨트롤들이 CWnd를 상속받기 때문에 CWnd를 제대로 이해하게 되면 컨트롤[각주:1]을 다루기 쉬워지며, 더 나아가 MFC를 이용하는 것이 매우 편해진다. MFC를 배우는 사람이 겪는 전형적인 문제는 책에 있는 예제를 따라해서 뭔가 하기는 했는데, 자신이 작성해 놓은 코드가 어떻게 그 일을 하게 되는지 알기 쉽지 않다는 것이다. 그 이유는, MFC는 매우 방대한 라이브러리이기 때문에 MFC의 전체적인 모습을 알지 못하고 그냥 중간에 조금 건드렸기 때문이다. 전체적인 흐름을 알지 못한 채 중간에 있는 것 조금 건.. 2011. 3. 29.
[MessageBox] 메시지 상자 사용법 CWnd::MessageBox int MessageBox( LPCTSTR lpszText, LPCTSTR lpszCaption = NULL, UINT nType = MB_OK ); nType Specifies the contents and behavior of the message box. int MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType); hWnd 메시지 박스의 오너(Owner) 윈도우이다. 오너 윈도우란 메시지 상자를 소유한 윈도우를 말하며 메시지 박스는 오너 윈도우의 중앙에 나타나며 메시지 박스가 떠 있는 동안 오너 윈도우 는 사용할 수 없는 상태가 된다. 메시지 박스를 닫아야만 오너 윈도우를 사용할 수 있다. lpTe.. 2011. 3. 27.
반응형