반응형

개발환경: Microsoft Visual Studio 2010, MFC


아는 동생이 MFC로 히스토그램을 만들어서 시연하기 위한 코딩을 도와주면서 MFC를 오랜만에 접하게 되었다. 놀라운 얘기지만, 나는 학부 때 MFC 프로그램을 만들 일이 없었고, 연구실에서도 Java와 C 위주로만 개발하다 보니 MFC를 제대로 배운 적이 없다.


간단하게 윈도우 창에 히스토그램을 그려 주는 코드를 만들어 보면서, 혹시라도 나중에 데이터를 가지고 아주 간단한 시연(demonstration)을 할 때 급히 써먹을 가능성이 있을 것 같아서 기록하게 되었다. 막상 기록은 하게 됐지만 실상은 너무 간단하다.

 - 먼저 X축과 Y축을 원하는 길이만큼 긋고,

 - X축 위에 원하는 너비와 높이만큼 막대기를 배치한다.

끝. ㅡㅡ;


물론 더 보기 좋은 히스토그램을 그리고자 한다면 X축과 Y축 제목을 비롯해 고칠 것이 매우 많겠지만, 일단 기본 코드 위에서 그런 잡다한 작업을 시작하면 될 것이므로 기본 중의 기본만 남기게 되었다.

MFC에는 당연히 사각형을 그려 주는 함수가 있다. 그리기 개체(CClientDC)를 정의하고 FillSolidRect 함수를 이용하면 된다.

CClientDC pDC(this);

pDC.FillSolidRect( 0, 200, 50, 80, RGB(255,0,0) ); // (x,y)좌표: (0, 200), 너비: 50, 높이: 80, 색깔: 빨간색


단지 사각형을 그릴 때의 기준점(원점: (0,0))이 윈도우 창의 왼쪽 위에서 시작하고, Y 좌표값은 아래쪽으로 갈 수록 커진다는 것만 주의하면 된다.


우선 새로운 MFC 프로젝트를 만들 때 빈 윈도우 화면에 ChildView를 하나 만든 채로 시작했다.

프로젝트 이름을 hstorgram_140206으로 했더니 Visual Studio 2010에서 알아서 헤더와 소스 파일은 만들어 주었다.

편의를 위해 헤더 파일(historgram_140206.h)에 원점과 X,Y축 길이, 히스토그램 사각형(막대기)의 크기 등을 미리 정의했다.

// 새로 정의한 변수들

#define ORIGIN_X 20

#define ORIGIN_Y 560

#define X_AXIS_LENGTH 800

#define Y_AXIS_LENGTH 500

#define BAR_WIDTH 25

#define BAR_HEIGHT 20

#define BAR_COLOR RGB(0,255,0) // 녹색


ChildView.cpp 파일에는 onPaint() 함수에 히스토그램 그리는 작업을 했고, 막대기는 반복해서 그리기 때문에 별도의 함수로 만들었다.

/**

 * 단색으로 채워진 사각형을 그립니다.

 *

 * @param x 히스토그램의 x축에서 사각형을 그리게 될 위치

 * @param width 그려지는 사각형의 가로 길이

 * @param height 그려지는 사각형의 세로 길이(y값)

 * @label 해당 사각형의 레이블 값(x축에 적히는 글자)

 */

void CChildView::drawSolidRectangle(int x, int width, int height, CString label)

{

CClientDC pDC(this);

pDC.FillSolidRect(ORIGIN_X+x, ORIGIN_Y-height, width, height, BAR_COLOR);

pDC.SetBkColor( RGB(255,255,255) );

pDC.TextOutW(ORIGIN_X + x + (BAR_WIDTH/2), ORIGIN_Y+1, label);

}


void CChildView::OnPaint() 

{

CPaintDC dc(this); // 그리기를 위한 디바이스 컨텍스트입니다.


// 그리기 객체 초기화

CClientDC pDC(this);


/*

* X축과 Y축 그리기.

* 참고로 (0,0)은 화면상에서 왼쪽 위.

*/

pDC.MoveTo(ORIGIN_X, ORIGIN_Y); // 원점으로 이동

pDC.LineTo(ORIGIN_X + X_AXIS_LENGTH, ORIGIN_Y); // X축 선 그리기

pDC.MoveTo(ORIGIN_X, ORIGIN_Y); // 원점으로 이동

pDC.LineTo(ORIGIN_X, ORIGIN_Y - Y_AXIS_LENGTH); // Y축 선 그리기


/*

* data 읽어오기

*/

// 텍스트 파일이나 DB에서 읽어오고자 할 경우 여기서 값을 로드합니다.



/*

* 색깔이 채워진 사각형(SolidRect) 그리기

 * 여기서는 예제로 a부터 z까지 높이를 20씩 증가시켜 가며 자동으로 막대기를 그렸다.

*/

char ch = 'a'; // 각 사각형의 x축 레이블(테스트 목적으로 a~z 글자를 입력)

int i = 0;

for(i=0; i<26; i++){

drawSolidRectangle(BAR_WIDTH*i, BAR_WIDTH-1, BAR_HEIGHT*i, CString(ch));

ch++;

}

}





Visual Studio 2010 프로젝트 파일(zip): 

histogram_140206_2.zip




반응형
블로그 이미지

Bryan_

,
반응형

평소에 자주 쓰는 텍스트 편집기에서 텍스트 파일 편집 시, 몇번째 줄로 이동하는 명령어의 단축키가 조금씩 달라서 따로 기록하게 되었다.



* VI (리눅스 콘솔 텍스트 편집기)

명령어 모드에서(Esc 눌렀을 때), n번째 라인으로 이동하고자 할 때,

nG

참고로 라인 번호 뒤에 G는 반드시 대문자여야 한다. 

Shift + g로 누르거나, CapsLock 눌러둔 상태에서 그냥 g키를 누르거나 둘 중 하나.


gg (소문자 g 두번)

문서의 첫번째 줄로 이동


G (대문자 G 한번)

문서의 맨 마지막 줄로 이동



* gedit (Ubuntu 기본 텍스트 편집기)

Ctrl + I



* Eclipse IDE

Ctrl + L



* Microsoft Visual Studio

Ctrl + G



* Microsoft Windows Notepad (윈도우 메모장)

"서식 - 자동 줄 바꿈" 설정을 체크 해제한 상태에서만 가능하며,

Ctrl + G



* EditPlus (에디트플러스, 국산 텍스트 편집기)

Ctrl + G



반응형
블로그 이미지

Bryan_

,
반응형

이클립스(Eclipse)에서 맨 처음 Subversive SVN을 설치하고 나서 재시작 후에 SVN을 사용하고자 하면 바로 SVN Connectors 설치 대화상자 뜬다. 실수로 이 대화상자를 끄면 이클립스를 재시작하더라도 두번 다시 같은 대화상자가 뜨지 않는다.


이 경우에는 Help > Install New Software... 를 눌러서 설치 창으로 들어가서 아래 주소를 "Work with:"에 추가한다.

http://community.polarion.com/projects/subversive/download/eclipse/3.0/update-site/


그러면 아래 그림처럼 Subversive SVN Connectors 설치를 진행할 수 있다.


참고로 설치 버전은 윈도우 플랫폼(32bit, 64bit)를 고려해서, 해당하는 플랫폼 중에서 최신 버전을 설치하면 된다.


반응형
블로그 이미지

Bryan_

,
반응형
일반적으로 JSP파일에서 한글을 직접 입력하고 싶을 때, 파일의 맨 위에
<%@ page contentType="text/html; charset=euc-kr" %> 이렇게만 써주면 한글이 문제없이 보이지만, Java에서 넘어오는 문자열이나 웹 주소를 통해 받는 파라미터는 모두 유니코드(UTF-8)이기 때문에 되도록이면 UTF-8로 통일해서 쓰는 것이 여러 모로 변환의 귀찮음도 줄일 겸 좋을 것 같다.


(1) 아파치 톰캣에서 설정할 부분:
<Connector port="8080" .../> 태그의 뒷부분에
useBodyEncodingForURI="true" URIEncoding="UTF-8"를 추가한다.
(예) <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" useBodyEncodingForURI="true" URIEncoding="UTF-8" />

<Connector port="8009" ... /> 태그의 뒷부분에도 똑같이 추가해 준다.
(예) <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" useBodyEncodingForURI="true" URIEncoding="UTF-8"/>


(2) JSP 파일에서 설정할 부분:
JSP파일의 시작 부분에 다음 줄을 추가한다. 또는 charset이 euc-kr로 되어 있을 경우 바꿔 준다.
<%@ page contentType="text/html; charset=UTF-8" %>


HTML 코드가 시작될 만한 곳 어딘가에 (위치가 큰 상관은 없어 보임) 아래 메타태그를 추가해 준다.
<META http-equiv="Content-Type" content="text/html; charset=UTF-8"/>


(3) JSP 파일 자체의 포맷 확인:
사용하는 에디터에 따라서 텍스트파일의 저장방식이 다를 수 있다.
현재 버전(0.9)의 AcroEdit의 경우 사용자가 직접 유니코드로 변환 명령을 주지 않으면 유니코드로 저장하지 않는다.
파일을 저장할 때 반드시 유니코드(UTF-8)로 저장할 것.
반응형
블로그 이미지

Bryan_

,
반응형
(VS2005깔린 폴더)\VC\lib 에 필요한 라이브러리 복사,
VS2005 실행해서 프로젝트 열고,

 - 프로젝트 --> [프로젝트 이름] 속성...
 - 구성 속성 --> 링커 --> 입력
 - 오른쪽에 보이는 내용 중에 맨 위에 '추가 종속성' 옆에 입력칸에 원하는 라이브러리 파일을 띄어쓰기로 구분하여 써줄 것.

반응형
블로그 이미지

Bryan_

,