الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

لماذا لم يعمل GDI+ مع Win32

مغلق
بدأه egy_soft في 6 مايو 2005 · 10 رد · 878 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

قمت بكتابة هذا الكود

#include <gdiplus.h>    // Base include
using namespace Gdiplus;
#pragma comment(lib, "gdiplus.lib")	// The GDI+ binary

فى مشروع مبنى على Win32 فقط

حتى أستطيع التعامل مع GDI+

فلماذا عند عمل بناء للمشروع يعطينى أخطاء كثيرة و عند إستعراض هذة الأخطاء أجدهها فى ملفات الـ Header الخاصة بالـ GDI+

علماً بأن عند إستخدامى لمكتبة MFC لا يحدث أى مشاكل

فهل مكتبة GDI+ تتعامل فقط مع MFC

شكراً

أحمد

#2

عندي نفس المشكله بس مش مع الـ GDI مع الـ WinSock المهم حليتها بأنه أضع الـ #include "winsock2.h" في البداية أول حاجة، وكل الدوال حقتي وضعتها في ملف main.cpp

ثانياً هذه المشكله غير موجوده في الـ bloodshed dev c++

مشكله عجيـيـيــيـــيـبه جدااااااااااًًً

تم تعديل هذه المشاركة بواسطة v1r05 في 6 مايو 2005 في 18:49

#3

انا استخدم معظم دوال gdi من الملف الرأسي

#include"windows.h"

وفيه كل ما اريد من الدوال .. جرب تستخدمه و اذا طلع اي خطا ارفق الملف ورح نشوف ..

اما بالنسبة لمشكلتك يا اخ v1r05 فهي سهلة وكما قلت استخدم الملف الرأسي WinSock

لان دوال الشبكات توجد بذلك الملف لذا لابد تربطها .. وايضا الملف الرأسي لابد تربطه مع WinSock اذا استخدمت احد دوال الشبكة.. المشكلة ماهي غريبة :unsure:

تم تعديل هذه المشاركة بواسطة الشـمري في 6 مايو 2005 في 21:09

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#4

يا أخ الشـمري علشان أستخدم دوال GDI+ يجب الربط بملف الهيدر gdiplus.h

لأن دوال GDI+ لا توجد فى windows.h بل يوجد فقط دول GDI

لكن أجد المشكلة كما ذكرت فما الحل؟

#5

اه .... عفوا .. عفوا ... والله يا اخي ماانتبهت لـ + ... تقصد gdi+

ما جربت احد الدوال .. لكن السبب على ما اعتقد اما انه لابد ان تربط معها مكتبة lib او ملف الهيدر غير موجود .. على العموم سابحث في msdn واذا لقيت شي علمتك .. .

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#6

اظني وجدت الحل ..

اربط مشروعك مع مكتبة gdiplus وذلك باضافة هذا السطر عند الانكلود .. مثلا

#pragma comment(lib,"gdiplus.lib")
#include <gdiplus.h>

طبعا تاكد ان الملفgdiplus.lib و الملف gdiplus.h موجودة لديك لان هذه الملفات لاتأتي مع المصرف انا لابد من تحميلها واضافتها ..

ان وجدت مثال بسيط سارفقه ....

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#7

وجدت كود يبين كيفية استخدام gdiplus لكن للاسف ما اشتغل لانه يطلب ملفات رأسية وبحثت عنهاووجدتها مع المكتبة وملف dll من موقع

codeproject ولكن عندما شغلت المثال صارت اخطاء .. ويبدو ان الملفات ناقصة على العموم من يملك الملفات كاملة ياليت يدلنا ..

هذا مثال بسيط لعله يشتغل عندك ...

#define UNICODE
#include <windows.h>
#include <gdiplus.h>
using namespace Gdiplus;
#pragma comment(lib,"gdiplus.lib")

VOID OnPaint(HDC hdc)
{
   Graphics graphics(hdc);
   Pen      pen(Color(255, 0, 0, 255));
   graphics.DrawLine(&pen, 0, 0, 200, 100);
}

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PSTR, INT iCmdShow)
{
   HWND                hWnd;
   MSG                 msg;
   WNDCLASS            wndClass;
   GdiplusStartupInput gdiplusStartupInput;
   ULONG_PTR           gdiplusToken;
   
   // Initialize GDI+.
   GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
   
   wndClass.style          = CS_HREDRAW | CS_VREDRAW;
   wndClass.lpfnWndProc    = WndProc;
   wndClass.cbClsExtra     = 0;
   wndClass.cbWndExtra     = 0;
   wndClass.hInstance      = hInstance;
   wndClass.hIcon          = LoadIcon(NULL, IDI_APPLICATION);
   wndClass.hCursor        = LoadCursor(NULL, IDC_ARROW);
   wndClass.hbrBackground  = (HBRUSH)GetStockObject(WHITE_BRUSH);
   wndClass.lpszMenuName   = NULL;
   wndClass.lpszClassName  = TEXT("GettingStarted");
   
   RegisterClass(&wndClass);
   
   hWnd = CreateWindow(
      TEXT("GettingStarted"),   // window class name
      TEXT("Getting Started"),  // window caption
      WS_OVERLAPPEDWINDOW,      // window style
      CW_USEDEFAULT,            // initial x position
      CW_USEDEFAULT,            // initial y position
      CW_USEDEFAULT,            // initial x size
      CW_USEDEFAULT,            // initial y size
      NULL,                     // parent window handle
      NULL,                     // window menu handle
      hInstance,                // program instance handle
      NULL);                    // creation parameters
   
   ShowWindow(hWnd, iCmdShow);
   UpdateWindow(hWnd);
   
   while(GetMessage(&msg, NULL, 0, 0))
   {
      TranslateMessage(&msg);
      DispatchMessage(&msg);
   }
   
   GdiplusShutdown(gdiplusToken);
   return msg.wParam;
}  // WinMain

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, 
   WPARAM wParam, LPARAM lParam)
{
   HDC          hdc;
   PAINTSTRUCT  ps;
   
   switch(message)
   {
   case WM_PAINT:
      hdc = BeginPaint(hWnd, &ps);
      OnPaint(hdc);
      EndPaint(hWnd, &ps);
      return 0;
   case WM_DESTROY:
      PostQuitMessage(0);
      return 0;
   default:
      return DefWindowProc(hWnd, message, wParam, lParam);
   }
} // WndProc

------------------------------------

تم تعديل هذه المشاركة بواسطة الشـمري في 8 مايو 2005 في 23:28

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#8

أنا عندى VC++ 2003 و الملفات موجودة بالفعل مع SDK

و قمت بعملية الربط و مفيش فايدة

ظهر أخطاء كثيرة جداً

بس عند العمل مع مكتبة MFC لا يحدث أى مشاكل و أستطيع التعامل مع GDI+

إذاً ما الذى ينقص حتى يتم العمل على Win32 فقط بدون مكتبة MFC

#10

إننى مازلت أنتظر أصحاب الخبرة :rolleyes:

#11

مازلت أنتظر :rolleyes:

هذا الموضوع مغلق.

مواضيع مشابهة