Re: Gdi+ С++Builder
От: Аноним  
Дата: 20.04.06 09:15
Оценка:
Здравствуйте, Mihay, Вы писали:

M>Здравтвуйте!

M>Сколько лазил по форуму не нашел ответа на свой вопрос! Так что прошу помочь!
M>У меня была проблема с подключением Gdi+ к С++ Builder. Но мне посказали как это сделать (ниже приведен пример подключения). Также посоветавали в GdiplusGraphics.h сменить код в конструкторе Graphics(IN HWND hwnd, IN BOOL icm = FALSE) на Graphics(IN HWND hwnd, IN BOOL icm/* = FALSE*/), т.е убираем FALSE. Теперь файл комплируется, видает ошибки при линкеровке, например:

M>[Linker Error] Unresolved external 'GdiplusStartup' referenced from D:\WINSHOW\UNIT1.OBJ

M>[Linker Error] Unresolved external 'GdiplusShutdown' referenced from D:\WINSHOW\UNIT1.OBJ
M>[Linker Error] Unresolved external 'GdipFree' referenced from D:\WINSHOW\UNIT1.OBJ
M>[Linker Error] Unresolved external 'GdipDeleteGraphics' referenced from D:\WINSHOW\UNIT1.OBJ
M>[Linker Error] Unresolved external 'GdipCreateFromHDC' referenced from D:\WINSHOW\UNIT1.OBJ

M>Вот сам код:



M>#pragma hdrstop

M>#include <vcl.h>
M>#include <windows.h>

M>#include <algorithm>

M>using namespace std;
M>#include <GdiPlus.h>

M>using namespace Gdiplus;


M>static ULONG_PTR gdiplusToken;


M>void GDIppStartup()

M>{
M>GdiplusStartupInput gdiplusStartupInput;
M>// Initialize GDI+.
M>GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
M>}


M>#pragma argsused


M>HINSTANCE hin;


M>extern "C"

M>{
M>__declspec(dllexport) int Window_1(HINSTANCE hinstDLL);

M>}



M>void OnPaint(HDC hdc, const RECT& rc);

M>LRESULT CALLBACK WinProc(HWND, UINT, WPARAM, LPARAM);
M>ATOM winclass();
M>HWND makeexamplewin();
M>void messageprocess();



M>void OnPaint(HDC hdc, const RECT& rc)

M>{
M>WCHAR welcome[] = L"Welcome GDI+ !";
M>Gdiplus::Graphics g(hdc);
M>// ----------------------------------------------------------------
M>// и так далее (я не привожу полностью код, тк. это будет нечитаемо)
M>}


M>LRESULT CALLBACK WinProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)

M>{
M>switch (msg)
M>{
M>case WM_DESTROY:
M>PostQuitMessage(0);
M>break;
M>case WM_PAINT:
M>RECT rc;
M>HDC hdc;
M>PAINTSTRUCT ps;
M>GetClientRect(hwnd, &rc);
M>hdc = BeginPaint(hwnd, &ps);
M>OnPaint(hdc, rc);
M>EndPaint(hwnd, &ps);
M>break;

M>default:

M>return DefWindowProc(hwnd, msg, wParam, lParam);
M>}
M>return DefWindowProc(hwnd, msg, wParam, lParam);
M>}

M>ATOM winclass()

M>{
M>WNDCLASSEX winexam1;
M>winexam1.cbSize = sizeof(WNDCLASSEX);
M>winexam1.style = CS_OWNDC|CS_HREDRAW|CS_VREDRAW;
M>winexam1.lpfnWndProc = WinProc;
M>winexam1.cbClsExtra = 0;
M>winexam1.cbWndExtra = 0;
M>winexam1.hInstance = hin;
M>winexam1.hIcon = LoadIcon(hin, IDI_APPLICATION);
M>winexam1.hCursor = LoadCursor(hin, IDC_APPSTARTING);
M>winexam1.hbrBackground = HBRUSH(COLOR_WINDOW+1);
M>winexam1.lpszMenuName = NULL;
M>winexam1.lpszClassName = "exemplewinclass";
M>winexam1.hIconSm = LoadCursor(hin, IDC_APPSTARTING);
M>return RegisterClassEx(&winexam1);
M>}

M>HWND makeexamplewin()

M>{ //CW_USEDEFAULT
M>return CreateWindowEx(WS_EX_OVERLAPPEDWINDOW, "exemplewinclass",
M>"Îêíî âèçóàëèçàöèè", WS_OVERLAPPEDWINDOW, 100,
M>100, 700, 700, NULL, NULL, hin, NULL);
M>}

M>void messageprocess()

M>{
M>MSG msg;
M>while (GetMessage(&msg, (HWND)NULL, 0, 0))
M>{
M>DispatchMessage(&msg);
M>}
M>}


M>int Window_1(HINSTANCE hinstDLL)

M>{
M>hin = hinstDLL;
M>winclass();
M>HWND winhandler = makeexamplewin();
M>ShowWindow(winhandler, SW_SHOW);
M>messageprocess();
M>return 1;
M>}

M>BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)

M>{
M>GDIppStartup();

M>// --------------------------------------------------

M>здесь тоже убрано
M>// --------------------------------------------------
M>GdiplusShutdown(gdiplusToken);
M>return 1;
M>}

M>Кто знает в чем проблема? Может я чего то не дописал?

Попробую прдеположить — ты lib файл от библиотеки подключил к проекту? (никогда не работал с Gdi+ не знай как там библиотека завется)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.