본문 바로가기

Language/MFC

MDI 분할 스크롤뷰, 스크롤 동기화 엄청난 검색을 한 결과...약간의 실마리만 잡아서 하다하다.... 매우 심플한 방법을... MDI에서 Child 를 스크롤 뷰로 한뒤 두개의 스크롤 뷰를 분할 하였다. 영상처리에서 Before, After 를 좀 멋지게 보려고 시도해본 짓거리가 이렇게 힘들줄은...(아니 내가 이렇게 못할 줄...은 알았지만;;) 보통 분할 후 머 위 그림과 같이 나오게 된다. 문제는 스크롤 바가 따로따로 구성이 되어 있기 때문에 각각의 스크롤을 사용자가 직접 해줄 수 있다는 장점이 있지만 영상처리에서 이런 뷰를 구성하는 이유는 같은 이미지를 비교하기 위해서 이므로 스크롤바가 동일하게 동작하는 것을 원한다. winapi 홈페이지 (http://www.winapi.co.kr/project/dangeun/dg2/22-1.ht.. 더보기
컴파일 옵션 변경을 이용하여 속도를 증가 시키는 꼼수 Visual studio 2010 에서 가능(이전 버전도 가능한지 테스트는 않해봤다...)하다. 기본적으로 컴파일러는 반복적인 작업에 대해서 SSE를 사용하도록 설정할 수 있다. 물론 SSE2 버전이지만 이걸로도 충분히 반복작업의 로드를 줄일 수 있다. - Alt+F7 을 눌러 속성 창 선택- C/C++ --> 코드생성 --> 고급 명령 집합 사용 - 스트리밍 SIMD Extensions 2(/arch:SSE2) 를 선택한다. . 감마 변환 알고리즘을 SSE로 변경하려다가 POW 에서 막혀버리는 바람에 결국 POW 를 C API를 이용했다. 속도는 엄~~~청 느리더만....나머지 다른 수식을 SSE로 조저도 POW 에서 생기는 부하를 감당하기는 매우 힘들다는 결론이다. 이거로 그나마 속도를 좀 올리긴 했.. 더보기
Tab컨트롤 선택한 탭 탭명 폰트 변경 [http://imagej.tistory.com/entry/프로퍼티-시트-탭-글꼴색상변경] 글에서 언급 했듯이 서브클래싱 기법을 사용한 방법이다. 방법은 탭 글꼴색을 변경하는 방법에서 좀더 꼼수를 부린것.! 물론 이것도 프로퍼티시트 에서 경우다(Tab컨트롤을 이용해서는 테스트 해보질 않았음.) 일단 기존의 서브클래싱을 (물론 다른 방법이 여럿 있겠지만 일단 포스팅 했던 대로..) OnInitDialog 에서 연결하여 각 탭을 설정한다. 서브클래싱을 통하여 설정을 해 놓고 디버깅을 해보면 탭 이 변경될때 마다 클래스의 DrawItem 함수가 호출되는 것을 확인할 수 있는데 선택된 탭 명을 설정하기 위하여 폰트 변경을 하고자 하여도 선택된 탭의 정보가 넘어가거나 세팅하기가 쉽지가 않다. 왜냐면 제어가 탭이 .. 더보기
헤더파일(*.h) 참조시 주의사항 프로토콜이 바껴 기존 프로젝트를 수정하면서 프로토콜을 변경하는 도중에 에러가 120개가 떴다. 여러가지 이유가 있겠지만 일단 프로젝트에서 사용되는 많은 구조체를 정의한 헤더파일에서 정의된 모든 구조체, 매크로들이 제정의 되었다는 에러... 먼 개소리일까...하면서 거진 3시간을 날리고 인터넷을 뒤지다가 문득 드는 생각에 이전에 만든 헤더를 열어서 비교해보았다. #pragma once !!!! 혹시 몰라서 추가 해주니 에러가 확 ~ 사라지네..ㅡ,,.ㅡ;; 이 구문은 헤더파일 (왠만한 MFC 해더파일이나 C++ 해더파일에 자동을 기입이 된다. 물론 클래스 마법사를 사용했을때..) 최 상단에 위치하게 되는데 이 구문을 넣게 되면 중복 참조를 방지할 수 있다. 중복 참조로 인하여 한번 선언된 구조체나 메크로들.. 더보기
프로퍼티 시트 탭 글꼴/색상/변경 탭 컨트롤을 많이 사용해보지 않아서 만들때도 많이 해맸는데 프로퍼티 시트를 이용한 탭 컨트롤 제어는 오죽했겠는가.... 일단 프로퍼티 시트와 탭 컨트롤의 차이점은 VC++6.0 완전정복 SE 에 기제되어 있듯이 탭에 다른 화면을 출력하기 위해서는 프로퍼티 시트를 사용하는 것이 좋다고 한다. 사실 차이는 그닥...ㄱ- 머 그렇다고 그냥 탭 컨트롤은 않되나? 그것도 아님..ㅡㅡ; 어째든 책 보고 하다 보니;; 프로퍼티 시트를 이용하여 탭 컨트롤을 구현하게 되었고 색상을 변경하려고 하니...이건머...탭 컨트롤에 대한 내용만 있군... 일단 이리저리 서칭해본 결과 Tip Soft 등에서 찾아본 결과 프로퍼티 시트 클래스는 내부적으로 탭 클래스를 생성하도록 되어있다. 때문에 프로퍼티 시트 클래스를 상속받은( 프.. 더보기
빈 사각형 그리기 NULL BRUSH 라고도 한다 브러쉬를 투명으로 지정하는건데... 머 방법이야 많겠지만 매우 간단한 방법 하나! 참고로 SetBkMode( TRANSPARENT ); 를 해준다고 해서 해당 오브젝트의 배경이 투명해 지진 않는다.ㅡ.,ㅡ; 간단하게~ dc.SelectStockObject(NULL_BURSH); 를 사용하면 브러쉬가 바로 적용이 된다. SelectStockObject 는 미리 정의된 스톡 펜, 브러쉬 또는 윈도우에 의해서 제공되는 폰트 중 에서 하나를 선택하는 함수이다. -함수 설명 출처 http://user.chollian.net/~ksupark/mfc.htm 더보기
Property sheet 위자드 형식 Next 강제 이벤트 발생 제목도 참 만들기 힘들구만;; 어떠한 옵션을 단계적으로 선택하고픈 기능을 만들때 일반적인 Dialog 를 여러개 만들어서 하나 띄운뒤 선택하면 종료후 다음 Dialog 띄우고 하는 짓은 사실 매우 귀찬고 창이 제대로 종료가 됐는지 않됐는지 확인하기도 참 힘들다. 물론 선택된 옵션이 제대로만 됐으면 상관이 없지만 만들기가 심플한 부분은 절대 아니다. 때문에 많이들 사용하는 것이 프로퍼티 시트 기능으로 모달리스나 모달, 위자드 스타일로 만드는 것이다. VS는 MFC 프로젝트 생성시 이런 위자드 형식의 창을 이용하여 어떤 (SDI/MDI/Dialog base) 기반으로 할껀지 기반이 정해지면 해당 기반에서 사용하고픈 옵션 제거 하고픈 옵션등을 정의하고 마지막에 피니쉬와 함께 프로젝트가 생성이 된다. 복수개의 .. 더보기
MFC RS232통신 실시간 read 병목현상 Rs232 통신을 하기 위해서 어쩌다 보니 스레드를 배웠는데..... 아직도 작업스레드랑 머...유저 스레드 이건 모르겠다.ㅠ;; 걍 CThread 상속받아서 하는방법만.ㅠ;; 통신중... 실시간으로 데이터를 받으면서 다시 모듈로 명령을 날리면 명령어가 씹히는 현상이 발생하여 이덕에 꽤 애를 먹었다. 물론 Full로 해결을 다 한건 아니지만 매우 희망적인건....명령이 날라가는것.ㅋㅋㅋ 우리나라 윈도우 프로그래밍 쪽으로 갓 코더가 꽤 모여있는 devpia 에 결국 조언을 구하였는데... 스레드를 read만 하고 write 할때는 메인에서 날려라...라는 (mater level의 재우님 께서 조언하신 내용..) 말에 한방에 해결.!! 처음엔.. MainDlg -> 통신Thread -> CComm draw 더보기
현재실행경로 얻기 이런 저런 경로를 지정해야 하다보면 현재 실행중인 프로그램의 경로가 필요해질 때가 있다. 이럴 때는 GetModuleFileName() 함수를 이용 #include 요놈을 추가해주고 프로젝트 속성으로 달려가서 shlwapi.lib 도 추가 char Path[MAX_PATH]; GetModuleFileName(NULL, Path, MAX_PATH); 요렇게 해주면 실행중인 프로세스의 경로+파일명까지 해주는데 요기서 경로만 필요할 경우에는.. PathRemoveFileSpec(Path); 상대 경로를 사용할 수 없는 상황이 sprintf_s(AngPath, MAX_PATH, "%s\\Resource\\Billy_Ang.png", Path); 더보기
MFC 해더파일 ============================================================================ MFC 헤더와 라이브러리 설명 (The Foundation Classes Headers and Libraries) #1 1. Header Files 아래 테이블은 모든 MFC 헤더 파일들과 사용 목적, 그리고 어떤 파일전에 어떤 파일들이 Include 될수 있는지에 대해 나와있습니다. 거의 모든 헤더들이 다른 헤더들에 의해 Include 된다는 것을 주의하십시오. 당신의 코드에서 직접 Include 하는것은 약 4-5개 정도입니다. ---------------------------------------------------------------------------- .. 더보기