본문 바로가기

mfc

Visual Studio 2017에서 MFC 개발하기 Visual Studio 2017 설치 이후 MFC 프로젝트가 보이지 않는 경우가 있습니다.이런 경우 개별 구성 요소에서 MFC를 추가해야 합니다.먼저 시작에서 Visual Studio Installer를 검색해서 실행합니다.실행하면 설치된 Visual Studio 2017 버전을 확인할 수 있습니다.수정 버튼을 누르면 설치된 내용을 변경할 수 있습니다.개별 구성 요소로 이동하면 설치된 구성 요소와 설치가 가능한 구성 요소를 확인할 수 있습니다. 하단 부분의 MFC 및 ATL 지원(x86 및 x64)에 체크하고 좌측 하단의 수정 버튼을 누르면 설치가 됩니다.설치가 완료되면 Visual Studio를 실행하고 MFC 프로젝트 생성이 가능합니다.좌측에서 C++의 MFC 옵션을 선택하면 MFC 응용프로그램 생.. 더보기
MFC에 플래시(Flash) ActiveX 컨트롤 추가하기 최근 웹에서 플래시를 많이 걷어내는 추세입니다.보안 등 여러 문제가 많이 발생하기 때문에 최근에는 잘 사용하지 않는 방향으로 개발을 합니다.그래도 swf 파일 등을 MFC에서 출력하는 상황이 생깁니다.MFC에 Flash 컨트롤을 추가해서 swf 파일을 재생하는 방법입니다.Visual Studio 2015를 기준으로 설명하도록 하겠습니다.먼저 MFC 프로젝트를 생성합니다.간단하게 테스트하기 위해 다이얼로그 기반 프로젝트로 생성합니다. MFC 라이브러리를 static으로 사용하는 것 외에 다른 설정은 변경하지 않았습니다.리소스 뷰(Resource View)의 다이얼로그를 열고 ActiveX 컨트롤을 추가합니다. 다이얼로그 화면에서 마우스 오른쪽 클릭하면 메뉴가 표시됩니다.Insert ActiveX Contr.. 더보기
MFC에서 커스텀 리소스(Custom Resource) 사용 방법 MFC를 활용해서 개발할 경우 Resource View에서 리소스를 확인할 수 있습니다.비트맵이나 아이콘, 다이얼로그, 메뉴 등이 포함되어 있습니다.이런 타입은 MFC 자체에서 지원하는 리소스 형식입니다.지원하는 타입이 아닌 다른 타입의 리소스를 추가해서 사용하기 위해서는 커스텀 리소스를 사용해야 합니다.바이너리나 텍스트 파일 등을 추가해서 가져오는 것이 가능합니다.간단하게 텍스트 파일을 리소스에 추가하고 가져오는 방법입니다.먼저 Resource View로 이동해서 새로운 리소스를 추가합니다.프로젝트명.rc라고 되어 있는 부분에 마우스 오른쪽 클릭을 하면 Add resource 메뉴를 선택합니다.리소스를 추가할 수 있는 다이얼로그가 표시됩니다. 오른쪽에 있는 Import... 버튼을 클릭합니다.파일 선택.. 더보기
MFC에서 엔터(Enter), ESC 입력시 종료되는 문제 해결 방법 MFC에서 프로그램을 개발할 때 엔터나 ESC를 누를 경우 프로그램이 종료되는 문제가 존재합니다.개발을 MFC로 진행하면 누구나 한 번쯤은 경험하게 됩니다.이 문제를 해결하기 위해 다음과 같은 방법으로 처리하면 됩니다.1. PreTranslateMessage() 메소드 재정의(Override)다이얼로그 베이스의 프로젝트를 생성하면 해당 프로젝트명Dlg.cpp와 .h파일이 생성됩니다.해당 클래스의 PreTranslateMessage() 메소드를 오버라이딩하는 방법입니다.이 메소드는 메시지가 처리되기 전에 호출이 되는 함수입니다.여기서 키보드의 엔터와 ESC 메시지를 거르게 하면 됩니다.먼저 Class Wizard를 실행(Ctrl + Shift + X)합니다.Class name에는 Dlg가 뒤에 붙은 클래스.. 더보기
IDesktopWallpaper를 활용한 윈도우 배경화면 변경하기 윈도우8에 IDesktopWallpaper 인터페이스가 추가되었습니다. 이 인터페이스를 활용하면 바탕화면의 배경화면을 변경할 수 있습니다. MSDN에서 다음과 같이 확인할 수 있습니다. https://msdn.microsoft.com/en-us/library/windows/desktop/hh706946(v=vs.85).aspx 메소드의 이름이 직관적이기 때문에 기능을 쉽게 알 수 있습니다. 배경화면의 색을 지정하거나 이미지, 슬라이드쇼의 설정이 가능합니다. 또한 화면의 해상도를 가져올 수도 있습니다. #include #include #include #include int main() { ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); CComPtr pWall.. 더보기
AfxMessageBox의 타이틀 변경 MFC에서 AfxMessageBox를 이용해서 팝업 메시지를 띄우면 exe파일의 이름을 타이틀로 사용합니다.MFCTest.exe에서 AfxMessageBox를 사용하면 다음과 같이 타이틀이 표시됩니다. AfxMessageBox(_T("Popup Test")); 화면에 다음과 같이 표시가 됩니다.MFCTest라는 타이틀로 표시가 됩니다.기본적인 타이틀 대신 새로운 타이틀로 사용하는 방법은 다음과 같습니다.1. exe 파일명 변경가장 간단한 방법은 exe 파일명을 변경하는 방법입니다.이 방법은 간단하지만 exe 파일명과 다른 타이틀을 사용하고 싶을 때는 사용할 수 없습니다.2. Resource의 String Table에 AFX_IDS_APP_TITLE을 추가String Table에 AFX_IDS_APP_TI.. 더보기
라디오 버튼의 Warning: skipping non-radio button in group. 경고 제거 MFC에서 라디오 버튼을 추가해서 사용하다보면 간혹 이런 경고를 보게 됩니다.Warning: skipping non-radio button in group.에러가 아니기 때문에 실행에는 문제가 발생하지 않습니다.라디오 버튼을 추가할 때 처음 라디오 버튼의 Properties의 Group 속성을 True로 합니다.그리고 그 이후의 라디오 버튼들은 False로 설정합니다.처음 Group 속성이 True인 컨트롤부터 다음 Group 속성이 True인 컨트롤이 나오기 전까지가 그룹이 됩니다.첫 번째 라디오 버튼이 Group 속성이 True이고 그 이후의 라디오 버튼은 False입니다.그리고 그 다음에 다른 컨트롤이 Group 속성이 True이면 라디오 버튼이 정상적으로 그룹이 되는 것입니다.이 경고가 발생했을 .. 더보기
MFC에 Flash ActiveX 올리고 에러 발생 FormView에 Flash ActiveX 컨트롤을 올렸을 때 실행이 되지 않는 문제가 있었습니다.이전 버전의 Visual Studio에서는 디버그 모드에서 ASSERT에서 문제가 생겼습니다.Visual Studio 2015에서는 다음과 같은 문제가 발생했습니다.문제가 생기는 부분이 이상한 곳이기 때문에 찾기가 어려웠습니다. AfxOleInit() 함수를 호출하는 부분에서 에러가 발생합니다.MSDN을 통해서 관련 내용을 확인할 수 있었습니다.CoInitializeEx()를 호출할 경우에 COINIT_APARTMENTTHREADED를 사용하라는 것이었습니다.호출할 때 COINIT_MULTITHREADED로 호출했기 때문에 발생한 문제였습니다.CoInitializeEx()를 호출할 때 COINIT_APART.. 더보기