본문 바로가기

Language/MFC

MDI 다른 형식의 Child 만들기 MDI 의 꿈을 버리지 못하고 몇 개월째 해야지~하면서 찾아만 다녔던 부분이다.MDI 에서 기본View는 내가 지정을 할 수 있지만 다른 형식의 View, 그러니까 예를 들어서 일반 View가 기본인데 FormView가 필요하다던지 그 반대가 되던지 아니면 머..스크롤 뷰라던지 등 기본과 다른 View를 사용해서 Child를 띄우는 방법이다. 솔직히 그냥 DoModel 이나 Modeless 로 띄워도 되긴 하지만 일단 간지가 나지 않는다 -_- MDI 의 최대 장점은 독립적인 Frame 구조이기 때문이다. 독립적인 Frame이 지원이 되는데 왜 굳이 저렇게 쓴단 말인가? 그럴빠엔 SDI로 설계를 하는게 더 편하다. 서론이 길었지만 매우 간단하더라 (이전엔 해도 않됐었다. 아무리 많은 포스팅을 봐도 해보면.. 더보기
이동식/HD/SD 카드등 외부 메모리 삽입/제거 이벤트 감지 USB/SD 카드 가 컴퓨터에서 인식되면 이게 이동식이든 HD 든 상관없이 시스템 콜을 받게 됩니다. MFC 에서 DefWindowProc() 함수에서 메시지가 날라오는군요. DefWindowProc 함수는 MFC 메시지 함수 입니다. #include LRESULT CMyProject::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam){ // TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다. if(message == WM_DEVICECHANGE){ UINT event = (UINT)wParam; switch(event ){ case DBT_DEVICEARRIVAL :// 이동식 디스크 삽입 SetDlgItemText(IDC_S.. 더보기
MFC Folder 통체 복사 처음에 Folder를 복사 하기 위해서 모든 폴더 내부에 있는 폴더와 파일을 스캔한 후 Path를 받아오는 방식으로 했었는데 ....함께 일하시는 수석연구원님 께서 한방에 해결하는 방법을 찾아 주셨네요 ;;;( 거의다 구현 했었는데....OTL) SHFILEOPSTRUCT 구조체를 이용하여 매우 간단하게 폴더를 복사 하는 방법입니다. 동작 옵션을 달리하면 여러 기능이 가능합니다... intCopyFolder(CString szFrom, CString szTo){ SHFILEOPSTRUCT shfo; int nRet; char* pszFrom = new char[szFrom.GetLength()+1]; char* pszTo = new char[szTo.GetLength()+1]; // EmptyDirect.. 더보기
MFC 다국어 처리 다국어처리 일반적으로 MFC에서 작업을 특별히 하지 않으면 Stringtable에는 IDS_ABOUTBOX, IDP_DOCKETS_INIT_FAILED (소켓 옵션 설정시) 이 두가지 만 등록이 되어있습니다. 기본적으로 원하는 값은 순차적으로 카운트 되며 이게 곧 ID 넘버가 됩니다. 이런저런 걸 추가한 뒤 다른 언어를 하고자 할때는 다음과 같은 작업으로 손쉽게 하면 됩니다. 일단 다국어 stringtable을 위한 리소스 dll 생성 New Project --> Win32 프로젝트 --> 응용프로그램종류 : DLL / 빈 프로젝트 체크 --> 리소스파일 추가 --> stringtable 리소스 추가 (그림은 아이콘이 선택되어 있지만 String Table로 추가) 이렇게 하면 빈 프로젝트에 딴거 없이 .. 더보기
MFC .map 파일과 .cod파일 분석하기 kuaaan 님 블러그는 정말 보물 창고다.-_-. 릴리즈에서 디버그의 힘든 (테스트 PC가 다를 경우)점에서 여러 유용한 방법들이 있을 줄이야.!!! (우리회사 수석연구원님도 대단하심.ㅠㅠ) VS2010 으로 작업하면서 필요없는데 생기는 이유를 모르는 파일들이 이렇게 유용할줄 몰랐다...VS2010아.............-_- map파일과 cod파일을 이용하여 여러 방면으로 디버그가 가능하다. 물론 소스단의 Debug보단 편하진 않지만 서버나 산업용 PC에서 테스트를 할 때 VS를 설치 하지 못하는 환경에서 메모리 주소만을 가지고 충분히 Debug가 가능하다. 디버거로 실행시킬 때 모든 오류가 발생해준다면 오죽이냐 좋겠냐마는 현실은 그렇지가 않아서... Debug 빌드에서는 죽지 않다가 Release.. 더보기
메모리 덤프(Memory dump) 분석하기 2 이 글은 Kuaaan님께서 정리하신 글입니다.http://kuaaan.tistory.com/214 이 포스트에서는 WinDbg를 사용해 Application 메모리 덤프 (말하자면, 유저 메모리덤프)를 분석하는 방법을 설명합니다. WinDbg를 사용해본 적이 없는 초보자를 대상으로 하는 글이며, 메모리덤프 작성하는 방법을 모르시는 분은 아래의 글을 먼저 읽어 주세요. http://kuaaan.tistory.com/213 우선, Null 포인터에 쓰기를 시도하여 Access Violation을 일으키는 샘플 프로그램을 하나 작성해 보겠습니다. view plaincopy to clipboardprint?#include "stdafx.h" #include void funcC(INT x, INT y, INT z.. 더보기
메모리 덤프(Memory dump) 분석하기 1 릴리즈후 테스트를 하는데 아침마다 프로그램이 죽어있는 현상으로 골머리를 썩히는 중...같이 일하시는 수석연구원님 께서 윈도우 이벤트 로그와 메모리 덤프 파일을 이용하는 방법을 찾아 주셨다. 아래 글을 참조하면 릴리즈 모드에서도 디버그가 어렵지 않을거 같은.-_-!! 1. "포스트모템 디버깅"과 "메모리 덤프" "포스트 모템"이라는 말은 "사후(死後)"라는 의미입니다. 사후 세계를 믿는 종교를 "포스트모템 신앙"이라고 하죠. "포스트모템 디버깅 (Post Mortem Debugging)" 이라는 말도 대략 비슷한 의미입니다. 디버거가 설치되어 있고 개발환경이 꾸며져 있는 PC에서 문제가 발생한다면야 별 걱정할 게 없겠지만... 그렇지 않다면 문제가 발생한 PC에서 "메모리 덤프"를 작성하여 분석가능한 개발.. 더보기
콘솔모드 Debug 하도 프로그램 버그가 않잡혀서 이것저것 검색하다가 콘솔창(printf)을 이용하여 Debug 하는 방법을 보고 적용 해보았다. 머 특별한건 아니지만 프로그램 기존 로그는 지저분하고 알아보기가 불편하여 컨트롤을 사용하지 않는 콘솔창을 이용하니 깔끔하니 보기가 편하네... MFC환경에서 콘솔창을 이용한 Deubgging방법 다음과 같은 명령을 추가하면 된다. (이 방법 말고도 직접 프로젝트 설정가서 하는 방법도 있다.) 유니코드 환경에서는 다음과 같은 명령을 #pragma comment(linker, "/entry:wWinMainCRTStartup /subsystem:console") 멀티바이트 환경에서는 다음과 같은 명령을 추가하면 된다. #pragma comment(linker, "/entry:WinMa.. 더보기
Popup Menu Check 하기 Popup 매뉴를 컨트롤 하는 방법은 두가지가 있는데 UICommand 방식은 해봐도 잘 않되더라...이전에 프로젝트 하면서 만들어놨다~ 싶었는데 제대로 되지 않아 무진장 찾던 중 http://phiru.tistory.com/80에 자세히 나와 있어서 글을 퍼왔다. 문제는 난 이렇게 했는데 처음엔 않되는 것.ㅡㅡ 테스트 보다 매뉴가 많았기 때문....일단 기본은 http://phiru.tistory.com/80 에서 발췌한거와 같이 다음과 같다. ----------------------------------------------------------------------------------------------------이곳 저곳 돌아다녔는데.. 자세히(?) 설명된게 없고, 또한 방법도 여러U가지다 보.. 더보기
Child 크기 동적 변경 Child를 분할 한 후 원하는 크기를 조절하지 못해서 한참 해맸다. MFC 특성상 왠만한 함수들이 지원이 될거라 생각하고, 내가 그걸 모르고 있다고 생각하면서 서칭만 몇일째 하다 결국 노가다로 해결하는 수 밖에 없었다. 데브피아, 팁스 소프트에 사진까지 올려가며 질문했지만 답글은 0 ..ㅡㅡ!! Child Frame에서 분할 뷰 뿐 아니라 단일 뷰 일때도 동적으로 크기 변경(수동 말고...)을 하고자 할때 사실 특정함 함수 또는 오버라이딩 가능한 함수가 있을거라 생각했다만... 없다. 특히 영상처리를 하기 위하여 단일 윈도우가 아닌 MDI 처럼 영상 마다 각 윈도우를 띄우는 형식이라면 영상의 크기에 따라서 창의 크기도 달라져야 한다. (물론 영상 자체를 고정된 창에 축소 해서 보여 줄 수도 있지만 일단.. 더보기