C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[38144] GDI와 GDI+를 같이 사용하여 프로그래밍을 하신분 계신가요?
박상훈 [] 1828 읽음    2004-11-24 17:56
안녕하세요.
이번에 GDI+에 관한 내용을 포럼에서 본후 프로그램을 수정하려고 합니다.
테스트 도중에 알지 못하는 문제가 발생해서 질문을 올립니다.

혹시 GDI와 GDI+를 같이 사용하여 프로그래밍을 하신분 계신다면, 비슷한 문제를
해결하신 분이 계시면 답변 부탁드립니다.

기존 프로그램은  GDI에서 제공하는 기본 메소드를 이용해서 프로그래밍을 했습니다.
이번에 GDI+를 이용해 보려고 세팅을 했는데 에러가 발생했습니다.
포럼 Resoirces에 올린 GDI+에 관한 저널 혹은 Tip에 올린 글을 보신분이라면
이해하시기 쉽겠네요.

GDI+는 graphics의 개체를 얻어서 수행됩니다. GDI와 좀 틀리게 사용하죠.

밑에 글과 같이 설정을 하고 컴파일을 돌렸습니다. 
-----------------------------------------------------
정성훈.해미 님이 답글(37378번)에서 말씀하신  journal에 보니 자세히 설명되어 있을뿐만 아니라 예제까지 있던데요.
1. gdiplus.h를 #include하고
2. 1을 하면 min과 max 함수부분에서 오류가 나므로 gdiplustypes.h 헤더 파일에서 std::min / std::max로 하든지 Gdiplus namespace 초입에서 using std::min; using std::max로 함. 다시 말해, 이 부분에 있어서 잘못되어 있으므로 헤더 파일을 수정해야 함.
3. STRICT를 정의해주어야 함. 즉, Projects->Options->Directories/Conditionals 탭의 conditional defines 입력상자에 STRICT를 입력. 현재 아래의 E2015 오류는 STRICT가 정의되어 있지 않아서 발생한 것임.
4. using namespace Gdiplus; 또는 Gdiplus namespace의 함수를 사용할 때마다 Gdiplus::를 앞에 붙여줌 또는 필요한 변수나 함수만 using으로 선언해줌.
5. static library를 링크해주어야 함. #pragma link "gdiplus.lib"
6. gdiplus를 사용하려면 GdiplusStartup()을, 사용이 모두 끝나면 GdiplusShutdown()을 해주어야 함.
-----------------------------------------------------

STRICT라는 것을 설정하면 이러한 에러메세지가 나타납니다.

소스 내용은 이렇습니다.
  HBRUSH hOldBrush;
   .
   .
hOldBrush = SelectObject(dc, GetStockObject(NULL_BRUSH));  <-- 여기에서 에러

에러내용: Cannot convert "void *" to "HBRUSH__ *"
HPEN도 같은 에러가 발생하더군요.
GDI+관련 책을 참고 했을 때 GDI와 GDI+를 같이 사용할 수 있고, 방법도 제시되어 있었습니다.
그건 hdc를 어떻게 가져와서 처리하느냐, 또는 graphics개체에서 hdc를 어떻게 얻어서 사용하느냐..뭐 이렇게
핸들을 가져와서 처리하면 된다는 것이었습니다.
사실 GDI+는 GDI위에 있는 Layer와 같기 때문에 상관이 없는 것 같습니다.

옵션에서 STRICT을 제거하면 에러가 나지 않더군요. STRICT가 정확하게 어떤 역활을 하는지도 궁금합니다.
저널에는 STRICT가 VCL에 Default로 되어 있지 않기 때문에 GDI+를 사용하기 위해서는 STRICT를 설정해 줘야
한다고 써 있습니다.

글이 정말 기네요. 끝까지 읽어 주셔서 고맙니다.
혹시 내용이 이해가 되지 않으시면 리플남겨주세요. 답변을 남겨주시면 정말 감사~

+ -

관련 글 리스트
38144 GDI와 GDI+를 같이 사용하여 프로그래밍을 하신분 계신가요? 박상훈 1828 2004/11/24
38150     Re:GDI와 GDI+를 같이 사용하여 프로그래밍을 하신분 계신가요? 김태선 1450 2004/11/25
38151         답변감사합니다. 하지만 안되는군요. leo21c 978 2004/11/25
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.