본문 바로가기
반응형

분류 전체보기778

[Event] 여러개의 파일을 선택 AcceptFiles의 사용 * 임무 * MFC에서 파일정보를 드래그 & 드롭으로 가져오려고 한다. 그런데 한개가 아니고 여러개의 파일을 함께 가져오는 경우는 어떻게 할까? *해결책 * 다음은 다이얼로그에서 AcceptFiles 속성을 사용할때의 예다. 먼저 클래스 위저드에서 DropFiles의 이벤트 핸들러를 생성시켜준다. void CMyDlg::OnDropFiles(HDROP hDropInfo) { char szFullFilePath[_MAX_PATH]; int TotalFiles = ::DragQueryFile(hDropInfo, 0xFFFFFFFF, szFullFilePath, _MAX_PATH); // 이제 갯수를 알 수 있다. for (i=0; i 2011. 1. 12.
[Dialog] 공용 대화상자 (Common Dialog) 사용법 * 임무 * MFC 어플리케이션에서 파일 열기 또는 저장을 하고 싶은데 파일을 선택하는 다이얼로그를 사용하고 싶다. * 해결책 * MFC가 제공하는 공용 다이얼로그 중 파일 다이얼로그를 사용해 본다. CFileDialog를 사용하면 되며 메뉴 및 버튼 이벤트 핸들러에 다음과 같이 코드를 추가한다. // 공용 대화상자 CFileDialog FileDlg(FALSE, "TXT","*.TXT", OFN_OVERWRITEPROMPT, "TXT 파일(*.TXT)|*.TXT|DAT 파일(*.DAT)|*.DAT"); // 선언 if (FileDlg.DoModal() == IDOK) { // 선택한 파일의 이름은 FileDlg.GetPathName(); 에서 알아낼 수 있다 CString Filename = FileD.. 2011. 1. 12.
[Radio] 라디오 버튼 그룹지정 * 임무 * MFC에서 다이얼로그를 만들어서 사용하는 경우, 라디오 버튼을 사용하는 경우가 있다. 이때 모든 라디오 버튼을 한가지 용도로만 사용하면 좋겠지만 아쉽게도 몇개의 그룹으로 나누어서 사용해야 하는 경우가 있다. MFC는 친절하게 라디오 버튼 하나를 누르면 다른 라디오 버튼에서 선택표시(가운데 찍히는 점)를 빼앗아 준다. 그룹이 여러개인 경우, 이렇게 되면 다른 그룹의 선택표시까지 빼앗아 버려 과잉 친절이 된다. 예) 하나의 다이얼로그에서 색상과 크기를 라디오 버튼으로 받는 경우를 생각해 보자. 이렇게 되면 색상을 입력받는 라디오 버튼들과 크기를 입력받는 라디오 버튼들로 2개의 그룹이 생긴다. 원래대로라면 크기이던 색상이던 하나의 버튼을 선택하면 나머지 그룹의 버튼에서도 선택점이 사라져 불편하다... 2011. 1. 12.
[ToolBar] MFC 트루컬러 툴바 만들기 MFC로 유틸리티나 관리 툴을 만드는 것은 보편화 된 작업이다. 아직 Visual Studio 2003/2005를 사용하는 나로서는 최근 메신저에 등장하는 풀컬러 버튼이 부러울 수 밖에 없다. 가장 최근의 Visual C/C++에서 확장된 MFC가 트루컬러 툴바나 버튼을 지원하는지 여부는 알 수 없다. (프로그래머의 게으름 용서하길..) Microsoft의 MFC 담당 프로그래머들도 우리와 같은 게으른 족속들일 테니까, 이런 기능이 없더라도 굳이 그들을 원망하고 싶지는 않다. ^^; 인터넷을 검색하여 이와 관련된 몇가지 소스를 찾아 분석하였다. 그 중 가장 깔끔한 방법을 공개한다. * 작동원리 * 일단 원리를 설명하자면, 1) 3개의 24비트(트루컬러)의 툴바용 비트맵을 프로젝트 내에 리소스로 가지고 있.. 2011. 1. 12.
[Event] 오른쪽 마우스버튼으로 여는 컨텍스트 메뉴 * 임무 * MFC 프로그램을 만들다 보면 오른쪽 버튼으로 여는 컨텍스트 메뉴가 필요한 경우가 있다. 과연 어떻게 구현하는 걸까? * 구현방법 * 1. CMenu를 이용 POPUP메뉴를 구현한다. 2. OnRButtonDown 이벤트 핸들러에서 TrackPopupMenu()를 구동시킨다. 3. 그러면 선택된 ID를 돌려 보내준다. 이것을 부모 윈도우에 메세지로 돌려보내준다. 4. 이후 메뉴에 집어넣은 ID값에 대한 핸들러를 작성하여 해당 메뉴를 선택하면 상응하는 함수가 호출 되어진다. 코딩 * 여기서는 예를 들어 DocTemplate 상황에서 구현하였다. 그러나 다이얼로그도 마찬가지임. CMenu m_ContextMenu; // 반대버튼 메뉴 void CDemoView::OnInitialUpdate() .. 2011. 1. 12.
[Edit] CEdit Controller 의 사용법 * 임무 * 다이얼로그 또는 일반 어플리케이션에서 에디트 박스를 많이 사용한다. 어떻게 에디트 박스를 효율적으로 다룰 것인가? * 사용법 * 1. 먼저 에디트 박스를 지칭할 수 있는 포인터 변수를 생성한다. 2. 에디트 박스의 포인터를 받아온다. 3. CEdit의 멤버 함수를 이용하여 원하는 조작을 할 수 있다. * 코딩 예 * CEdit *pEdit; // 포인터 변수 // 여기서는 IDC_EDIT1이라는 임의 ID를 사용한다. 실제로는 리소스 에디터에서 만들고 이름을 바꿀 수 있다. pEdit = (CEdit *)GetDlgItem(IDC_EDIT1); // 해당 ID를 가진 에디트 박스의 포인터를 가져온다. (CEdit *)로 캐스팅 한다. // 해당 에디트 박스의 컨트롤을 가져 올 수 없다면 NU.. 2011. 1. 12.
반응형