본문 바로가기

Programming/MFC

(6)
Dialog 영역 명칭 MFC 작업중 화면을 Customize 할 경우가 생겨 아래와 같이 정리를 해둔다. 모든 window 영역은 Customize가 가능하다. 주의 사항 1. Dialog의 작업 영역과 비 작업 영역의 경계에 선이 나타날 수 있다. 적절하게 변경하여 작업을 진행 할 것 2. Dialog의 창 작업은 비 작업 영역이므로 OnNcPaint()에서 진행하여야한다. 참고 자료 1 : velog.io/@springkim/MFC-%EC%B0%BD-%EC%BB%A4%EC%8A%A4%ED%85%80-%EA%B8%B0%EB%B3%B8 [MFC] 창 커스텀 기본 ###Frame 아래의 함수들은 CFrameWnd 또는 CFrameWndEx를 상속받은 클래스의 메소드에서 이루어 진다. ######1. 시스템 버튼[최소화/최대화/..
CAsyncSocket Connect() 문제점 이 글은 추후에 참고하기위해 작성되었다. 정확하지 않은 내용이 있을 수 있으니 그저 참고용도로만 보길 바란다. winsock 또는 CSocket을 이용하여 socket통신을 개발하는 경우에는 connect() 함수의 반환 값에 따라 서버와 클라이언트가 정상적으로 연결되었는지 안되었는지를 알 수 있다. 하지만 CAsyncSocket을 이용한 경우 connect()함수의 반환값에 따라 정상적으로 처리가 되었는지 안되었는지 알 수 없는 문제가 있다. 이 때에는 GetLastError() 함수를 통해 에러값을 확인하고 OnConnect()를 재정의 함으로써 해결할 수 있다는 글이 있지만 실제로 시도해본 결과 정상 연결을 확인하는 것에는 무리가 있음을 확인하였다. 필자가 확인 못한 내용이 있을 수도 있다. 필자는..
Progress Bar Color Progress bar 색상은 사용하는 window theme에 따라 변경 방법이 다르다. 현재 확인된 것은 2가지이다. 1. windows classic 2. Aero windows classic의 경우는 2가지 방법으로 색상 변경이 가능하다. 1. SendMessage(PBM_SETBARCOLOR, 0, RGB(R, G, B)) 2. SetBarColor(RGB(R, G, B)) Aero의 경우는 상태 변경을 통해 색상변경이 가능하다. 총 3가지의 상태가 존재한다. 1. normal : 초록 2. paused : 노랑 3. error : 빨강 상태 변경 함수는 아래와 같다. SetState(int iState) 하지만 paused, error상태의 경우 progress bar 컨트롤이 정상 동작 되지..
Skin MFC 작업을 하다보면 Dialog 혹은 Control의 디자인을 변경할 일이 있다. 크게 3가지 방법이 있다고 한다. 1. 직접 제작 2. 상용 라이브러 사용 3. manifest 파일 추가 및 변경 본문은 2번째 방법에 대한 글이다. 우선 codejock은 상용 라이브러리로써 무료버전은 30일을 지원한다. codejock는 MFC의 다양한 컴포넌트를 지원한다. 필자는 MFC에 Skin을 입히기 위해 Research를 진행했었다. codejock에서 지원하는 Skin Theme는 7가지이다. Codejock Skin, Office 2007 Style, Office 2010 Style, Windows 10, Windows Vista Style, Windows XP Luna Style, Windows XP..
OnNcPaint( ) vs OnPaint( ) OnNcPaint는 비 작업 영역에 대한 처리를 하는데 사용된다. 비 작업 영역이란 프로그래머에게 프로그래밍 대상이되지 않는 부분으로 운영체제에서 관리되도록 되어 있는 부분을 뜻한다. 위 그림에서 파란색 점선 밖에 영역을 의미한다. OnPaint는 작업 영역에 대한 처리를 하는데 사용된다. 작업 영역이란 프로그래머에게 프로그래밍 대상이 되는 부분을 뜻한다. 위 그림에서 파란색 점석 안에 영역을 의미한다. 모든 컨트롤들은 작업 영역내에 위치 하므로 OnPaint를 대부분 사용하지만 Menu Bar, Title Bar, Border와 같은 부분은 OnNcPaint를 이용해야한다.
Console 창 MFC에서도 간단한 출력을 위해 Console 창이 필요한 경우가 있다. 알아본 바로는 3가지 방법이 존재 하지만 1번 방법을 추천한다. 나의 경우에 2,3번 방법은 동작하지 않았다. 1. 미리 컴파일된 헤더에 아래와 같은 선언을 한다. 미리 컴파일된 헤더는 VS버전에 따라 stdafx.h, framework.h로 존재한다. 2. App의 InitInstance에서 AlloConsole()호출 3. 프로젝트 > 속성 > 링커 > 시스템 > 하위 시스템