회사에서 다가올 프로젝트에 쓰여질 그래프 라이브러리를 선택하기 위해, 여러 그래프 라이브러리를 테스트하던 중, 그 중 ChartFX ClientServer 6.2 버전도 포함되어 있었다.

ChartFX ClientServer 6.2는 Visual Studio 6.0을 지원한다고 되어 있었지만.. 어처구니 없게도 샘플 프로그램이라던지.. User Reference Guide에서도 C#과 VB에 대해서만 설명이 되어있을뿐 구할 수가 없었다.

그래서 몸소 삽질해서 그 방법을 체득하는 수 밖에 없었다.

Step 1. 우선 ChartFX ClientServer 6.2를 설치한다.
Step 2. Visual Studio 6.0에서 임의의 프로젝트를 생성한다. (아래 예제에서는 Dialog Base로 만들었다.)
Step 3. 마우스 오른쪽 버튼을 눌러서, Insert ActiveX Control... 을 누른다.


Step 4. Chart Object를 선택하고, OK 버튼을 누른다.


Step 5. 그럼, 아래 그림과 같이 Chart Object가 삽입되었음을 확인할 수 있다.

Step 6. Class Wizard를 통해 삽입된 Chart Object에 변수를 할당(Add Variables)하고자 하면, 다음과 같은 메시지가 나타나게 된다.


Chart Object가 삽입되었는데.. 이 녀석을 제어하기 위해 C++ Wrapper Class를 만들 것이냐고 묻는 내용이다. 확인을 선택한다.

Step 7. 그러면, 다수의 헤더(.h) 파일과 소스(.cpp) 파일들이 생성될 것이라 보여준다. 클래스 이름과 헤더 파일 이름, 소스 파일 이름은 자신의 구미에 맞게 설정할 수 있다.

Step 8.
아래와 같이 Wrapper Class가 생성된 것을 확인할 수 있다.

이 Wrapper Class를 어떻게 사용하였는지는 첨부된 샘플 코드를 통해 분석하기 바란다.














덧붙이는 글
1. 삽입된 Chart Object에서 마우스 오른쪽 버튼을 클릭하여, properties를 실행하면, 그래프의 여러가지 속성들을 설정할 수 있다. 그 중에 우리가 특히 눈여겨 보아야할 속성들은 다음과 같다.

Gallery : 그래프의 모양에 관한 속성이다. (Bar, Line, Pie 등 십수가지의 그래프 형태가 지원된다.)
NSeries: 서브 그래프의 개수에 관한 속성이다.
NValues: 그래프의 데이터 개수에 관한 속성이다.

나머지 속성들은 한 번씩 바꿔보고, 변화되는 것을 보면 알 수 있다.

2. 함수들의 쓰임새는 대략 C#이나 VB용 Reference Guide를 보면 알 수 있다. 그러나 제일 곤혹스러운 것은 COD_VALUES나 COD_REALTIME같은 미리 정의된 상수들의 값을 알 수 없다는 사실이다. C#이나 VB에서는 이 녀석들을 enum 타입으로 정의한 것 같은데, C++에서는 함수의 파라미터로 long 타입을 받아, 결국 이 enum 타입을 알아내기 위해 C# 프로그램에서 다음과 같은 방법을 써서 알아냈다.

MessageBox.Show(Convert.ToInt32(COD.COD_AddPoints).ToString());

덧붙여, 필요에 의해 내가 알아낸 enum 타입들을 다음과 같이 재정의해서 사용하였다.
#define COD_VALUES 1
#define COD_REALTIME 16
#define COD_ADDPOINTS 128
#define COD_ALLOCHIDDEN 512
#define COD_REMOVE 2048
#define COD_SCROLL_REGEND 8192

#define CHART_TYPE_NOLEGINVALIDATE 8

#define REALTIMESETTING_STYLE_LOOPPOS 1
#define REALTIMESETTING_STYLE_NOWAITARROW 2

샘플프로그램 다운로드 - 귀차니즘에 의해, 주석이 별로 없지만.. 이해하시는데는 큰 무리가 없을 겁니다. 그리고, Trail 버전으로 테스트한 것이라 배포가 불가능하여, 샘플 프로그램 자체는 실행되지 않습니다. 단지, 코드 참조만으로 사용하시기 바랍니다.

ChartFX에 대한 보다 많은 정보:
http://www.softwarefx.co.kr

크리에이티브 커먼즈 라이센스
Creative Commons License

Trackback

Trackback Address :: http://www.nohungry.net/tt1/trackback/90

Comments

  1. acaran 2007/06/28 23:05

    흐음.. 언제나 신기하는걸 하는구려~ 또 한수 배우고 가오~

    perm. |  mod/del. |  reply.
    • NOhungry 2007/06/29 09:28

      ㅎㅎ 신기하기는.. 그나저나 우리 언제 한 번 보는거요? 같은 서울 땅에 살면서 너무 보기 힘든 것 아닌가?

  2. 2007/07/02 19:50

    마침 유용한 팁이구려..
    생물과 노가다를 이것으로 줄일수 있을 듯.. ㅎㅎ ^^

    perm. |  mod/del. |  reply.
    • NOhungry 2007/07/03 12:14

      역시 생물과의 포스란?ㄷㄷㄷ 그나저나 그래프를 그려야 하나?ㅎ 그럼 갠적으로 ProEssential도 괜찮다~ 자세한건 갠적으로 물어보도록.ㅋ

  3. 비밀방문자 2009/05/22 16:45

    관리자만 볼 수 있는 댓글입니다.

    perm. |  mod/del. |  reply.

What's on your mind?

댓글 입력 폼
[로그인][오픈아이디란?]

                                            [고뇌하는 자의 슬프고도 아름다운 뒷모습]

근 이번 주 초부터 DirectShow 때문에 머리에 쥐가 내렸다.
첨에 아무 생각없이 Visual Studio 2005를 기반으로 DirectShow 일을 진행했다.

#1. 왜 내 허락도 없이 그랬니?
첨엔 Visual Studio 2005를 기반으로 DirectShow 프로그래밍을 했다.
분명, 내 기억이 맞다면, DirectShow로 프로그래밍을 하려면.. DirectX SDK를 깔면 되었는데...
DirectX SDK 9.0c를 깔았음에도 불구하고.. Compile 조차 안되는게 아닌가?!!!!

첨엔 DirectX를 지우고 다시 깔아도 봤다.. 그런데 알고보니...
DirectX SDK 8.1 이후 버젼부터는 DirectShow SDK가 Microsoft Platform SDK로 포함되었단다..
"왜!! 내 허락도 없이 그냥 바꾸냐고!!!"

교훈: 항상 최신 정보에 익숙하도록 하자.. 그러나, 그러기엔 최신 정보는 너무나 빨리 쏟아진다.

#2. 왜왜왜!!!!
한참 Visual Studio 2005에서 지시 받은 대로 DirectShow Wrapper Library를 구현하고 있었다.
부장님 왈, "Visual Studio 6.0에 Compatible하게 맹글어."
"헉!!!!-ㅁ-"..

지금까지 하던 모든 행위들을 접고... 다시 시작했다.
Visual Studio 6.0으로 예제프로그램부터 돌려봤다. 아.. 아니나다를까 무수하게 쏟아지는... 컴파일
에러들.. 분명! 2005랑 똑같은 헤더 파일들을 include하고 Lib 파일들을 link 했음에도...ㅠㅠ

#3. 나를 위한 해결책들... 그리고 누군가를 위해서도...
예전에 내가 포스팅해둔 C#에서 Cross Thread 문제를 해결하는 방법을.. 그 후로 5개월 가량 지난 시점에서 내가 다시 만나게 되었다. 그러나.. 나의 이 한심한 기억 용량은 해결책을 이미 지워버린지 오래였다. 난 그 때 내가 그 때의 귀차니즘을 이겨내고 포스팅을 해둔 내가 얼마나 고마웠는지 모른다.

그래서 지금 이렇게 해결책을 다시금 쓴다.

(1) Tools - Option - Directory - Include에 젤 상위부터...
DirectX SDK의 include 경로, Platform SDK의 include 경로, Platform SDK의 Common 경로, Platform SDK의 Baseclass 경로를 추가한다. 그 이후에 원래부터 있던 include 경로들을 써준다. 꼭꼭!
(주: Platform SDK의 Common과 Baseclass의 경로는 Platform SDK의 버젼마다 조금씩 다르겠지만, Samples - Multimedia - DirectShow 아래에 존재한다. 참고로 난 Microsoft Platform SDK for Windows Server 2003 R2 버젼을 사용했다. Windows Server 2003 R2라고 하지만 XP Professional에서도 잘 돌아간다.)

(2) Tools - Option - Directory - Lib에 젤 상위부터...
DirectX SDK의 Lib 경로, Platform SDK의 Lib 경로를 추가해준다.

(3) 추가해야할 Include 파일들...
필히 다음과 같은 순서대로 Include 하자.
atlbase.h, windows.h, dshow.h, strsafe.h, iostream.h : 참고로 이 헤더 파일 순서는 DirectShow Sample들 중 PlayCap을 기준으로 쓴 것이다. 하지만, 대략 위와 같은 순서가 맞다.

(4) 추가해야할 Lib 파일들...
잡다한 것은 지워도 좋다.
하지만 필히 다음과 같은 순서대로.. "strmiids.h, strmbase.lib, ole32.lib, uuid.lib, gdi32.lib"

(5) CoInitializeEX Error 문제는...
Project - Setting - C/C++ - Prepeocessor Definitions에 _WIN32_DCOM를 추가해주면 해결 가능하다.

(6) strmiids.lib(strmiids.obj) : fatal error LNK1103: debugging information corrupt; recompile module
이 문제는 사실 상 6.0에선 해결이 불가능하다고 한다. 뭐 꼼수가 있다고 하는데.. 매우 복잡한 관계로 해결이 힘들고, 이는 Visual Studio 7.0 이상.. (다시말하면 Visual Studio .NET 2003 이상)에선 괜찮다고 한다.

해결방법은.. Release 모드로 하면 된다는 것.. Debugging 하기 힘들다는 단점이 있지만.. 어쩔 수 없지 않은가...-ㅁ-

(7) 추가적인 문제...
Visual Studio 6.0에서 DWORD_PTR, LONG_PTR과 같은 타입을 찾을 수 없다고 나올 때.. 에러나는 헤더 파일을 열어 각각을 DWORD*, LONG* 로 바꾼 후, 저장하면 해결된다.-ㅁ-;;
크리에이티브 커먼즈 라이센스
Creative Commons License

Trackback

Trackback Address :: http://www.nohungry.net/tt1/trackback/84

  1. Subject : 시작부터 난관. DirectX SDK 컴파일 삽질

    Tracked from Sylphid Wave 2007/06/18 02:31 del.

    2007.06.16 #1 DirectShow를 쓰기 위한 윈도 프로그래밍에서 dshow.h를 include하게 되는 데, 이 파일은 DirectX 9.0c SDK에 포함되어 있지 않다. 그걸 모른채 설치한 디렉토리 내의 Include, Lib를 열심히 Visual Stu..

Comments

  1. acaran 2007/05/25 20:36

    학생, 그래도 온종일 프로그래밍으로만 머리를 쓸수 있다는건 행복한 일이네-_-

    난 요즘 프로그래밍 작업만 하고 싶은데, 정작 해야할건 그게 아닌게 더 많아서 괴롭소-_-

    perm. |  mod/del. |  reply.
  2. noname 2007/06/16 02:27

    #1에 대해서 감사합니다. 한참 찾다가 아마 이렇게 된 거 아닌가? 하고 마지막 쇄기를 박으려는 참에 검색하다가 이곳에서 해답을 찾고 갑니다.

    perm. |  mod/del. |  reply.
  3. semi 2007/06/16 16:38

    저 뒷모습 아름답네요...ㅎㅎ

    perm. |  mod/del. |  reply.
    • NOhungry 2007/06/18 15:53

      어라~?ㅎ
      부장님께 해외로 어학연수 갔다는 소식은 들었습니다만..
      어떻게 잘 지내고 계신지 모르겠네요..^^

      날씨도 더운데 건강 조심하시고, 네이티브 스피커가 되시길
      바래요.ㅎ

  4. wafe 2007/06/18 13:40

    트랙백이 잘 안돼서 수동 트랙백입니다. ^^;

    http://wafe.kr/entry/DirectX-SDK-DirectShow-Platform-SDK

    perm. |  mod/del. |  reply.
    • NOhungry 2007/06/18 15:52

      찾아주셔서 감사합니다..^^
      저는 트랙백이 날아가더군요.ㅎ 그래서 날렸습니당.

  5. elkiss 2007/10/10 10:25

    전에 위내용 퍼간사람입니다. 아무말없이 퍼가서 죄송합니다.
    어디에 멘트를 남겨야할지 몰라서요.
    앞으로도 종종들르겠습니다. 좋은내용감사합니다.

    perm. |  mod/del. |  reply.
    • NOhungry 2007/10/10 22:21

      아.. 그 분 이셨구나.

      글 내용은 퍼가는건 괜찮습니다만.. 제 사진이 떠서 깜짝 놀랐었죠. (물론, 얼굴은 나오지 않지만-ㅁ-)

      암튼, 방문해주셔서 감사합니다^^

  6. KID 2007/10/16 20:02

    헛.. 나도 예전에 할땐 잘 됬던거 같은데..
    #1과 같은 이유로.. 완전 우울해하고 있다가.. 검색했는데..-_-;;;
    니 블로그가 나와서 놀랬다..
    암튼 뭐.. 나도 해결했다. 쿠쿡..

    perm. |  mod/del. |  reply.
  7. 마틴 2009/06/13 11:10

    DirectX SDK 관련 검색하다가 우연히 들렀다 갑니다... 라고 답글 쓰려는데,
    위너 테익스 잇 올이라는 블로그 이름이 눈에 띄어,
    히바히바가 예전에 이 이름을 썼었지 하고 있었는데,
    글쓴이가 노헝그리라... 그때까지만해도 참 신기하다고 생각했는데,
    답글들을 보니......

    용민아... 오래간만이다. ^^*

    perm. |  mod/del. |  reply.

What's on your mind?

댓글 입력 폼
[로그인][오픈아이디란?]