본문 바로가기
VisualStudio.C++.C#/코딩팁,함수활용,단편

Chart Director for C++ 개요, 설치. 설정.

by i.got.it 2016. 1. 15.

 

개요

 

 

ChartDirector 는 개발중 프로그램에서 챠트기능을 구현할 수 있게 해주는 컴포넌트이며 거의 모든 언어 지원된다.
지원언어 :  C++, .net, ASP/COM/VB, JSP/Java, ColdFusion, PHP, Perl, Python, Ruby.  
그릴수 있는 챠트종류 : Pie,XY,3D Surface, 3D Scatter, Polar/Radar, Pyramids/Cones/Funnels, Meter/Gauage.
 
Chart Director는 각 언어별로 배포파일이 따로 제공되고 있다. 
자유롭게 다운로드 받을 수 있고, 기간/기능 제한 없음. ChartDirector  도입한 응용프로그램이 상용인 경우 라이센스 구입해야함.
 
본 글에서 아래 3개 내용 정리된다.
1. C++ 용 Chart Director (DLL 형식임)의 설치(다운로드하여 압축푸는게 전부임). 
2. ChartDirector DLL 을 우리 프로젝트에서 활용하기 위한 implicit linking처리,  ChartDirector 에서 제공하는 클래스 CChartViewer 를 프로젝트에 포함하는 처리.
3. 우리 프로젝트에 Picture Control 추가하고 이를 CChartViewer 타입의 멤버변수 만들어 두기. ChartDirector 는 내부적으로 이미지 형식으로 챠트를 만들어낸다. 이를 표현할 수단으로 Picture Control 을 이용하는것.
4. 챠트 코딩하는 전체 흐름.
 
챠트예시.-3D 챠트.

챠트예시. - 금융챠팅.

Chart Director 제조사 : http://www.advsofteng.com/ 
 
기타.
ChartDirector  의 시간표현 자료형의 시간 최소단위는 년월일시분초까지이며, 초 이하 표현안됨.
 

 

 

1. Chart Director for C++ 설치하기(DLL파일,도움말,예제 다운로드 받기).

C++용으로 배포되는 ChartDirector  는 DLL 형식이어서 별도의 설치설과정이 요구되지 않고, DLL 파일들을 개발중 프로젝트 폴더로 복사해서 사용한다.  배포파일중에는 DLL 파일 외에도 도움말, 예제코드들이 잔뜩 들어있다.


 
1. 압축파일다운로드.
 
입수처 : 제조사 다운로드 사이트 -> http://www.advsofteng.com/download.html
위 사이트에서 언어별로 배포패키지들이 제공되고 있고, 이중에서 C++ 용은 타이틀 ChartDirector for C++ 에 있는 것이다. 아래그림.
32비트용, 64비트용이 따로 배포된다. 자신이 개발하는 중의 프로젝트의 비트수와 동일한것으로 다운로드 한다.
현재(2016년 1월) 버전 6.0임.

2. 압축파일 풀기. - 설치끝.
주의사항 : 다운로드 받은 압축파일 풀기전에 차단해제 처리부터 해야한다. 차단해제 방법 보기 -> http://igotit.tistory.com/552
 
3. 폴더 둘러보기.
압축해제 한 폴더를보면 아래 처럼 붉박 부분이 ChartDirector 의 전체 폴더 들이고, 이 중에서 개발중에 사용할 것은 lib 와 include 에 있는 파일이 전부이다. 나머지는 도움말과 예제 파일들이다.
d아래 lib  폴더 속에 있는 chartdir60.dll 과 lib 파일이 있고, inlcude 속에 dll 에서의 함수 정의등이 있는 헤더파일들이 있다(아래 아래 그림.).




4. 개발위한 도움말보기.
폴더중에 doc 속에 도움말 cppchartdir.chm 파일이 있으며, 이를 열어보면 설명이 상세하게 잘되어있다.



 

 

기타 : Chart Director 는 DLL 형식만 배포하며, static library 형식은 배포하지 않음. 
from : https://www.chartdir.com/forum/download_thread.php?bn=chartdir_support&pattern=&thread=1274193057

 

 

 

2. ChartDirector DLL 활용할 프로젝트 설정.

 

ChartDirector for C++ 을 우리 프로젝트에서 활용하기 위한 설정사항 정리.

 
기초정보 : DLL 활용법.
ChartDirector for C++ 은 DLL 형식이므로 개발중 프로젝트에서 이를 포함시켜 사용하기 위한 기본 설정은 일반적인 DLL 과 동일하다.
1. VC++에서 DLL 활용하는법 개요.. http://igotit.tistory.com/471
2. VC++ 에서 DLL 활용하는법. 예. http://igotit.tistory.com/483
 
1. DLL 관련 파일배치.
위 기초정보에서의 설명처럼 ChartDirector for C++ 의 파일들을 아래 처럼 배치해둔다.
 ChartDirector for C++ 의 파일.  프로젝트에서의 배치.
 chartdir60.dll  프로젝트의 실행파일이 있는 폴더에 복사해온다. 실행되는 실체.
 chartdir60.lib  프로젝트의 소스파일이 있는 곳에 복사해온다.  implicit linking 시 필요하다.
 chartdir.h
 bchartdir.h
 memblock.h
 FinanceChart.h
 프로젝트의 소스파일이 있는 곳에 복사해온다. dll 이 노출시킨 함수정의 등이 있다.  


2. ChartDirector 에서 제공하는 클래스 CChartViewer 프로젝트에 포함시키기.
ChartDirector 는 챠트를 모두 이미지로 생성하고 있고, 이를 MFC에서 표현하기 위하여 Picture Control 을 활용한다. Picture Control 을 핸들링 하기 편리한 클래스 CChartViewer 를 제공해주고 있다. 이 클래스를 우리 프로젝트에 포함시키자.


2.1 CChartViewer 클래스 파일 2개 프로젝트 소스 폴더로 복사.
다운로드 받은 ChartDirect  폴더 ..\mfcdemo\mfcdemo\ 에 있는  ChartViewer.cpp,  ChartViewer.h 파일을 우리 프로젝트의 소스 폴더에 복사해온다.


2.2 우리 프로젝트에서 상기2.1의 2개의 파일 추가한다.


더보기
프로젝트의 솔루션 탐색기에서 소스파일 우마우스 클릭하여 추가 -> 기존항목 클릭하여 CChartViewer.cpp 를 선택한다.
솔루션 탐색기에서 헤더파일 우마우스클릭 추가 -> 기존항목 클릭 하여 CChartViewer.h 선택한다.




위와같이 2개 파일 추가후 클래스 뷰에 클래스 CChartViewer 가 들어와 있음을 확인할 수 있다.
- 클래스 CChartViewer 는 MFC 클래스 CStatic 이 베이스클래스 임을 알 수 있다. 실제활용시 우리 프로젝트에서는 도구상자에서 Picutre Control (CStatic임) 을 배치하고 Picture Control을 CChartViewer  로 받아서 사용하게된다.




3. 프로젝트에서 ChartDirector DLL implicit linking 처리.
아래 구문의 #pragma comment .. 가 implicit linking 처리되는 것.
헤더파일은 #pragma..  와 동일 장소일 필요없고 클래스 CChartViewer 를 활용하는 곳에서 포함한다.


#pragma comment(lib,"chartdir60.lib")  // DLL Implicit linking


#include "ChartViewer.h"  //
  

 

 

 

3. 프로젝트에 Picture Control 배치

  ChartDirector 는 Picutre Control 을 이용하여 챠트를 표현하게 되므로 우리 프로젝트에서 이를 포함시키고 앞의 설정에서 추가시켜둔 클래스  CChartViewer 와 연결시키는 처리 해줘야 한다.


 
1. Picture Control 배치.
- 개발중 VC++ 프로젝트의  도구상자에서 Picture Control  배치한다(아래그림)


 위 배치된 상태에서 Picture Control 설정에서 Type 을 Bitmap 으로 선택한다.


2. Picture Control 설정
배치된 Picture Control 우마우스클릭하여 변수추가 클릭한다(아래 그림).



변수설정창에서(아래 그림), 변수형식을 CChartViewer 로하고  변수이름 기록한다.



요약 : 우리 프로젝트에서  ChartDirector 에서 생성된 챠트를 Picture Control (클래스 CChartView 타입의 "m_ChartViewer" 로 접근가능한) 에 표현 할 수 있는 상태까지 달성함.


   

 

 

 

챠트 코딩 전체흐름.

 
ChartDirector DLL 이용하여 챠트 표현하는 코딩 전체 흐름.
 
1. 챠트 개체 생성한다. 예: XYChart * c = new XYChart(200,200); //초기화 전달값은 픽셀단위의 챠트크기임.
 
2. 상기1의 챠트개체에 plotarea 설정한다. 예; c->setPlotArea(20,20,180,180); // 20,20시작좌표, 180,180 width,height
 
3. 챠트개체에 데이터를 전달하여 그린다. 예; c->addLineLayer(DoubleArray(data,size of data));
 
4. 그려진 챠트를 표현한다. m_ChartViewer.setChart(c); // Picture Control  에 이미지 표현된다.
 
   

 

 

 

 

상세 활용정보. - ChartDirector 데이터 표현시 X축.

 
 
1. 챠트에 표현되는 각 데이터 포인터의 x 값은 지정하지 않아도 된다.
- x값을 지정하지 않은 경우 Y값 배열의 인덱스(0,1,2,3,...) 가 X값으로 처리되고 데이터 표현시 x 축으로는 동일한 간격을 가진것으로 표현된다.
 
2. 챠트에 표현된 데이터 포인트들의 x축 값을 지정하기 위해서는 Layer.setXData 혹은 Layer.setXData2 함수를 이용하여 지정한다.
- x값을 지정하는 경우엔 Axis.setLabels , Axis.setLabes2 함수는 사용하면 안된다.
 
3. X축 스케일 설정은 Axis.serLinearScale, Axis.setLogScale, Axis.setDataScale 함수를 이용하여 설정가능하다.
 
Layer.setXData
void setXData(DoubleArray xData);
- 챠트 Layer 에 지정된 Y값 배열의 인덱스에 대응하는 x값 지정하는것.
- 1개의 Layer 당 1개의 x 값 배열만 지정가능. 1개의 Layer 에 여러 개의 Y dataset이 있는 경우, 모든 Y dataset 은 지정된 1개의 x값 배열이 대응됨. 다른 X 값들이 지정되어야 한다면 Layer 를 추가하고 추가된 Layer 에 Y dataset 과 X dataset을 별도로 지정해야한다.
 
   

 

 

ChartDirector  마우스이벤트 핸들링.

 

forum 

 

If you are trying the ChartDirector MFC samle code (in the "mfcdemo" subdirectory), it contains examples on how to handle mouse messages.

The sample code uses a CChartViewer control, which is a derived class of the MFC CStatic control. The source code of CChartViewer is included in the sample code.

Basically, handle mouse messages for CChartViewer is the same as handling mouse messages in the standard MFC CStatic control. ChartDirector has not changed the standard MFC mouse messages. For example, to detect mouse clicks, simply listens to the BN_CLICK message, the same as the BN_CLICK message in other MFC CStatic controls.

If you want to detect if the user has clicked on any data point on the chart, after your recieve the mouse click, you may use the ImageMapHandler to check the user is clicking on a data point. This is the method used in all our sample code.

For example, a typical code may be like:

//the BN_CLICK handler for the CChartViewer control
void CZoomscrolldemoDlg::OnChartViewer_Click()
{
    ImageMapHandler *handler = m_ChartViewer.getImageMapHandler();
    if (0 != handler)
    {
        //
        // Query the ImageMapHandler to see if the mouse is on a clickable hot spot. We
        // consider the hot spot as clickable if its href ("path") parameter is not empty.
        //
        const char *path = handler->getValue("path");
        if ((0 != path) && (0 != *path))
        {
            // In this sample code, we just show all hot spot parameters.
            CHotSpotDlg hs;
            hs.SetData(handler);
            hs.DoModal();
        }
    }
}

 

 

 본 글이 포함된 상위 정리 장소.


 Visual Studio/VC++/C/C# 활용정리 -> http://igotit.tistory.com/11

 

 

///553.

 

 

댓글



 

비트코인




암호화폐       외환/나스닥/골드         암호화폐/외환/나스닥/골드
     
현물 |선물 인버스 |선물 USDT       전략매니저(카피트레이딩)         프랍 트레이더 온라인 지원가능. MT4,MT5