|
메일 답변도 빨리 해 주셨는데 정말 고맙습니다.
태선님께서 말씀하신 것과 같이 저널에서 같이 제공하는 소스 파일을 컴파일 해보니
정말 잘 되더군요. 그래서 현재 프로그램에 적용하려고 했던 것입니다.
STRICT를 옵션에 넣어주면 기존 HBRUSH와 HPEN을 이용하려고 사용한
SelectObject에서 에러가 나더군요.
님께서 말씀하신 것과 같이 자료실에 있는 새로운 include파일을 한번 이용해 보죠~
잘 됐으면 좋겠습니다.
생각처럼 쉽게 되지는 않네요.
다시한번 답변 감사합니다.
김태선 님이 쓰신 글 :
: 원래 GDI+는 말그대로 GDI를 쓰면서 GDI+를 같이 쓰는 것입니다.
: 밑에 과정은 잘된 것 같네요. 제일 좋은 자료는 C++빌더 저널에 있는 자료입니다.
: STRICT는 꼭 Option에 넣어주어야 합니다.
: 내부 소스를 살펴보진 않아서 정확한 역할은 모릅니다만,
: 이건 GDI+를 위한 조건 컴파일을 조정해주므로 반드시 넣어야 제대로된 컴파일을 합니다.
: 만일, 에러가 난다면 자료실에 있는 GDI+ 파일들 받아서 그것으로 컴파일 해보시는게 어떨까요.
: 저는 지금 잘 쓰고 있습니다.
:
: 그럼..
:
: 박상훈 님이 쓰신 글 :
: : 안녕하세요.
: : 이번에 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를 설정해 줘야
: : 한다고 써 있습니다.
: :
: : 글이 정말 기네요. 끝까지 읽어 주셔서 고맙니다.
: : 혹시 내용이 이해가 되지 않으시면 리플남겨주세요. 답변을 남겨주시면 정말 감사~
|