반응형

개발환경: 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_

,
반응형

(환경) QualNet 5.0.1, Windows 7 64bit, Visual Studio 2008


경험으로 볼 때, 리눅스에서는 gcc에서 디버그 옵션을 지정하기 때문에 별다른 설정 없이 그냥 빌드해도 gdb qualnet 명령으로 디버그가 가능했다. 하지만 윈도우 환경에서는 QualNet Makefile에서 기본 설정으로 디버깅 옵션이 꺼져 있다. 매뉴얼에는 runtime efficiency를 위해서 그렇게 했다고 적혀 있다.


윈도우 환경에서 디버깅 옵션을 켜려면, [QUALNET_HOME]\main\Makefile을 열고 아래와 같이 고쳐 준다.

[QUALNET_HOME]\main\Makefile 중에서...


#DEBUG = /Zi  ---------->  DEBUG = /Zi

OPT = /Ox /Ob2  ---------->  #OPT = /Ox /Ob2


만약 main 폴더 안에 Makefile이 없을 경우, 윈도우 버전 및 Visual Studio 버전별로 호환되는 Makefile 예시가 여러 개 있으니(Makefile-windows-vc8, Makefile-windows-x64-vc9 등) 그 중에서 현재 시스템과 호환되는 파일을 복사해서 Makefile로 이름을 변경한다.


추가로, Visual Studio에서 "빌드 > 솔루션 빌드"를 눌렀을 때 수행되는 Makefile은 위의 것이 아니고 [QUALNET_HOME]\Makefile이다. (Programmer's guide에 적힌 visual studio 연동 방법대로 진행한다면 이 위치에 텍스트파일을 만들게 된다.) 그 파일에서 nmake 명령 뒤에 참고하는 파일 이름이 방금 main 폴더에서 새로 복사해서 만든 Makefile인지 확인할 것. 내용이 아래와 같아야 한다.

[QUALNET_HOME]\Makefile

all:

cd main

nmake -f Makefile

rebuild: clean

nmake -f Makefile

clean:

cd main

nmake -f Makefile clean



그리고 Visual Studio에서 다시 빌드하고 나서 "프로젝트 ---> [QualNet 프로젝트 이름] 속성..."에 들어간다.

왼쪽 메뉴에서 "구성 속성 > 디버깅"으로 들어간다.

작업 디렉터리는 실행하고자 하는 시나리오 config 파일이 있는 폴더 위치,

명령 인수에서는 시나리오 config 파일의 이름을 입력한다.



이제 Visual Studio 메뉴에서 "디버그 > 디버깅 시작(F5)" 으로 특정 시나리오에 대해서 디버그할 수 있다.




반응형
블로그 이미지

Bryan_

,