PDA

View Full Version : برنامه نویسی گرافیک در C و ++C



Nima_NF
یک شنبه 08 اردیبهشت 1387, 00:22 صبح
با توجه به سوالات مکرر برخی از کاربران و خصوصا دانشجویان جدید، تصمیم گرفته شد تا توضیحاتی درباره روش های نوشتن برنامه های گرافیکی در زبان C++/C بیان شود و برخی از تاپیک های پرداخته شده به این موضوع نیز معرفی شوند.


مقدمه:
اکنون بیش از 15 سال از انتشار کامپایلرهایی همچون ++Turbo C برای توسعه در محیط DOS می گذرد و در طی این سال ها امکانات و کتابخانه های بسیاری به زبان های C و ++C اضافه شده است از جمله STL در ++C که بسیاری از الگوریتم های معروف و پرکاربرد مانند پشته ، لیست پیوندی ،انواع صف ، انواع مرتب سازی ها و غیره را بدون نیاز به پیاده سازی در اختیار شما قرار می دهد که برای بهره مندی از این امکانات می بایست از کامپایلرهای جدید و به روز 32/64 بیتی استفاده کرد، از جمله:
++Visual C و ++minGW/Dev C (کد باز و رایگان) و C++Builder و ...

نکته: امروزه در محیط های آموزشی سراسر دنیا از نسخه های رایگان این کامپایلرها و یا کامپایلرهای کد باز به عنوان جایگزینی برای ++Turbo C استفاده می کنند.

سوال- آیا می توان از توابع گرافیکی قدیمی graphics.h در محیط های جدید برنامه نویسی مانند Visual C++ /Borland C++builder / gcc / mingw و ... استفاده کرد؟

خیر، این توابع از جمله توابع 16 بیتی قدیمی و منسوخ شده بورلند می باشند که برخلاف تفکر برخی از نوآموزان، جزئی از این زبان نیست.

لذا برای توسعه های جدید، چندین راه وجود دارد:

روش 1) اولین و بهترین روش برای کار با گرافیک مخصوصا برای دانشجویان، روی آوردن به نوشتن برنامه های غیر کنسولی می باشد (با زبان C++/C) همانند سایر برنامه های ویندوز اما فقط در سطح ساده و برای نمایش اشکال گرافیکی و البته بدون داخل شدن در مباحث های پیشرفته واسط کاربری. (به این شکل که پنجره ای ایجاد نموده و در آن شروع به رسم اشکال گرافیکی کنید)

در ویندوز دوستان می توانند با توابع گرافیکی GDI و +GDI از طریق شیوه های win32 و MFC با کامپایلرهای ++VC و ++DevC و یا از طریق VCL با کامپایلر C++Builder این کار را انجام دهند.
توجه کنید که با مطالعه بخش گرافیکی یکی از لینک های زیر در مدتی بین دو هفته تا یک ماه قادر به ایجاد برنامه های گرافیکی، بازی ساده گرافیکی و همین طور کار با mouse و keyboard خواهید بود:

برای win32 (سطح پایین ،اما یادگیری با مراجع زیر بسیار راحت می باشد):
http://www.functionx.com/win32/index.htm
http://www.winprog.org/tutorial/

برای MFC (کمی ساده تر از مورد فوق)
http://www.functionx.com/visualc (http://www.functionx.com/visualc/)


برای VCL

http://www.functionx.com/bcb/index.htm


-------------------------------
روش 2) استفاده از توابع کنسولی مایکروسافت برای command prompt ویندوز ، لیست این توابع در لینک زیر موجود می باشد:
لیست توابع کنسولی مایکروسافت (http://msdn2.microsoft.com/en-us/library/ms682073%28VS.85%29.aspx)

در این روش شما باید معادل توابع graphics.h را که در محیط Turbo C و کامپایلر های سری قدیم بورلند وجود داشت را با توابع 32 بیتی کنسولی مایکروسافت پیاده سازی کنید، به عنوان مثال برای gotoxy و clrscr لینک زیر را مشاهده کنید:
معادل توابعی مثل gotoxy و clrscr در (http://barnamenevis.org/forum/showthread.php?t=92264)++ (http://barnamenevis.org/forum/showthread.php?t=92264)VC (http://barnamenevis.org/forum/showthread.php?t=92264)

توجه به این مورد ضروری می باشد که محیط command prompt ویندوز محیطی کاملا متفاوت از محیط 16 بیتی DOS می باشد و نباید انتظار داشته باشید که تمامی امکانات 16 بیتی قدیمی توسط این کامپایلرها به همان شکل در اختیار شما قرار گیرد، از جمله رسم اشیاء گرافیکی همانند قبل در این روش امکان پذیر نیست و جداول و اشکال ساده می بایست توسط خطوط و کارکترها پیاده سازی شوند، اما این قابلیت در اختیار شما قرار می گیرد که بتوانید از اکثر توابع پیشرفته سیستم عامل در محیط کنسول استفاده کنید.

لینک زیر شامل مثال ها و آموزش های کامل در زمینه استفاده از همین توابع کنسولی win32 می باشد، پس قبل از هر کاری ابتدا نگاهی به نمونه های پیاده سازی شده در این سایت بیاندازید:
http://www.adrianxw.dk/SoftwareSite/index.html

-------------------------------
روش 3) روش ساده تر از مورد قبل، استفاده از کتابخانه های 32 بیتی آماده غیر استاندارد و معادل graphic.h می باشد که برخی از آن ها open source (کد باز) نیز می باشد، مانند WinBGI که می توانید فایل های آن را از صفحه زیر دانلود کرده و استفاده کنید:
فایل های مربوط به WinBGI به همراه یک نمونه مثال (http://csci.biola.edu/csci105/using_winbgi.html)

توجه کنید که این کتابخانه از توابع گرافیکی win32 استفاده می کند و برای نمایش آن ها پنجره سیاه دیگری همانند کنسول باز می شود که قادر هستید در آن اشکال گرافیکی را همانند برنامه های ویندوز به سادگی برنامه های گرافیکی Turbo C رسم کنید.

-------------------------------
روش 4) آخرین و بدترین روش برگشتن به محیط قدیمی ++Turbo C و استفاده از همان توابع گرافیکی graphics.h می باشد که در برخی کتاب ها از جمله کتاب C جعفرنژاد قومی به آن پرداخته شده است. (البته امیدوارم به عنوان یک دانشجو و یا حتی کسی که می خواهد در حد پروژه های ساده با این زبان آشنا شود این گزینه را انتخاب نکنید)

از جمله تاپیک های پرداخته شده به این مورد که می توانید نمونه کدهایی برای Turbo C پیدا کنید:
برنامه هایی به زبان C (http://barnamenevis.org/forum/showthread.php?t=66600)
باز کردن یه فایل BMP در TC تحت داس (http://barnamenevis.org/forum/showthread.php?t=88524)
کار گرافیکی با C یا ++C (http://barnamenevis.org/forum/showthread.php?t=98789)
یجاد منو(menu) گرافیکی در سی (http://barnamenevis.org/forum/showthread.php?t=111041)

مجددا تاکید می کنم به عنوان یک برنامه نویس مورد 4 را فراموش کنید.

موفق باشید

Nima_NF
دوشنبه 17 تیر 1387, 15:29 عصر
برخی از دوستان در مورد سایت هایی برای کار با mouse و keyboard در کنار کار گافیکی سوال کردند که می توانند از نمونه کدهای لینک های زیر شروع به یادگیری کنند (ابتدا مطالعه لینک های قرار داده شده در تاپیک قبل برای win32 ضروری است):

Using Mouse Input (http://msdn.microsoft.com/en-us/library/ms645602%28VS.85%29.aspx)
برای یک نمونه خوب حتما Drawing Lines with the Mouse را در لینک فوق مطالعه کنید.

How To Use Win32 API to Draw a Dragging Rectangle on Screen DC (http://support.microsoft.com/kb/q135865/)

Win32 API - Tutorial (http://www.mini.pw.edu.pl/%7Emossakow/materials/presentations/win32.en/index.html)
در لینک فوق نمونه های پیام WM_LBUTTONDOWN و WM_LBUTTONUP را برای پردازش mouse بررسی کند.


سعی می کنم در اولین فرصت یک نمونه کد ساده با توضیحات در همین مورد قرار دهم.

Nima_NF
دوشنبه 17 تیر 1387, 15:40 عصر
کاربرانی که دنبال یک آموزش کامل برای ساختن یک Text Editor حرفه ای مانند Word یا محیط نوشتاری visual studio هستند (از طریق win32 API و ++C ) می توانند از مقاله فوق العاده زیر استفاده کنند که شخصا ارادت خاصی به ایشون و مقالاتشون دارم.

حدود 18 صفحه می باشد و مرحله به مرحله امکانات را به آن اضافه می کند و هر صفحه نیز شامل سورس کد می باشد (پیش نیاز آن آشنایی اولیه با win32 می باشد که در پست اول لینک دو سایت قرار داده شده است):

Design and Implementation of a Win32 Text Editor (http://www.catch22.net/tuts/editor01.asp)

20024

موفق باشید

Nima_NF
دوشنبه 17 تیر 1387, 16:56 عصر
هدف از این آموزش ترسیم اشکال گرافیکی ساده در محیط ویندوز هست.

20026

پیش نیاز این آموزش:
- مطالعه دو لینک آموزشی در پست اول برای آشنایی با مفاهیم ساخت پنجره و پیام ها
- استفاده از کامپایلر visual C++ 2005 یا بالاتر


نحوه انجام:
1) ابتدا به منوی new رفته و یک پروژه از نوع win32 project با نام "rect1" و مقادیر پیش فرض بسازید (دقت کنید که console نباشد).
پروژه با چند فایل ساخته می شود، که ما با فایل rect1.cpp کار داریم.

2) برای رسم یک مربع ساده به این شکل عمل کنید:
در قسمت case و پیام WM_PAINT کار های گرافیکی در قسمت client یا همان قسمت سفید انجام می شود، دقت کنید که کد های گرافیکی باید مابین دو دستور BeginPaint و EndPaint نوشته شوند.

برای شروع مربعی بدون رنگ رسم می کنیم، کد را به شکل زیر تغییر دهید:



case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code here...

Rectangle(hdc, 100, 100, 200, 200); // Empty

EndPaint(hWnd, &ps);
break;


3) حال در کنار آن مربعی با یکی از رنگ های پیش فرض سیستم رسم می کنیم:



case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code here...

Rectangle(hdc, 100, 100, 200, 200); // Empty

SelectObject (hdc, GetStockObject (LTGRAY_BRUSH)) ;
Rectangle(hdc, 300, 100, 400, 200); // Filled by light gray color

EndPaint(hWnd, &ps);
break;

در کد فوق با استفاده از دستور SelectObject یکی از اشیاء را مانند قلم ، مداد ، عکس و غیره را برای رنگ آمیزی و ترسیم می توانید انتخاب کنید. در این مورد ما با استفاده از تابع GetStockObject یکی از قلم های پیش فرض سیستم را انتخاب کردیم که خاکستری روشن هست. (سایر انواع : BLACK_BRUSH، HOLLOW_BRUSH ، WHITE_BRUSH ، BLACK_PEN و ....)




4) برای ساختن یک brush یا قلم دلخواه (با رنگ دلخواه) به این شکل عمل می کنیم:

- ابتدا قلم را در پیام WM_CREATE می سازیم (این پیام را خودتان در بخش case ها اضافه کنید )، هر چیزی که در بخش WM_CREATE نوشته شود در هنگام شروع برنامه قبل از هر چیزی اجرا می شود .

- از تابع CreateSolidBrush و ماکرو RGB برای ساخت قلم و رنگ استفاده می کنیم.

- hbrush از نوع HBRUSH باید قبل از switch تعریف شود و حتما static باشد چون فقط یک مرتبه در شروع برنامه مقدار دهی می شود.

- وقتی خودمان قلمی درست می کنیم باید در انتهای برنامه فضای اختصاص داده شده به آن را آزاد کنیم پس در قسمت WM_DESTROY در هنگام بستن برنامه را فراخوانی DeleteObject می کنیم .

- SelectObject آخر برای این است که همراه پس از انجام رسم ، قلم قبلی که پیش فرض سیستم بود انتخاب و آماده برای سایر موارد رسم بعدی شود.

پس تابع به شکل زیر تغییر داده می شود:



LRESULT CALLBACK WndProc(HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
static HBRUSH hbrush, hbrushOld; // must be static

switch (message)
{
case WM_CREATE:
// Create a red brush
hbrush = CreateSolidBrush(RGB(255, 0, 0));

break;

case WM_COMMAND:
// **... I removed codes ... **
break;

case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code here...

Rectangle(hdc, 100, 100, 200, 200); // Empty

SelectObject (hdc, GetStockObject (LTGRAY_BRUSH)) ;
Rectangle(hdc, 300, 100, 400, 200); // Filled by light gray color

// Select the new brush and draw
hbrushOld = (HBRUSH)SelectObject(hdc, hbrush);
Rectangle(hdc, 500, 100, 600, 200); // Filled by light gray color
SelectObject(hdc, hbrushOld); // select old brush

EndPaint(hWnd, &ps);
break;

case WM_DESTROY:
PostQuitMessage(0);
DeleteObject(hbrush);

break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}

5) سایر توابعی که می توانید از آن ها برای رسم اشکال استفاده کنید:

Ellipse ، Polygon ، RoundRect ، Pie ، Chord ، Arc ، LineTo ، Polyline و ...


پروژه نیز ضمیمه شد.

در آینده نحوه کار با mouse و keyboard برای رسم اشکال نیز توضیح داده خواهد شد.

موفق باشید

Nima_NF
سه شنبه 18 تیر 1387, 12:01 عصر
هدف از این آموزش ترسیم مستطیل در محیط ویندوز با حرکات mouse هست و در این قسمت شما با پیام های mosue آشنا می شوید.

20095



- ابتدا تابعی با نام DrawBorder را برای ترسیم یک مستطیل تعریف می کنیم.

- دقت کنید که از آن جایی که در خارج از پیام WM_PAINT در حال رسم هستیم لذا ابتدا هندل DC یا همان display device context را برای انجام کارهای گرافیکی قسمت client area باید با استفاده از GetDC دریافت کنید و در پایان ترسیم نیز با ReleaseDC آزاد کنید.

- تابع SetROP2 با فلگ R2_NOT باعث می شود مستطیل ما با رنگی معکوس زنگ زمینه در هنگام drag کردن mouse نمایش داده شود.





void DrawBorder(HWND hwnd, POINT ptBeg, POINT ptEnd)
{
HDC hdc ;
hdc = GetDC (hwnd) ;

SetROP2 (hdc, R2_NOT) ;
SelectObject (hdc, GetStockObject (NULL_BRUSH)) ;
Rectangle (hdc, ptBeg.x, ptBeg.y, ptEnd.x, ptEnd.y) ;

ReleaseDC (hwnd, hdc) ;
}

تابع WndProc را همانند مثال قبل برای پیام ها به شکل زیر تغییر دهید:





LRESULT CALLBACK WndProc(HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
HDC hdc ;
PAINTSTRUCT ps ;
static BOOL drawing, drawBox ;
static POINT ptBeg, ptEnd, ptBoxBeg, ptBoxEnd ;

switch (message)
{
case WM_LBUTTONDOWN :
ptBeg.x = ptEnd.x = LOWORD (lParam) ;
ptBeg.y = ptEnd.y = HIWORD (lParam) ;

drawing = TRUE ;
return 0 ;

case WM_MOUSEMOVE :
if (drawing)
{
SetCursor (LoadCursor (NULL, IDC_CROSS)) ;
DrawBorder (hWnd, ptBeg, ptEnd) ; // clean previous drawing

ptEnd.x = LOWORD (lParam) ;
ptEnd.y = HIWORD (lParam) ;

DrawBorder (hWnd, ptBeg, ptEnd) ;
}
return 0 ;

case WM_LBUTTONUP :
if (drawing)
{
DrawBorder (hWnd, ptBeg, ptEnd) ;

ptBoxBeg = ptBeg ;
ptBoxEnd.x = LOWORD (lParam) ;
ptBoxEnd.y = HIWORD (lParam) ;

SetCursor (LoadCursor (NULL, IDC_ARROW)) ;

drawing = FALSE ;
drawBox = TRUE ;
InvalidateRect (hWnd, NULL, TRUE) ;
}
return 0 ;

case WM_PAINT :
hdc = BeginPaint (hWnd, &ps) ;

if (drawBox)
{
SelectObject (hdc, GetStockObject (LTGRAY_BRUSH)) ;
Rectangle (hdc, ptBoxBeg.x, ptBoxBeg.y, ptBoxEnd.x, ptBoxEnd.y) ;
}

if (drawing)
{
SetROP2 (hdc, R2_NOT) ;
SelectObject (hdc, GetStockObject (NULL_BRUSH)) ;
Rectangle (hdc, ptBeg.x, ptBeg.y, ptEnd.x, ptEnd.y) ;
}

EndPaint (hWnd, &ps) ;
return 0 ;

case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// Parse the menu selections:
switch (wmId)
{
case IDM_about:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;

case WM_DESTROY :
PostQuitMessage (0) ;
return 0 ;

default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}

// Message handler for about box.
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam);
switch (message)
{
case WM_INITDIALOG:
return (INT_PTR)TRUE;

case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR)TRUE;
}
break;
}
return (INT_PTR)FALSE;
}

پیام های mouse مورد استفاده :
- پیام WM_LBUTTONDOWN وقتی فراخوانی می شود که کلیک چپ mouse زده می شود.

- پیام WM_MOUSEMOVE وقتی که mouse در حال حرکت می باشد.
لذا با یک متغیر bool تست می کنیم که حتما پیام LBUTTONDOWN مقدار true داشته باشد و سپس عملیات انجام شود.

- پیام WM_LBUTTONUP وقتی کلیک چپ mouse آزاد می شود
پس از پایان این پیام تابع InvalidateRect را فراخوانی می کنیم تا با رفرش کردن تصویر در قسمت WM_PAINT ترسیم نهایی مستطیل انجام شود (متغیر drawBox وقتی true می شود)

- با استفاده از lParam های در پیام های mouse مختصات x و y را دریافت می کنیم.

- تابع SetCursor نشان mosue را به یک شکل دیگر مانند + تغییر می دهد.

سورس کد پروژه ضمیمه شد
موفق باشید

Nima_NF
یک شنبه 23 تیر 1387, 14:20 عصر
لطفا از پرسیدن سوالات قدیمی (در زمینه گرافیک با Turbo C) در این تاپیک جدا خوداری کنید و تاپیک جدید برای آن ها باز کنید .

Jaguar
دوشنبه 11 آذر 1387, 22:21 عصر
با تشکر از Nima_NF . دقیقا نمی دونم چرا ، ولی فکر می کنم باز هم این سوال های تکراری ، تکرار خواهند شد.

Nima_NF
چهارشنبه 13 آذر 1387, 15:56 عصر
دوستانی که می خواهند یک text editor برای محیط کنسول طراحی کنند و از توابع گرافیکی قدیمی بورلند نیز استفاده نکنند، می توانند برنامه زیر را دریافت و مطالعه کنند:

A Complete Console Text Editor (https://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=11288&lngWId=3)

یک نمونه عکس:
26109

این برنامه توسط روش دوم نوشته شده است که در پست اول همین تاپیک ذکر شده است. یعنی همان استفاده از توابع کنسولی مایکروسافت و پیاده سازی gotoxy و غیره .
البته خود این برنامه در محیط ++DevC نوشته شده است، اما به این شکل در کامپایلر های دیگر ویندوز مانند ++Visual C نیز قابل استفاده است.

توجه کنید که از توابع قدیمی گرافیکی بورلند استفاده نشده است و در کامپایلرهای قدیمی مانند ++Turbo C نیز قابل اجرا نیست.

ilia_86
جمعه 06 دی 1387, 05:40 صبح
سلام
ببخشید ، آیا برای یادگیری برنامه نویسی OpenGL در C مستندات فارسی وجود دارد؟
با تشکر

Nima_NF
جمعه 06 دی 1387, 13:53 عصر
سلام
ببخشید ، آیا برای یادگیری برنامه نویسی OpenGL در C مستندات فارسی وجود دارد؟
با تشکر
اگر می خواهید وارد برنامه نویسی سه بعدی شوید به هیچ عنوان دنبال مطالب فارسی نباشید که با توجه به تغییرات هر ساله تکنولوژی گرافیک و کتاب ها به هیچ جایی نخواهید رسید .

در صورتی که همچنان دنبال مطالب فارسی هستید می توانید از جزوه های درس گرافیک دانشگاه های مطرح کشور یا مقالات فارسی وب سایت های فارسی آموزشی استفاده کنید.

mg_mahyar
دوشنبه 31 فروردین 1388, 20:16 عصر
اگر می خواهید وارد برنامه نویسی سه بعدی شوید به هیچ عنوان دنبال مطالب فارسی نباشید که با توجه به تغییرات هر ساله تکنولوژی گرافیک و کتاب ها به هیچ جایی نخواهید رسید .

در صورتی که همچنان دنبال مطالب فارسی هستید می توانید از جزوه های درس گرافیک دانشگاه های مطرح کشور یا مقالات فارسی وب سایت های فارسی آموزشی استفاده کنید.
ولی من مستندات فارسی رو یک جا جمع کردم همراه چند کتاب دیگه
دانلود کنید اگر دوست داشتید.
geraphic.ir
هم سایتمه.

pswin.pooya
سه شنبه 01 اردیبهشت 1388, 18:59 عصر
سلام
ببخشید ، آیا برای یادگیری برنامه نویسی OpenGL در C مستندات فارسی وجود دارد؟
با تشکر


سلام
جزوه دکتر مهری از دانشگاه تبریز:
http://users.tabrizu.ac.ir/jmehri/Lectures/CG/draftGRAPHIC.pdf

kochol
دوشنبه 15 تیر 1388, 19:32 عصر
سلام

به نظر من SDL هم برای این کارها بسیار خوب است.
خیلی هم ساده است
http://libsdl.org

amsjavan
پنج شنبه 02 مهر 1388, 14:28 عصر
سلام
جزوه دکتر مهری از دانشگاه تبریز:
http://users.tabrizu.ac.ir/jmehri/Lectures/CG/draftGRAPHIC.pdf

سلام میشه این جزوه رو یک جا دیگه آپبود کنید؟ لینکش کار نمیکنه!

Elias.F
چهارشنبه 08 مهر 1388, 02:05 صبح
سلام
آقا نيما يه سوال دارم . ببخشيد اگه با اين همه توضيحاتي كه دادين ، شايد متوچه نشدم.

مي خواستم بدونم تو محيط ساده ++c نميشه بوسيله خود كدها برنامه گرافيكي توليد كرد.
منظورم رو برنامه هاييه كه استادا به عنوان پروژه مي دن
مثل بازي minesweeper وينوز كه معمولا همه با استفاده از MfC يا .... مي نويسن
برنامه هايي مثل همين بازي رو نميشه به صورت ساده نوشت؟
به صورت win32 (اگه اشتباه نكنم)
مثلا تو notepad كد بنويسي و بعد كامپايلش كني:خجالت:?
اميدوارم تونسته باشم منظورم رو بگم.

حامد مصافی
پنج شنبه 09 مهر 1388, 16:06 عصر
@ Elias.F (http://barnamenevis.org/forum/member.php?u=114772) :
اگر درست متوجه شده باشم منظور شما عدم استفاده از ابزار های گرافیکی است؛ که جواب سوال شما "بله" می باشد.
در مورد برنامه نویسی با تولکیت هایی مانند MFC قبلاً در این انجمن (اگر اشتباه نکنم توسط جناب نیما) توضیحاتی ارائه شده است.

Nima_NF
جمعه 10 مهر 1388, 17:29 عصر
شما می توانید کل برنامه را در Notepad بنویسید و با کامپایلر نسخه command line کامپایل کنید. (همه کامپایلر ها شامل VC++‎‎ و gcc این قابلیت را دارند)

اگر می خواهید برنامه شما اشکال گرافیکی داشته باشد در محیط کنسول (صفحه سیاه) نمی توانید اشکال گرافیکی را نمایش دهید. (به این در ویندوز می گویند Win32 console)

اگر می خواهید اشکال گرافیکی داشته باشید (مثلا فقط یک دایره)، آن وقت در تابع main باید یک پنجره خالی ویندوز تولید کرده و با تابع گرافیکی ویندوز (کتابخانه GDI یا GDI+) یک دایره در پنجره رسم کنید. (به این شیوه می گویند win32 غیر کنسولی)
چند نمونه مثال در همین تاپیک زده شده است.

ضمنا برای چندمین مرتبه: شما با win32 تقریبا همه نوع برنامه می توانید بنویسید، فقط کدنویسی معمولا بیشتر می شود. MFC نیز از win32 استفاده می کند.

pswin.pooya
دوشنبه 27 مهر 1388, 21:50 عصر
سلام میشه این جزوه رو یک جا دیگه آپبود کنید؟ لینکش کار نمیکنه!

این کتاب رو میتونید از آدرس زیر دزیافت کنید:

http://opengl.persiangig.com/page.html

dariushvb2010
چهارشنبه 04 آذر 1388, 08:49 صبح
سلام
لینکهای جالبی در این تاپیک گذاشتید.تشکر می کنم.
من توی Dev کد زیر رو می زنم ارور می ده. اگه امکان داشته باشه منو راهنمایی کنید.





#include windows.h
//---------------------------------------------------------------------------

INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)

}

MessageBox(NULL, L"Welcome to Win32 Application Development\n",
NULL, NULL);

return 0;
{

7 C:\Documents and Settings\jafari.d.ECED.000\Desktop\Untitled1.cpp
cannot convert `const wchar_t*' to `const CHAR*' for argument `2' to `int MessageBoxA(HWND__*, const CHAR*, const CHAR*, UINT)'





این همون کدی است که در یکی از لینکها نوشته بود...http://www.functionx.com/win32/Lesson04.htm

Nima_NF
چهارشنبه 04 آذر 1388, 12:43 عصر
کامپایلر شما در حالت یونیکد کامپایل نمی کند، باید آن را از طریق option مخصوص پروژه به Unicode تغییر دهید.

برای اینکه در حالت معمولی (بدون یونیکد) برنامه درست کار کند، فقط کافیست پیشوند L را از رشته در MessageBox بر دارید.

یا کلا همیشه برای رشته ها از TEXT استفاده کنید و به این شکل بنویسید:



#include <tchar.h>

MessageBox(NULL, TEXT("Welcome to Win32 Application Development\n"),
NULL, NULL);

dariushvb2010
یک شنبه 08 آذر 1388, 12:14 عصر
خیلی تشکرات فراوان می کنم از آقای نیما
واقعا ممنونم..... برنامه کامپایل شد خیلی هم خوشحال شدم.
فقط اگه میشه یه ذره در مورد یونیکد توضیح بدید و اینکه چطوری میشه تعییرش داد

Nima_NF
یک شنبه 08 آذر 1388, 15:36 عصر
برای یونیکد و اسکی به تاپیک FAQ زیر بروید و FAQشماره 6 و 7 را مطالعه کنید:

http://barnamenevis.org/forum/showthread.php?t=166590

dariushvb2010
یک شنبه 08 آذر 1388, 16:11 عصر
سلام
اگه سوال من تکراریه ببخشید
آیا میشه توی dev بدون نصب کردن هیچ گونه lib یا چیز دیگه و فقط با استفاده از لایبرری های خود dev کار گرافیکی کرد یا نه
اگه جواب مثبته لطفا یه دونه پیکسلو توی محیط گرافیکی رنگ کنید. یعنی کدشو بنویسید.
با تشکر

Nima_NF
یک شنبه 08 آذر 1388, 23:41 عصر
سلام
اگه سوال من تکراریه ببخشید
آیا میشه توی dev بدون نصب کردن هیچ گونه lib یا چیز دیگه و فقط با استفاده از لایبرری های خود dev کار گرافیکی کرد یا نه
اگه جواب مثبته لطفا یه دونه پیکسلو توی محیط گرافیکی رنگ کنید. یعنی کدشو بنویسید.
با تشکر
وقتی صحبت از DevC++‎ می کنید منظور پلتفرم ویندوز هست و وقتی از ویندوز صحبت می کنید مستقیم با غیر مستقیم از win32 صحبت می کند، پس باید به شکل نمونه مثال های همین تاپیک که با GDI و win32 هست اشکال گرافیکی رسم کنید.
برای این کار می توانید از تابع SetPixel استفاده کنید.

شما هر کاری بخواهید انجام دهید (حتی رسم یک پیکسل) در زبان برنامه برنامه نویسی C/C++‎ باید از کتابخانه های مختلف استفاده کنید، ضرورتی هم ندارد که شما کتابخانه ها را نصب کنید، در option پروژه آن را به صورت static به برنامه لینک کنید تا فقط همان قطعه کد به برنامه اضافه شود و نیازمند dll خاصی هم نباشید.
دقت کنید که توابع گرافیکی GDI نیاز به نصب ندارند ( SetPixel برای همین کتابخانه هست) و در تمامی سیستم عامل های ویندوز وجود دارد.

ضمنا خود DevC++ کتابخانه خاصی ندارد و از همان win32 و سایر کتابخانه های gcc استفاده می کند.

r00tkit
شنبه 14 آذر 1388, 10:14 صبح
یه کتاب خوب برای برنامه نویسی(gui) با api در c



اینم یه مثال

#include <windows.h>

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
MessageBox (NULL, TEXT ("Hello, Windows 98!"), TEXT ("HelloMsg"), 0) ;

return 0;


}
http://www.amazon.com/Programming-Windows%C2%AE-Fifth-Microsoft/dp/157231995X/ref=sr_1_4?ie=UTF8&s=books&qid=1259997002&sr=8-4

subsub
یک شنبه 13 دی 1388, 17:27 عصر
روش 3) روش ساده تر از مورد قبل، استفاده از کتابخانه های 32 بیتی آماده غیر استاندارد و معادل graphic.h می باشد که برخی از آن ها open source (کد باز) نیز می باشد، مانند WinBGI که می توانید فایل های آن را از صفحه زیر دانلود کرده و استفاده کنید:
فایل های مربوط به WinBGI به همراه یک نمونه مثال

توجه کنید که این کتابخانه از توابع گرافیکی win32 استفاده می کند و برای نمایش آن ها پنجره سیاه دیگری همانند کنسول باز می شود که قادر هستید در آن اشکال گرافیکی را همانند برنامه های ویندوز به سادگی برنامه های گرافیکی Turbo C رسم کنید.

این روش روی dev جواب نمیده. اگه ممکنه یه مثال بزارید.

mabbaszadegan
سه شنبه 29 دی 1388, 01:27 صبح
فقط میخواستم بابت لینکها و آموزشهای دوستان ، مخصوصا مدیریت محترم ، نیمای عزیز تشکر کنم

من فک نمیکردم برنامه نویسی تو محیط ویژوال C اینقدر ساده باشه ، شما یه دید تازه ای از برنامه نویسی بهم دادید ، واقعا نمیدونم چطور تشکر کنم

راستی اگه امکان داره ، آموزش رو ادامه بدید، اگه ممکنه برای MFC هم آموزش بدید و چندتا سورس بذارید

خیلی خیلی ممنون

موفق باشید

Nima_NF
سه شنبه 29 دی 1388, 17:48 عصر
راستی اگه امکان داره ، آموزش رو ادامه بدید، اگه ممکنه برای MFC هم آموزش بدید و چندتا سورس بذارید


خواهش می کنم، چون بحث وسیعی هست هدفم با این مثالها بیشتر این بود که یک با نحوه نوشتن برنامه های ساده آشنا شوید و سپس از منابع اصلی استفاده کنید.

در مور د MFC سایر دوستان دست به کار شدند و کتابی از منابع مختلف جمع آوری یا ترجمه کردند.
برای دریافت کتاب از این لینک استفاده کنید(کلیک کنید) (http://barnamenevis.org/forum/showthread.php?t=185403)

امید خطیبی
جمعه 02 بهمن 1388, 09:08 صبح
کسی اگر سایتی را برای دانلود کتابخانه های گرافیکی C++ را دارد به من بدهد لطفاً اگر می شود کمک کنید خیلی به آن نیاز دارم.

bachebahal_1363
یک شنبه 18 بهمن 1388, 18:38 عصر
سلام خدمت دوستان و مخصوصا آقا نیما
واقعا ممنون از مطالب بسیار آموزندتون
سوال من این هست که کارهای گرافیکی در سطح گرافیک دو بعدی رو می شه با GDI+ در C#‎‎ هم پیاده سازی کرد برای مثال می شه نرم افزاری مانند کرل رو در سطح گرافیک دوبعدی اون با C#‎‎ پیاده سازی نمود البته با همون performance قوی ؟

Nima_NF
یک شنبه 18 بهمن 1388, 21:45 عصر
سلام خدمت دوستان و مخصوصا آقا نیما
واقعا ممنون از مطالب بسیار آموزندتون
سوال من این هست که کارهای گرافیکی در سطح گرافیک دو بعدی رو می شه با GDI+ در C#‎‎‎‎ هم پیاده سازی کرد برای مثال می شه نرم افزاری مانند کرل رو در سطح گرافیک دوبعدی اون با C#‎‎‎‎ پیاده سازی نمود البته با همون performance قوی ؟

کلا GDI+ چیزی نیست که بخواهید با آن performance بالایی داشته باشید، برای نرم افزارهای پیشرفته معمولا از openGl یا directX استفاده می کنند.

چند نکته:
- کلا GDI+ از GDI مقدار اندکی سرعت کمتری دارد.
- GDI+ هم برای C++‎ وجود دارد و هم برای C#‎ و سایر زبان های دات نتی (خود کتابخانه با C/C++‎ نوشته شده است).
- کلا برنامه نویسی گرافیک در سطح دوبعدی اگر با .Net باشد و اگر برنامه در سطح وسیع شود چون حافظه را چندان نمی توانید کنترل کنید، در صورت درست ننوشتن برنامه با منابع مشکل خواهید داشت، و در برخی موارد کاهش محسوس کارآیی خواهید داشت.

البته اگر خوب برنامه را بنویسید و حافظه را تا جای ممکن در کنترل داشته باشید (با همان امکانات دات نتی و garbage collection ) می توانید کارآیی را بالا ببرید.


نرم افزار Paint.NET (http://www.getpaint.net/) را دانلود کنید و کارآیی را خودتان در این برنامه که کلا با C#‎ و قسمت اندکی با C++‎ هست برررسی کنید. سپس خودتان می توانید بهتر تصمیم بگیرید.
تذکر: در بخش features بررسی کنید که کدام قابلیت ها با GDI هست و کدام با GDI+ . در ویندوز 7 بسیاری از آن ها با diretcx هست و برای تست باید از XP استفاده کنید.

bachebahal_1363
دوشنبه 19 بهمن 1388, 11:45 صبح
خوب من جستجوهایی تو اینترنت کردم
در مورد DirectX و OpenGL اصولا برای گرافیک های بازی استفاده شده
اما آیا برای نرم افزار های گرافیکی (باز مثالم کرل ) هست از همین دو استفاده شده؟
من می خوام نرم افزاری شبیه کرل بنویسم
البته دانش برنامه نویسی بدی ندارم اما کار گرافیکی زیاد نکردم و البته بیشترش با GDI+ بوده
برای همین می خوام Base کار رو خوب شروع کنم
البته برای یاد گیری هم احتیاج دارم تا منابعم رو مشخص کنم
می خوام بدونم شرکت هایی مثل Corel Corpration از چه ایده هایی و از چه تکنولوژی استفاده کرده تا بتونم به اون سمت حرکت کنم

Nima_NF
دوشنبه 19 بهمن 1388, 13:16 عصر
خوب من جستجوهایی تو اینترنت کردم
در مورد DirectX و OpenGL اصولا برای گرافیک های بازی استفاده شده
اما آیا برای نرم افزار های گرافیکی (باز مثالم کرل ) هست از همین دو استفاده شده؟
من می خوام نرم افزاری شبیه کرل بنویسم
البته دانش برنامه نویسی بدی ندارم اما کار گرافیکی زیاد نکردم و البته بیشترش با GDI+ بوده
برای همین می خوام Base کار رو خوب شروع کنم
البته برای یاد گیری هم احتیاج دارم تا منابعم رو مشخص کنم
می خوام بدونم شرکت هایی مثل Corel Corpration از چه ایده هایی و از چه تکنولوژی استفاده کرده تا بتونم به اون سمت حرکت کنم

پیشنهادی که در دو خط آخر به شما گفتم را انجام دادید؟
مطمئنا خیر. به بخش features سایت نرم افزار paint.net بروید و امکانات را بخوانید و ببینید کجا با GDI و کجا با GDI+ و کجا DirectX هست، به شما جهت آشنایی اولیه کمک می کند.

در ویندوز ویستا، همه پنجره ها با directX ایجاد و نمایش داده می شود.
نرم افزارهای Corel، Autocad، photoshop از همین OpenGL و در برخی موارد از DirectX هست، کمتر بخشی با GDI هست.

اگر می خواهید در سطح اولیه یک برنامه شبیه Corel بسازید، خیلی راحت با GDI+ می توانید بنویسید. کسانی که از OpenGL/DirectX استفاده می کنند برای مقاصد حرفه ای هست، چون برای نمایش تصویر و غیره شما از کارت گرافیک استفاده می کنید و فقط CPU در کار نیست. با GDI+ تقریبا همه پردازش ها بر عهده CPU هست و تقریبا کارت گرافیک شما بی استفاده هست.
ضمنا دقت کنید که کار با GDI+ خیلی راحت تر هست و بحث دو مورد دیگر ذکر شده خیلی پیچیده تر هست.

bachebahal_1363
دوشنبه 19 بهمن 1388, 18:39 عصر
ممنون از پاسختون البته کمتر کسی هست که paint.net رو دانلود نکرده باشه
بنده هم اینکار رو کرده بودم و ازش ایده های خوبی گرفته بودم
البته توضیحات مربوط به قسمت های مختلفش در feauters نیست در بخش roadmap هست
اما بنده می خواستم ببینم اختلاف GDI , GDI+ , OPENGL,DIRECTX در کجاست که شما راهنمایی بسیار خوبی کردین
چون من عادت ندارم برنامه هامو بدون اینکه بدونم بهترین روش چیه بنویسم به همین جهت دنبال راه درست می گردم

sha8046
چهارشنبه 28 بهمن 1388, 23:12 عصر
خیلی ممنون از دوستان که این تاپیک به این خوبی رو ایجاد کردند ! من خوم تو این تاپیک با win bgi آشنا شدم !ولی دوستان یه سوال بسیار مهم : من توی محیط گرافیکی نمیتونم با دکمه های arrow key کار کنم ! یعنی هم در bgi سابق , هم در win bgi تو vc++6 ! یعنی هر کاری میکنم که با کدهای اسکی و توابع مثل getch و kbhit دکمه های arrow key رو تو یه برنامه گرافیکی بشناسونم موفق نمیشم در صورتی که هر دکمه دیگه ای تو اون برنامه کار میکنه ! و جالب اینجاست که فقط در محیط گرافیکی این مشکل پیش میاد و در محیط متنی هر 2 کامپایلر دکمه های arrow key به آسونی شناخته میشند !کسی میتونه به من کمک کنه ؟!

MicrosoftH@ymail.com
یک شنبه 05 اردیبهشت 1389, 09:14 صبح
تو وبلاگ زیر هم مقاله ای درباره گرافیک در سی و سی پلاس پلاس هست
www.magazinepro.mihanblog.com

مصطفی ساتکی
یک شنبه 05 اردیبهشت 1389, 15:00 عصر
با C# می شه.شما برای انجام این پروژه های کاملاٌ سطح پایین کار می کنی . GDI و GDI+ اون موقع برات کار بردی نداره. در کرل و فتوشاپ داستان با گرافیک GDI زمین تا آسمون فرق داره. اول بایستی Plateform خودتونو ایجاد کنید. یعنی به فرض اگه بخای با یه ابزاری تغییر ایجاد کنی رو کل تصویر نیست دیگه اینجا تصویر segment. این داستان تو ویندوز ملموس نیست به Dos برمی گرده .زمانیکه اولین Game مونو تو Dos نوشتیم این تجربرو کسب کردیم.

مصطفی ساتکی
یک شنبه 05 اردیبهشت 1389, 22:04 عصر
آن performance بالایی داشته باشید، برای نرم افزارهای پیشرفته معمولا از openGl یا directX استفاده می کنند
نمی دونم اینجا پیشرفته یعنی چی.زمانی پای OpenGLو ِDirectX به نرم افزار باز میشه که Render نیاز باشی.یعنی توالی فریم های که اگر در غیر اینصورت باشه تصویر پرش می کنه.در دو نرم افزار فوق ما پردازش داده رو در حافظه داریم که با Scanline یا همون دسترسی مستقیم به Ram قضیه حله.تنها چیزی که می مونه Segmentation که تصویر Buffer رو با Api Bitblt به یکباره در تصویر مقصد کپی نمی کن. در ابتدا View رو refresh می کن و سپس تصویر مقصد.علت Segmentation در View بالا در نمایش تصویر در Cpu های هرتز پایین و در تصویر بخاطر اینکه اگر تصویر دارای ابعاد بزرگی باشه انتقال یکباره حافظه زمانگیر تر.
البته DirectX و OpenGl در 2 حالت FullScreen و معمولی در دسترسند که در حالت Full در رندر فرکانس بالاتری قابل دسترس می باشد.

Nima_NF
دوشنبه 06 اردیبهشت 1389, 00:20 صبح
نمی دونم اینجا پیشرفته یعنی چی.زمانی پای OpenGLو ِDirectX به نرم افزار باز میشه که Render نیاز باشی.
از جمله نرم افزارهای پیشرفته که منظورم می باشد مثلا Adobe Photoshop هست. این برنامه نمای کاری شما (پنجره ای که عکس ها و لایه ها قرار می گیرد و بر روی آن کار می کنید) را در صورت وجود با شتاب دهنده های گرافیکی نمایش می دهد، لذا نمای کاری ، ترسیم و کار با brush سریع تر می شود، یعنی از GPU نیز همپای CPU برای افزایش کارآیی بهره می برد.

ضمنا در نسخه extended جدید Photoshop که امکان نمایش جسم سه بعدی و نمای wire-frame نیز افزوده شده است و کلا بر پایه همین OpenGl و DirectX هست، لذا شما می توانید اجسام سه بعدی را نیز در نمای معمولی خود داشته باشید.

جدیدا نیز نرم افزارهای open source و رایگان مانند Paint.Net نیز که با C#‎‎ هست، در نسخه های ویندوز vista و 7 ، قسمت های مختلف برنامه را با DirectX پیاده سازی کرده اند. (طبق قابلیت های پیش فرض سیستم عامل های جدید، که پیش فرضشان وجود حداقل سخت افزار با قابلیت پشتیبانی DirectX 9 هست)

در کل خیلی از برنامه های دیگر هم بر پایه همین DirectX و OpenGl هستند، مثلا اکثر نرم افزارهای پخش عکس و فیلم رایج.


پاورقی: دقت داشته باشید که دو مورد فوق در تخصص بنده هست و آگاهی کامل در مورد آن ها دارم.

مصطفی ساتکی
دوشنبه 06 اردیبهشت 1389, 10:13 صبح
فتوشاپ نرم افزار امروز و دیرزو نیست. ما با فتوشاپ تو win 3.1 هم کار کردیم .اگر به View اصلی فتوشاپ دقت داشته باشید این حرف نمی زنید. شاید یه effect خاصی تو View معمولی نمای جالبی نداشته باشه در اون صورت میشه از View طراحی شده با DirectX اون رو انجام داد تصویر حالصه باز هم در View معمولی قرار می گیره.View فتوشاپ به همین سادگی نیست که 3 سوت به DirectX تبدیل شه. Layering فتوشاپ هیچ ربطی به Directx نداره.تبدیلات در Buffer صورت می گیره در نهایت در View کپی. شرکت Adobe یه Library رو تهیه کرده که اکثر کارهای در اون به صورت inline (اسمبلی) کد خورده.اونا در Plateform شون از سالهای دور به فکر Optimum سازی بودند. در جواب افکت 3D .زمانی که می خاد DirectX شما رو نصب یا بروز کنه بهتون میگه که من برای این انجام افکت های 3D این کارو انجام میدم.فتوشاپ های نسخه پایین تر به DirectX نیازی ندارد. در ضمن مهندسی وDocumentation موجود برای فتوشاپ رو با Paint ویندوز مقایسه نکنید اون مثل کار در کلاس می مونه نه یه نرم افزار تجاری.

پاورقی: دقت داشته باشید که دو مورد فوق در تخصص بنده هست و آگاهی کامل در مورد آن ها دارم.
از قدیم گفتن من نمیگم درخت هرچه پربارتر سر بزیر تر.
در ضمن شما بایستی کار در حد و اندازه های فتوشاپ داده باشید که اونوقت نظرات شما را بشه به راحتی با دانش Adobe مطابقت داد.

مصطفی ساتکی
دوشنبه 06 اردیبهشت 1389, 10:17 صبح
به هر حال اگه خواستید می تونم کدی برای شما تهیه که Layernig فتوشاپ رو براتون انجام بده با تمام interpolating موجود و رایج. ولی برنامش بیشتر به زبان ماشین نزدیکه تا یه زبان سطح بالا.
موفق باشید.

MicrosoftH@ymail.com
سه شنبه 07 اردیبهشت 1389, 17:18 عصر
تو وبلاگ زیر هم یک کتاب الکترونیکی هست بدک نیست در مورد گرافیک
www.magazinepro.mihanblog.com

Nima_NF
سه شنبه 07 اردیبهشت 1389, 21:48 عصر
فتوشاپ نرم افزار امروز و دیرزو نیست. ما با فتوشاپ تو win 3.1 هم کار کردیم

فتوشاپ را فقط به عنوان یک نمونه در پست قبل گفتم و منظورم فقط آخرین نسخه هایش بود مخصوصا extended و effect هایش که ذکر کردم.

مطالبی که شما گفتید اشتباه نبودند، حالا یا شما از حرف ما اشتباه برداشت کردید یا من نتوانستم درست منظور خودم را برسانم.

در هر صورت سایر محصولات Adobe سال ها هستند که به این شکل پیاده سازی شده اند که در خیلی از آن ها حتی وجود DirectX/OpenGL اجباری نبوده، اما اگر باشد و شما در تنظیمات نیز تعیین کنید که از شتاب دهنده ها استفاده کنند همان موضوعی که هدف بنده هست انجام می شود.

در کل منظور بنده در بیان برنامه های پیشرفته جدید برنامه هایی هست که در خیلی از قسمت ها از GPU (با یک shader ساده) استفاده می کنند و سپس با محتوای کنونی نما که توسط CPU پردازش می شوند ترکیب می کنند. و از هر دو CPU و GPU همپای هم استفاده می کنند.
پس دقت کنید که منظورم ترکیب این دو هست، نه از بین بردن روال کنونی. یعنی هر جایی که GPU کار را سریع تر می کند از آن برای پیاده سازی effect یا شکل مورد نظر استفاده شود، نه صرفا نمایش.


در ضمن مهندسی وDocumentation موجود برای فتوشاپ رو با Paint ویندوز مقایسه نکنید اون مثل کار در کلاس می مونه نه یه نرم افزار تجاری.در این مورد منظورم برنامه Paint.Net هست که با C#‎ هست نه Paint ویندوز!

در گوگل نام این نرم فزار را جستجو کنید... این برنامه از جمله برنامه هایی هست که از قابلیت های ترکیبی GPU/CPU در Vista و 7 استفاده می کند.

این برنامه به سمت همان منظور بنده پیش رفته است و در هر نسخه جدید برای قسمت های مختلف به سمت GPU می رود.

در کل چیزی که بنده گفتم در مورد نرم افزارهای آینده نزدیک و اخیر هست که در حال رفتن به این سمت هستند، نرم افزارهای کنونی نیز در حال رفتن به این سمت هستند.

Mrs.Net
چهارشنبه 08 اردیبهشت 1389, 19:33 عصر
با توجه به اینکه Qt از مشتقات ++C هست لطفا توضیح بدید که Qt از کدام کتابخانه گرافیکی استفاده کرده

Nima_NF
پنج شنبه 09 اردیبهشت 1389, 01:18 صبح
با توجه به اینکه Qt از مشتقات ++C هست لطفا توضیح بدید که Qt از کدام کتابخانه گرافیکی استفاده کرده
Qt در هر سیستم عامل از API ها native همان پلتفرم استفاده کرده است و کنترل های خود را به شکل جدید تعریف کرده است. یعنی مثلا در ویندوز از windows API استفاده کرده است، پس به همین ترتیب توابع گرافیکی استفاده شده در طراحی های سفارشی در ویندوز نیز همان GDI و +GDI هستند.
در کل یعنی همان کتابخانه هایی که مستقیم در کار با C++‎‎‎ در برنامه نویسی native به آن ها دسترسی دارید

البته یکسری کتابخانه تحت عنوان 2D Graphics Canvas هم دارد که در صورت وجود از OpenGL استفاده می کند(در سیمبین از OpenVG)

Mrs.Net
پنج شنبه 09 اردیبهشت 1389, 08:21 صبح
Qt در هر سیستم عامل از API ها native همان پلتفرم استفاده کرده است و کنترل های خود را به شکل جدید تعریف کرده است. یعنی مثلا در ویندوز از windows API استفاده کرده است، پس به همین ترتیب توابع گرافیکی استفاده شده در طراحی های سفارشی در ویندوز نیز همان GDI و +GDI هستند.
در کل یعنی همان کتابخانه هایی که مستقیم در کار با C++‎‎‎‎ در برنامه نویسی native به آن ها دسترسی دارید


البته یکسری کتابخانه تحت عنوان 2D Graphics Canvas هم دارد که در صورت وجود از OpenGL استفاده می کند(در سیمبین از OpenVG)

یکی از مشخصه های اصلی Qt گرافیک خوبش مخصوصا در واسط کاربریش هست (درست میگم؟) پس با GDI میشه از پس گرافیک سطح خوب برای UI براومد. درسته؟

Nima_NF
پنج شنبه 09 اردیبهشت 1389, 15:02 عصر
یکی از مشخصه های اصلی Qt گرافیک خوبش مخصوصا در واسط کاربریش هست (درست میگم؟) پس با GDI میشه از پس گرافیک سطح خوب برای UI براومد. درسته؟
در ویندوز که GDI هست بله، این همه برنامه که می بینید معمولا در هیمن سطح هستند.
در قسمت گرافیک اگر در جایی نیاز به استفاده از کارت گرافیک نداشته باشند با همین +GDI/GDI کار می کنند (مثلا برنامه winamp).

البته دقت داشته باشید که بحث GUI (رابط گرافیکی کاربری ) را با بحث گرافیک اشتباه نگیرید، اگر قرار هست GUI سفارشی یا skin طراحی کنید، آن وقت شما باید از +GDI/GDI برای طراحی ها استفاده کنید.

Mrs.Net
پنج شنبه 09 اردیبهشت 1389, 15:36 عصر
پس اکثر برنامه ها و حتی فریم ورک Qt برای داشتن GUI یا فراهم کردن امکانات یک GUI قوی در محیط ویندوز از +GDI/GDI استفاده کردند چون کافی بوده و تنها برای بخشهایی از برنامه اشون که گرافیک و رندر بالایی میطلبیده از کتابخانه های حرفه ای تری استفاده کردند.
پلتفرم جدید ie از diect2d استاده کرده که فکر کنم برای بهتر کار کردن html5 باشه.
ممنون از توضیحاتتون

Nima_NF
پنج شنبه 09 اردیبهشت 1389, 18:34 عصر
پلتفرم جدید ie از diect2d استاده کرده که فکر کنم برای بهتر کار کردن html5 باشه.

این دقیقا همان موضوعی هست که در چند پست بالاتر توضیح دادم.

یعنی به خاطر اینکه در ویندوزهای جدید پیش فرض این هست که شما یک کارت قدرتمند با پشتیبانی حداقل DirectX 9 داشته باشید، پس نه تنها دست مایکروسافت باز شده است تا امکانات جدید عرضه کند مانند Direct2D (یا حتی وقتی پنجره های ویندوز در Areo با DirectX تولید می شوند)، آن وقت برنامه ها هم به این سمت خواهند رفت.

مثلا همین winamp سال ها هست که با همین GDI امکانت خود را پیاده سازی کرده و در تنظیمات برای کارهای fade و غیره همچنان از CPU استفاده می کند، اما مطمئن باشید به همین زودی ها کار ترکیب خود را آغاز می کند و GPU را همراه CPU به کار خواهد گرفت تا استفاده بهینه از سخت افزار کرده باشد.

به همین خاطر هست که Qt هم دست به کار شد و با OpenGl کتابخانه 2D خود را نوشت تا برنامه ها در جای ممکن از GPU بهره ببرند.

bachebahal_1363
چهارشنبه 15 اردیبهشت 1389, 18:08 عصر
سلام خدمت آقا نیما
بنده یه سوال داشتم
من DirectX SDK Aug 2009 رو دانلود و نصب کردم
حالا که می خوام از Direct2D استفاده کنم پیغام زیر رو نشون می ده
در صورتیکه من تمامی link های برنامه رو همچنین header های لازم رو به برنامه اضافه کردم اما باز هم همین پیغام رو می ده
آیا Direct2D فقط برای windows vista و windows 7 است؟
درصورتیکه در System Requirment گفته که از windows xp هم پشتیبانی می کنه

fatal error C1083: Cannot open include file: 'd2d1.h': No such file or directory

Nima_NF
چهارشنبه 15 اردیبهشت 1389, 23:17 عصر
آیا Direct2D فقط برای windows vista و windows 7 است؟
درصورتیکه در System Requirment گفته که از windows xp هم پشتیبانی می کنه


Diret2D یک بحث جدید هست و فقط در سیستم عامل های جدید اجرا می شود، حتی windows vista نیز باید sp2 به همراه یک package دیگر باشد.

سیستم های پشتیبانی شده برای Direct2D :

Minimum supported client:
Windows 7 or Windows Vista with Service Pack 2 (SP2) and Platform Update for
Windows Vista

Minimum supported server:
Windows Server 2008 R2 or Windows Server 2008 with Service Pack 2 (SP2) and Platform Update for Windows Server 2008


دقت کنید که کتابخانه ها و هدر فایل های مورد نظر در جدید ترین نسخه 7 SDK Windows قرار دارد. پس آخرین SDK ویندوز را دانلود و نصب کنید.

amin.headbanger
سه شنبه 21 اردیبهشت 1389, 16:32 عصر
سلام.استاد نیمای عزیز میشه یک کتاب در زمینه ی برنامه نویسی به وسیله ی win32 api یا همون win32 معرفی کنین یه کتاب هست از انتشارات مایکروسافت ولی قدیمی.اگه یه رفرنس ام باشه که دیگه حرف نداره.

Nima_NF
چهارشنبه 22 اردیبهشت 1389, 12:35 عصر
سلام.استاد نیمای عزیز میشه یک کتاب در زمینه ی برنامه نویسی به وسیله ی win32 api یا همون win32 معرفی کنین یه کتاب هست از انتشارات مایکروسافت ولی قدیمی.اگه یه رفرنس ام باشه که دیگه حرف نداره.
همان کتاب قدیمی Programming Windows Fifth Edition جوابگوی اکثر کارها مورد نیاز شما هست. (windows API همیشه روال قبلی خود را دارد و در کنار آن ها امکانات جدید اضافه می کند)
برای نکات جدید و اضافی کتاب های Windows via C/C++‎‎‎ - Pro Developer (برای مباحث پیشرفته سیستمی) و همین طور Windows Graphics Programming Win32 GDI and DirectDraw (برای مباحث گرافیکی، طراحی نرم افزارهای گرافیکی و غیره)

برای اطلاعات بیشتر در مورد کتاب ها از این لینک استفاده کنید. (http://barnamenevis.org/forum/showthread.php?t=86565)

behnam_bwg
چهارشنبه 22 اردیبهشت 1389, 15:18 عصر
با سلام و خسته نباشید به دوستان برنامه نویس و زحمت کش این انجمن .

راستش من قصد اجام دادن یک پروژه را داشتم که دانشگاهیه. موضوعی که من برای پروژه ا م در نظر گرفتم ساختن بازی سفینه می باشد.
اول از همه یک توضیح کوتاه راجع به این بازی میدهم بعد چیزهایی که از شما دوستان عزیز می خواهم را مینویسم.

این بازی به این صورت است که من باید در این برنامه چند ردیف سفینه دشمن رو طراحی کنم که به سمت سفینه من نزدیک میشوند ومن هم باید تا زمانی که دشمنان به سفینه ام نزدیک نشده اند را نابود کنم.حمله دشمنان به من از بالا به پایین صفحه می باشد

کمک هایی که من از شما ذر این زمینه دارم این است که جزوه یا پی دی افی آموزشی راجع به کار با گرافیک در ++c و توابع آن و همچنین کار بار با کلید های ورودی و خروجی و مطالبی از این قبیل که بتوان با یادگیری آن پروژه ام رو با موفقیت به اتمام برسانم رو میخواهم.

متشکرم.
:چشمک:

bachebahal_1363
چهارشنبه 22 اردیبهشت 1389, 16:17 عصر
سوال دیگه ای که در مورد Direct2D مطرحه اینه که آیا برنامه هایی که نوشته می شه در windows xp و یا سایر windows ها قابل اجرا است یا نه
اگر نه پس crossplatform و یا native بودن چه معنایی پیدا می کنه؟

Nima_NF
چهارشنبه 22 اردیبهشت 1389, 19:17 عصر
سوال دیگه ای که در مورد Direct2D مطرحه اینه که آیا برنامه هایی که نوشته می شه در windows xp و یا سایر windows ها قابل اجرا است یا نه
اگر نه پس crossplatform و یا native بودن چه معنایی پیدا می کنه؟
همانطور که گفتم خیر،
فقط ویستا و 7 و سیستم عامل های سرور لیست شده در صفحه قبل.

crossplatform بودن که اصلا نیست! cross-platform بودن یعنی در سایر سیستم عامل ها (مانند لینوکس یا Mac یا غیره نیز قابل استفاده باشد، نه لزوما نسخه های مختلف همان سیستم عامل)
کلا مایکروسافت کمتر مواردی بوده که چیزی را cross-platform عرضه کند.

native بودن به این معنی هست که کدهای شما به کدهای ماشین تبدیل می شود (در همان سیستم عامل نیز قابل اجرا هست، چون باقی کدهای ماشین در قالب کتابخانه در همان سیستم عامل وجود دارد .)

حالا چرا XP پشتیبانی نمی شود، به خاطر ماهیت ساختاری جدید ویستا به بعد، کلا مایکروسافت قصد دارد با این کارها افراد را کم کم به سمت سیستم عامل های جدید تشویق کند، چون در این سیستم عامل ها حداقل سخت افزار یک کارت گرافیک قدرتمند با حداقل پشتیبانی از DirectX9 هست، در حالی که در XP لزومی وجود ندارد که کارت گرافیک چنین قدرتی داشته باشد.


کمک هایی که من از شما ذر این زمینه دارم این است که جزوه یا پی دی افی آموزشی راجع به کار با گرافیک در ++c و توابع آن و همچنین کار بار با کلید های ورودی و خروجی و مطالبی از این قبیل که بتوان با یادگیری آن پروژه ام رو با موفقیت به اتمام برسانم رو میخواهم.چند پست اول همین تاپیک را با دقت مطالعه کنید و از منابع ذکر شده استفاده کنید.

aryasoft2872
یک شنبه 27 تیر 1389, 11:06 صبح
می بخشید میشه یکدونه کامپایلر برای برنامه نویسی win32 معرفی کنید چون فکر می کنم c++ 2010 با دات نت باشه(البته مطمئن نیستم)

و سوال دیگر ام این که با c++ 6.0 هم می تونم به صورت win32 برنامه بنویسم

Nima_NF
یک شنبه 27 تیر 1389, 14:43 عصر
می بخشید میشه یکدونه کامپایلر برای برنامه نویسی win32 معرفی کنید چون فکر می کنم C++‎ 2010 با دات نت باشه(البته مطمئن نیستم)

و سوال دیگر ام این که با C++‎ 6.0 هم می تونم به صورت win32 برنامه بنویسم

مطالب تاپیک های زیر را با دقت مطالعه کنید:
http://barnamenevis.org/forum/showthread.php?t=111283
http://barnamenevis.org/forum/showthread.php?t=115240

MicrosoftH@ymail.com
شنبه 02 مرداد 1389, 21:18 عصر
قسمت دوم برنامه نویسی گرافیک رو از وبلاگ زیر دانلود کنید .
www.magazinepro.mihanblog.com


:لبخند:

mohammad.ahmady173
پنج شنبه 08 مهر 1389, 11:50 صبح
سلام به همه ی اساتید..
اگه میشه یه راهی رو معرفی کنید واسه امثال من که میخوان cpp کار حرفه ای بشن...
ممنون از همه...

BORHAN TEC
پنج شنبه 08 مهر 1389, 13:03 عصر
سلام به همه ی اساتید..
اگه میشه یه راهی رو معرفی کنید واسه امثال من که میخوان cpp کار حرفه ای بشن...
ممنون از همه...
به نظر من کتاب C++ for Programmers: Deitel® Developer Series رو بخون!!!

hosseincrespo
سه شنبه 30 آذر 1389, 20:31 عصر
سلام خدمت دوستان عزیز
مثلا میخوایم یه برنامه گرافیکی قشنگ تو ویژوال استودیو به زبان سی بنویسیم
اگه بخوایم معمولی بنویسیم که همون windows console application رو انتخاب میکنیم
اما برای اینکه یه فرم ایجاد کنیم و ... باید windows forms application رو اجرا کنیم؟ ؟؟؟ ؟ ؟ ؟
وقتی اینکارو میکنیم یه فرم اماده در اختیار ما قرار میده
و ما میتونیم پر و بالش بدیم
حلا فرض کنین ایم فرم رو طراحی کردیم اینطوری :
http://hcrespo119.persiangig.com/2010-12-21_193321.jpg

حالا به قسمت های مختلف چطوری باید کد داد ؟
کلا قضیه چیه میشه یکم توضیح بدین ؟

اینم قسمت تابع main
http://hcrespo119.persiangig.com/p1.jpg

sha8046
دوشنبه 11 بهمن 1389, 00:03 صبح
كسي از دوستان ميدونه چرا گرافيك win bgi انقدر كنده نسبته به bgi 16 بيتي . من از تابع floodfill استفاده ميكنم سرعت بطرز وحشتناكي پايين مياد ؟

دز ضمن چزا در bgi , win bgi دكمه هاي arrow key كار نميكنه ؟

parsdarab
شنبه 27 فروردین 1390, 12:27 عصر
سلام اگه کسی سورس تبدیل ماتریس مجاورت به گراف رو داره بزاره
یعنی ماتریس مجاورت رو بگیره بعد گراف را به صورت گرافیکی رسم کنه
با تشکر

zartosht_ppp
دوشنبه 30 خرداد 1390, 12:24 عصر
وقت بخیر . یه برنامه گرافیکی خیلی ساده مثل رسم دایره رو اگه میشه با استفاده از کامبایلر ++g بنویسین . من از PC BSD استفاده می کنم . واسه اونجا بازم دارم . واقعا ممنونم .

omid.m7
چهارشنبه 08 تیر 1390, 20:24 عصر
کسی در مورد پیاده سازی صف و پشته و درخت به صورت گرافیکی اطلاعی داره کمک کنه
من خیلی دنبالش گشتم کم آوردم.

senaps
یک شنبه 10 مهر 1390, 22:11 عصر
سلام دوستان....
من مطالب صفحه ی اول رو خوندم،ولی مقداری گیج شدم!!
من سی پلاس رو با توربو سی یاد گرفتم و کد های مختلفی میتونم بزنم با استفاده از اون!(البته من از نت بینز استفاده میکنم نه خود توربو !!)

االن که ویندوز 8 اومده،ماکروسافت برنامه های متعدد اموزشیش رو روی سی پلاس متمرکز کرده!!(ادم یه جورایی حس میکنه ویژوال اوستودیو 11 اصلا سی شارپ نداره!!) برنامه های مترو رو هم که با سی پلاس نوشتن!!

حالا،مشکل من اینه که با هیچ کدوم از این کد ها اشنایی ندارم!! یعنی من شی گرا رو خوب بلدم،ولی فقط در حد کنسول بلدم کد بزنم با سی پلاس!!

هیچ کدوم از منابعی که دوستان معرفی کردن،نتونست بهم کمکی بکنه که چجوری میشه برنامه نویسی رو شروع کرد!!

مثلا، من توی کنسول با سی شارپ، باید بنویسم:
console.writeline("hello world!");
در صورتی که توی محیط ویندوز اپ،باید بنویسم :
messagebox.show("hello world!!");

خوب، حالا من برای کنسول سی پلاس، مینویسم:
cout<<"hello world!";
کد معادل،برای محیط ویژوال چیه؟!
این داستان QT چیه؟!!! برنامه نویسی برنامه های گرافیکی ساده(مثلا یه ماشین حساب که تو دبیرستان با ویژوال بیسیک مینویسیم!!) با سی پلاس، توی محیط های مختلف QT و ویژوال استودیو فرق داره؟!! کدومش ساده تر،و البته قابل استفاده تر در لینوکسه؟!!!

یعنی یه برنامه ای نوشت،و طبق قانون خود سی پلاس،رو هر سیستم عاملی اجراش کرد!!

hassan1121
سه شنبه 12 مهر 1390, 19:30 عصر
سلام کسی الگوریتمی برای ترسیم نیم دایره یا کمان توپر و خالی داره ؟

jeson_park
سه شنبه 12 مهر 1390, 20:17 عصر
سلام کسی الگوریتمی برای ترسیم نیم دایره یا کمان توپر و خالی داره ؟
سلام
از الگوریتمMidpoint circle algorithm (http://en.wikipedia.org/wiki/Midpoint_circle_algorithm) استفاده کنید

hassan1121
جمعه 15 مهر 1390, 10:27 صبح
ممنون از راهنمایی تون ولی من الگوریتم پر سرعتی برای رسم نیم دایره (کمان)می خوام که تو پر یا تو خالی باشه البته می تونم با دستورات شرطی توی الگوریتم رسم دایره مشکل رو حل کنم ولی می خوام تا جایی که بشه از دستورات شرطی استفاده نکنم چون باید رسم خیلی سریع باشه بازم ممنون

senaps
جمعه 15 مهر 1390, 23:56 عصر
دوستان کسی نبود که به من،کتابی سایتی چیزی برای یاد گیری ویژوال سی پلاس معرفی کنه؟! من یه مدت رفتم دنبال سی شارپ،ولی حالا با اومدن وین 8،به نظرم اینده تو همون سی پلاس و محیط ویژوالشه!!
(با ویژوال سی پلاس،میشه هم برا مترو برنامه نوشت،هم برنامه های معمولی قبلی!!) خیلی راحت با یه کوچولو تغییر، php هم هست و نیازی هم نیست که از ماکروسافتی ها استفاده کنم!!
تنها مشکلی که می مونه،کامپایل برنامه ها برای لینوکسه که بعدا براش راه حل پیدا میکنم!! اگر میشه،اموزش ویژوال سی پلاس رو منابع اصلی بهم معرفی کنین؟

jeson_park
جمعه 22 مهر 1390, 23:37 عصر
دوستان کسی نبود که به من،کتابی سایتی چیزی برای یاد گیری ویژوال سی پلاس معرفی کنه؟! من یه مدت رفتم دنبال سی شارپ،ولی حالا با اومدن وین 8،به نظرم اینده تو همون سی پلاس و محیط ویژوالشه!!
(با ویژوال سی پلاس،میشه هم برا مترو برنامه نوشت،هم برنامه های معمولی قبلی!!) خیلی راحت با یه کوچولو تغییر، php هم هست و نیازی هم نیست که از ماکروسافتی ها استفاده کنم!!
تنها مشکلی که می مونه،کامپایل برنامه ها برای لینوکسه که بعدا براش راه حل پیدا میکنم!! اگر میشه،اموزش ویژوال سی پلاس رو منابع اصلی بهم معرفی کنین؟
قبلا در اینجا (http://barnamenevis.org/showthread.php?86565-%D9%86%DB%8C%D8%A7%D8%B2-%D8%A8%D9%87-%DA%A9%D8%AA%D8%A7%D8%A8-%D8%AF%D8%B1-%D8%B2%D9%85%DB%8C%D9%86%D9%87-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%88%DB%8C%DA%98%D9%88%D8%A7%D9%84-%D8%B3%DB%8C-%D9%BE%D9%84%D8%A7%D8%B3-%D9%BE%D9%84%D8%A7%D8%B3-%D8%8C-MFC-%D9%88-win32)بحث شده

sheytane_jonoob
چهارشنبه 04 آبان 1390, 22:32 عصر
77060
میشه اشکالهای این برنامه رو بهم بگین:گریه:

Celestial Girl
جمعه 09 دی 1390, 00:12 صبح
اگه بخوام در محیط سی 1هشتم از دایره رو رشم کنم با معادله ی دکارتی باید چیکار کنم ؟ منظور حلقه for رو از چند تا چند در نظر بگیرم ؟

msmhtvkl
سه شنبه 13 دی 1390, 15:19 عصر
سلام.من تازه عضو شدم.چندتا سوال دارم:
برنامه گرافیک متنی در ویژوال رو با win32بنویسم بهتره یاmfc?
میشه بگین از کدوم توابع باید استفاده کنم؟

mehrdad_dost
یک شنبه 14 اسفند 1390, 12:48 عصر
با سلام خدمت شما متاسفانه ضمیمه های تاپیک های اولیه مشکل دانلود دارند لطفا برسی کنید اگر مشکلی هست در صورت امکان محبت فرمایید دوباره ضمیمه کنید با تشکر از محبت دوستان به خصوص Nima_NF

one hacker alone
یک شنبه 31 اردیبهشت 1391, 16:59 عصر
من توی tc با graphicse.h گرافیک مینویسم یه جای کار نیاز به نخ دارم و اومدم از تابع Createthread در window.h استفاده کنم دیدم همچین هدرفایلی نداره الان موندم چکار کنم؟ window.h توی vc6 هست اما تو tc نیست راه حل؟

shahmohammadi
یک شنبه 31 اردیبهشت 1391, 20:38 عصر
بردن چند نخي بهtc شايد يكم سخت باشه. ولي آوردن توابع گرافيكي تي سي به ويندوز راحت هست. اين دو تا فايل براي اين منظور نوشته شدند:
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=2435&lngWId=3
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=2436&lngWId=3
قبلا ديده بودمشون ولي تا حالا ازشون استفاده نكردم. شايد به دردتون خورد.

one hacker alone
یک شنبه 31 اردیبهشت 1391, 21:44 عصر
مهندس این چیزی که شما میگی نیاز به تغیرات داره فکر کنم من نمیخوام کدم رو بازنویسی کنم میخوام با همون توابعی که توی graphicse.h بود کارم رو پیش ببرم
یعنی یه جورایی بتونم graphics.h رو توی vc6 استفاده کنم
راه حل؟

pe32_64
یک شنبه 31 اردیبهشت 1391, 22:03 عصر
مهندس این چیزی که شما میگی نیاز به تغیرات داره فکر کنم من نمیخوام کدم رو بازنویسی کنم میخوام با همون توابعی که توی graphicse.h بود کارم رو پیش ببرم
یعنی یه جورایی بتونم graphics.h رو توی vc6 استفاده کنم
راه حل؟
اون فایل graphics.h و خود tc برای سیستم عامل dos هستند. ،اما vc6 برای ویندوز.
واز اونجاییکه ویندوز فقط چند نخی داره،در tc شما کاری نمی تونی بکنی.
این graphics.h ماله داسه.

one hacker alone
دوشنبه 01 خرداد 1391, 01:26 صبح
جالبه یعنی نمیتونیم هیچ کاری بکنیم؟
Borland c++ کاری نمیتونه بکنه؟

shahmohammadi
دوشنبه 01 خرداد 1391, 10:27 صبح
من نگفتم كه شما خودتون چيز اضافه اي بنويسيد. كافيه اين فايل رو اينكلود كنيد. بعد توابع گرافيك دات اچ رو صدا بزنيد. اينطوري نام اون توابع رو صدا مي زنيد و در داخل تابعي كه صدا زده شده عباراتي هست كه معادل ويندوز دستور شماست.

one hacker alone
سه شنبه 02 خرداد 1391, 18:11 عصر
سلام مجدد
من یه بازی ساده راکت و توپ رو دارم مینویسم توی محیط tc
کد زیر رو در نظر بگیرید

while(1)
{
ball();
key();
}




خوب من نتونستم از چند نخی توی این محیط استفاده کنم چون نداره اما اومدم کل برنامه رو توی while گذاشتم
حالا حلقه کار میکنه و هر سری هم تابع ball رو اجرا میکنه که این تابع کارش اینه که توپ رو توی صفحه بچرخونه هم اینکه تابع key اجرا میشه که این تابع هنوز ننوشتم اما کارش اینه که باید چک کنه ببینه کلید های چپ و راست فشرده شدن یا نه که اگه شده باشن راکت هم تکون بخوره

اما مشکل اینه که الان برای چک کردن کلید های جهتی نمیدونم از چی استفاده کنم چون توبعی مانند getch منتظر میمونه کاربر کلیدی فشار بده و اگه اینجوری باشه فکر کنم حلقه متوقف بشه تا کاربر کلید بزنه و در این حال توپ هم حرکت نمیکنه



الان من برای تشخصی کلید های چپ و راست چکار کنم؟

mahllaa
شنبه 06 خرداد 1391, 23:08 عصر
سلام
من میخواستم برنامه های گرافیکی رو به زبان c بنویسم اما چون ویندوزم سوِن 64 بیتیه توربو سی روش نصبه کار نمیکنه
ایکس پی مجازی هم نصب کردم گرافیکش اونجا هم کار نمیکرد
توربو سی فیکس هم نصب کردم گرافیک اونم کار نمیکردhttp://www.daneshju.ir/forum/images/smilies/icon_pf%20%2834%29.gif
میشه کمکم کنید
خوهش میکنم
چه نرم افزاری نصب کنم که بتونم گرافیک با c بنویسم و خروجی بگیرمhttp://www.daneshju.ir/forum/images/smilies/danesh_33.gifhttp://www.daneshju.ir/forum/images/smilies/3w3rxamo3j6vcdwqep9i.gif

jeson_park
دوشنبه 08 خرداد 1391, 19:04 عصر
سلام
چه نرم افزاری نصب کنم که بتونم گرافیک با c بنویسم و خروجی بگیرمhttp://www.daneshju.ir/forum/images/smilies/danesh_33.gifhttp://www.daneshju.ir/forum/images/smilies/3w3rxamo3j6vcdwqep9i.gif
سلام
این (http://www.4shared.com/zip/E0HcT9zv/turbo_c_30_for_windows_7_64_bi.html)turbo c++ 64 بیتی هست
دانلود کنید و نصب کنید
اگه جواب نداد DOS Box نصب کنید و بعد روی DOS box (http://www.dosbox.com/download.php?main=1) توربو نصب کنید

و این (www.youtube.com/watch?v=Fc7D3HLi7Ps)هم آموزش نصب توربو C در DOS box
موفق باشید

jeson_park
سه شنبه 09 خرداد 1391, 00:03 صبح
الان من برای تشخصی کلید های چپ و راست چکار کنم؟
در ویندور(win32):

case WM_KEYDOWN:
switch (wParam) {
case VK_UP:
// up was pressed
break;

case VK_DOWN:
// down was pressed
break;

case VK_LEFT:
// Left was pressed
break;

case VK_RIGHT:
//right was pressed
break;

// etc.
}
break;


لیست کامل کد های صفحه کلید در اینجا (http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx)هست
برای لینوکس هم باید از getch و کد اسکی کلید ها استفاده کنید


Up key = 72
Left key = 75
Right key = 77
Down key = 80

این (http://www.uploadkon.ir/uploads/131e2aba729a99cc0cc85713b9a32efa.rar)هم یه نمونه ساده هم در مورد اون حلقه while، بررسی کنید به دردتون می خوره

mahllaa
سه شنبه 09 خرداد 1391, 22:16 عصر
ممنون استاد
ولی مشکلم حل نشد:ناراحت:

jeson_park
چهارشنبه 10 خرداد 1391, 13:16 عصر
ممنون استاد
ولی مشکلم حل نشد:ناراحت:
خب دقیقا چی کار کردین؟؟
کجاش به مشکا برخوردین؟؟

mahllaa
چهارشنبه 10 خرداد 1391, 22:48 عصر
کلا وقتی یه برنامه گرافیکی مینویسم دیگه کار نمیکنه!:ناراحت:
درست نصب شده اما نمیدونم چرا فقط گرافیکش کار نمیکنه برنامه معمولی جواب میده

jeson_park
جمعه 12 خرداد 1391, 14:03 عصر
کلا وقتی یه برنامه گرافیکی مینویسم دیگه کار نمیکنه!:ناراحت:
درست نصب شده اما نمیدونم چرا فقط گرافیکش کار نمیکنه برنامه معمولی جواب میده
توربو سی رو توی داریو سی نصب کردین؟؟
توی خود turboC آدرس فایل های کتابخانه ای رو دادین؟

mahllaa
جمعه 12 خرداد 1391, 21:27 عصر
87757
اینجارو ببینید!
من توی قسمت دایرکتوری ادرس رو وارد کردم و سیو کردم
هر کار میکنم include ها رو نمیشناسه!:ناراحت:

jeson_park
شنبه 13 خرداد 1391, 12:47 عصر
خب هیچی مشکل نداره پس!
تعجب می کنم!
خود کد رو هم چک کنید شاید غلط املایی داشته باشه!
یه بار پسوند .h هدر هار و پاک کنید ببنید کامپایل می شه
شما DOS box ره به صورت run as administrator اجرا کن
توی مسیر دادن هم اون \ آخر رو یعنی C:\TC\INCLUDE\ رو به صورت C:\TC\INCLUDE بنویسید

mahllaa
شنبه 13 خرداد 1391, 13:52 عصر
خب هیچی مشکل نداره پس!
تعجب می کنم!
خود کد رو هم چک کنید شاید غلط املایی داشته باشه!
یه بار پسوند .h هدر هار و پاک کنید ببنید کامپایل می شه
شما DOS box ره به صورت run as administrator اجرا کن
توی مسیر دادن هم اون \ آخر رو یعنی C:\TC\INCLUDE\ رو به صورت C:\TC\INCLUDE بنویسید
همش همینطوره که شما گفتید
اما اجرا نمیشه
اون بک اسلش اخرش رو هم برداشتم هم گذاشتم
include ها هم بدون دات اچ اجرا نمیشه:ناراحت:
اصلا نمیفهمم چرا دارایو های منو نمیشناسه! به جای دارایو های C D E F نوشته A B D Z :متفکر:
run as admin زدم تفاوتی نمیکنه!
کدها هم مطمئنم درسته!

yasoob
یک شنبه 18 تیر 1391, 20:50 عصر
با سلام و سپاس

دوستان ، من یک برنامه گرافیکی در win32 دارم. به این صورت که یک تابع در هر بار فراخوانی یک تصویر به فرمت bitmap می سازد و سپس آن را بر روی dialog pannel کاربر نمایش می دهد. این کار بطوری اتفاق می افتد که کاربر از آن تصور یک انیمیشن در تصویر را دارد.

زمانی که من برنامه را اجرا می کنم تا مدتی همه چیز خوب است اما به یکباره میزان حافظه commit charge شروع به افزایش می کند و برنامه پس از مدتی کاملا هنگ می کند.

بارها امتحان کردم . بدون بارگذاری تصویر بر روی دیالوگ باکس هیج مشکلی در اجرای برنامه پیش نمی یاد. اما با وجودی که من از روتین های متداول بارگذاری تصویر استفاده می کنم ، همیشه بعد از مدت زمانی این مشکل پیش می یاد.

لطفا راهنمایی ام کنید.


با تشکر

sha8046
سه شنبه 07 شهریور 1391, 16:04 عصر
سلام مجدد
من یه بازی ساده راکت و توپ رو دارم مینویسم توی محیط tc
کد زیر رو در نظر بگیرید

while(1)
{
ball();
key();
}




خوب من نتونستم از چند نخی توی این محیط استفاده کنم چون نداره اما اومدم کل برنامه رو توی while گذاشتم
حالا حلقه کار میکنه و هر سری هم تابع ball رو اجرا میکنه که این تابع کارش اینه که توپ رو توی صفحه بچرخونه هم اینکه تابع key اجرا میشه که این تابع هنوز ننوشتم اما کارش اینه که باید چک کنه ببینه کلید های چپ و راست فشرده شدن یا نه که اگه شده باشن راکت هم تکون بخوره

اما مشکل اینه که الان برای چک کردن کلید های جهتی نمیدونم از چی استفاده کنم چون توبعی مانند getch منتظر میمونه کاربر کلیدی فشار بده و اگه اینجوری باشه فکر کنم حلقه متوقف بشه تا کاربر کلید بزنه و در این حال توپ هم حرکت نمیکنه



الان من برای تشخصی کلید های چپ و راست چکار کنم؟

تابع kbhit() هر دفعه چک میکنه که اگر کلیدی فشرده شد که کلید رو بررسی میکنه وگرنه که بقیه کارها رو انجام میده .
تو help بورلند در موردش خوب توضیح داده .

lpeiatb
پنج شنبه 20 مهر 1391, 18:09 عصر
دوستان درس گرافیک دارم این ترم open gl با c++6
یه چند خط کد هست که موقع کامپایل کردن این ارور رو میده

error C2447: missing function header (old-style formal list?)
راهنمایی میکنید مربوط به چی میشه این ارور
تشکر

kami45
چهارشنبه 01 آذر 1391, 12:33 عصر
سلام از شما به خاطر این تاپیک مفید تشکر می کنم.وقتی که من با استفاده از کامپایلر بورلند سی ++ وتوابع گرافیک که تو کتاب جعفر نژاد قمی توضیح داده برنامه می نویسم حتی برای ساده ترین برنامه ها هم اررور میده که نمیتونه bgi رو پیدا کنه لطفا راهنماییم کنید

kami45
پنج شنبه 09 آذر 1391, 13:42 عصر
دوباره سلام ، حدود دو هفته هست که تو این تاپیک درخواست کمک دادم ولی کسی کمک نمیکنه.
تعریف کردنه بی جی آی به بورلند سی برای اجرا کردن محیط گرافیکی واقعا فکرم رو مشغول کرده لطفا کمکم کنید . اجرتون با خدا

laveran
شنبه 18 آذر 1391, 21:00 عصر
میخوام طراحی فونت برای یک کلمه ی ثابت مثل " مهندسی " بکنم یعنی از کاربر ورودی نمیگیره نیاز نیست فونت تمام حروف الف ب رو طراحی کنم فقط طراحی فونت "مهندسی" لازمه. کداشو طراحی کردم اما موقع اجرا هیچ پیغامی نمیده و در فرم بجای نشان دادن کلمه ی مهندسی صفحه ی سفیدی ظاهر میشه. اگه اشکال برنامه رو بگید ممنون میشم


#include <glut.h>
GLubyte rasters[7][32]= {
{0x00,0x00,0x00,0x0e,0x011,0x11,0x11,0xff,0xff,0xf f,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x18,0xdc,0xf6,0x7b,0x39,0x14 ,0x12,0x19,0x0e,0x00,0x00,0x00},
{0x00,0x00,0x00,0x20,0x67,0xff,0xff,0x98,0x0e,0x00 ,0x20,0x00,0x00,0x00,0x00,0x00},
{0x00,0x38,0x1c,0x0e,0x06,0x02,0x01,0x03,0x07,0x0e ,0x0c,0x08,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x80,0xff,0x7f,0x15,0x00,0x00},
{0x00,0x00,0x00,0x00,0x30,0x78,0xf8,0xcc,0x85,0x83 ,0x81,0x80,0x80,0x40,0x20,0x10},
{0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01 ,0x01,0x01,0x00,0x00,0x00,0x00}
};
//-------------------------------------------------------
void myDisplay(void){
glLoadIdentity();
glClearColor(1, 1, 1, 1);
glShadeModel(GL_SMOOTH);
glClear(GL_COLOR_BUFFER_BIT);
glOrtho(0,700,0, 500,-1,1);
glColor3f(0.1, 0.6, 0.2);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glRasterPos2i (100, 100);
glBitmap(8,16,0.0, 0.0, 12.0, 0.0, rasters[7]);
glBitmap(8,16,0.0, 0.0, 12.0, 0.0, rasters[7]);
glBitmap(8,16,0.0, 0.0, 12.0, 0.0, rasters[7]);
glBitmap(8,16,0.0, 0.0, 12.0, 0.0, rasters[7]);
glBitmap(8,16,0.0, 0.0, 12.0, 0.0, rasters[7]);
glBitmap(8,16,0.0, 0.0, 12.0, 0.0, rasters[7]);
glBitmap(8,16,0.0, 0.0, 12.0, 0.0, rasters[7]);
glFlush();
}
//-------------------------------------------------------
void main(void)
{
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(700,500);
glutInitWindowPosition(100,100);
glutCreateWindow("Font");
glutDisplayFunc(myDisplay);
glutMainLoop();
}

mahsa69
یک شنبه 03 دی 1391, 19:46 عصر
سلام
چجوری میتونم این قابلیت رو تو برنامه بگذارم که جسمم رو بتونم از منو تغییر بدم....این کارو برای رنگ پس ضمینه انجام دادم
برای تغییر شکل باید چکار کرد؟؟؟

rasouli_70
دوشنبه 04 دی 1391, 12:18 عصر
با عرض سلام خدمت تمام برنامه نويسهاي عزيز
چند تا تمرين داشتم كه به زبان openGl است.(ميدونم اينجا جاش نيست )
تورو خدا كمكم كنيد.اينم ايميلم اگه نياز هست( rasouli_70@yahoo.com)
مرسي
1. برنامه اي بنويسيد كه با داشتن نقاط شروع و پايان يك خط با استفاده از الگوريتم برزنهام آنرا رسم كنيد.
2. برنامه اي بنويسيد كه با استفاده از مختصات دو نقطه از طريق الگوريتم هاي رسم خط DDA و برزنهام خطي بين آنها رسم كند.
3. برنامه اي بنويسيد كه دايره را با الگوريتم نقطه مياني رسم كند.
4. برنامه اي بنويسيد كه يك چند ضلعي را ايجاد كرده و محيط داخلي آنرا بصورت شطرنجي رنگ آميزي كنيد.

rasouli_70
دوشنبه 11 دی 1391, 18:12 عصر
سلام
بازي به زبان C++ البته گرافيكي هم نبود نبود.
اگه كسي داره كمكم كنه

maryam.eng
جمعه 04 اسفند 1391, 19:34 عصر
سلام من برای C++بانرم افزار ویژوال استدیو کار می کنم ولی نمی دونم برای نوشتن برنامه های گرافیکی چیکار کنم و از چه توابعی استفاده کنم .
ممنون می شم اگه تو این زمینه به من کمک کنید و اگه فایلی در مورد آموزش گرافیک دارید ،لینکشو بزارید.
باتشکر

police-lipid
جمعه 23 فروردین 1392, 17:33 عصر
سلام دوستان ، من روی ویندوز7 ، vmware دارم و رو اون windows xp ریختم حالا می خوام برنامه گرافیکی با C++ بنویسم ,gd با Turbo C++ 4.5 که در ویندوز xp نصب کردم ارور میده ، شما یک نگاهی به سورس بندازید ، اون خطی که قرمز رنگ هست مشکل منه، چیکار باید کرد ؟

#include <stdio.h>
#include <conio.h>
#include <graphics.h>
#include <stdlib.h>
int main()
{
int driver=DETECT,mode=0,errorcode;
initgraph(&driver,&mode,"c:\red\language\tc\bgi");
errorcode=graphresult();
if(errorcode!=grOk)
{
printf("error is %s:", grapherrormsg(errorcode));
printf("\n press any key to continue");
getch();
exit(1);
}
setcolor(16);
setcolor(6);
moveto(100,100);
linerel(0,100);
linerel(200,0);
linerel(0,-100);
linerel(-200,0);
getch();
closegraph();
return 0;
}

police-lipid
جمعه 23 فروردین 1392, 17:37 عصر
#include <stdio.h>
#include <conio.h>
#include <graphics.h>
#include <stdlib.h>
int main()
{
int driver=DETECT,mode=0,errorcode;
initgraph(&driver,&mode,"c:\red\language\tc\bgi");
errorcode=graphresult();
if(errorcode!=grOk)
{
printf("error is %s:", grapherrormsg(errorcode));
printf("\n press any key to continue");
getch();
exit(1);
}
setcolor(16);
setcolor(6);
moveto(100,100);
linerel(0,100);
linerel(200,0);
linerel(0,-100);
linerel(-200,0);
getch();
closegraph();
return 0;
}

police-lipid
جمعه 23 فروردین 1392, 17:48 عصر
این مشکل رو میشه بگید چه جوری باید حل کرد ؟؟؟؟؟؟؟؟
102702

69Arash69
چهارشنبه 28 فروردین 1392, 12:18 عصر
با عرض سلام خدمت تمام برنامه نويسهاي عزيز
چند تا تمرين داشتم كه به زبان openGl است.(ميدونم اينجا جاش نيست )
تورو خدا كمكم كنيد.اينم ايميلم اگه نياز هست( rasouli_70@yahoo.com)
مرسي
1. برنامه اي بنويسيد كه با داشتن نقاط شروع و پايان يك خط با استفاده از الگوريتم برزنهام آنرا رسم كنيد.
2. برنامه اي بنويسيد كه با استفاده از مختصات دو نقطه از طريق الگوريتم هاي رسم خط DDA و برزنهام خطي بين آنها رسم كند.
3. برنامه اي بنويسيد كه دايره را با الگوريتم نقطه مياني رسم كند.
4. برنامه اي بنويسيد كه يك چند ضلعي را ايجاد كرده و محيط داخلي آنرا بصورت شطرنجي رنگ آميزي كنيد.

1. برنامه اي بنويسيد كه با داشتن نقاط شروع و پايان يك خط با استفاده از الگوريتم برزنهام آنرا رسم كنيد.
#include <windows.h>

#include <GL/glut.h>

#include <stdio.h>

#include <math.h>

void init(void){

glClearColor(1.0,1.0,1.0,0.0);

glMatrixMode(GL_PROJECTION);

gluOrtho2D(0.0,200.0,0.0,150.0);

}

void setPixel(GLint x,GLint y)

{

glBegin(GL_POINTS);

glVertex2i(x,y);

glEnd();

}


void linebres ( int x0,int y0,int x1 ,int y1)
{


int dx = (x1 - x0), dy = (y1- y0);
int p = 2 * dy - dx;
int twody = 2 * dy, towdyminusdx = 2 * (dy -dx);
int x,y;

if (x0>x1){
x = x1;
y=y1;
x1=x0;
}
else {
x = x0;
y = y0;

}
setPixel (x,y);
while (x<x1){
x++;
if (p < 0)
p += twody;
else {
y++;
p+= towdyminusdx;
}

setPixel (x,y);
}
}

void bresenham()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.0,0.0,0.0);
linebres (10,10,120,128);
glFlush();
}
int main(int argc,char **argv)
{

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);

glutInitWindowPosition(0,0);

glutInitWindowSize(500,500);

glutCreateWindow("ترسيم خط برزنهام");

init();
glutDisplayFunc(bresenham);

glutMainLoop();

return 0;

}

69Arash69
چهارشنبه 28 فروردین 1392, 12:22 عصر
این مشکل رو میشه بگید چه جوری باید حل کرد ؟؟؟؟؟؟؟؟
102702

هدر grphics تحت داس اجرا ميشه
اين كد هم بايد داشته باشه:
void main()
{
int driver=DETECT,mode;
initgraph(&driver,&mode,"c:\\tc\\bgi");
getch();
closegraph();
}

matmatin
چهارشنبه 04 اردیبهشت 1392, 22:59 عصر
با سلام و عرض خسته نباشید
من یه برنامه دارم
وقتی با توربو سی پلاس پلاس اجراش میکنم این ارور را میده
error BGI graphics not supported under Windows
چطوری باید اجراش کنم؟

moeincreed
پنج شنبه 05 اردیبهشت 1392, 20:55 عصر
سلام
من یه مشکلی برام پیش اومده dev cبرنامه های گرافیکی رو اجرا نمیکنه.ویندوزم 8 x64 هستش از نسخه ی 5.3وهم 5.4استفاده کردم فایده نداشته لطفا کمک کنید.
خداحافظ
http://upload.tehran98.com/img1/1jilshnlcnr5al3vw4pa.jpg
http://upload.tehran98.com/img1/1jilshnlcnr5al3vw4pa.jpg

69Arash69
سه شنبه 10 اردیبهشت 1392, 19:03 عصر
اين ارور به خاطر هدر #graphics.h است كه بايد اين قطعه كد رو در قسمت بدنه اصلي وارد كنيد و همچنين بايد از برنامه تحت داس اجرا كنيد با تروبو كار نمي كنه
void main()
{
int driver=DETECT,mode;
initgraph(&driver,&mode,"c:\\tc\\bgi");
getch();
closegraph();
}

adamak...
دوشنبه 16 اردیبهشت 1392, 20:19 عصر
با سلام به همه
من يه برنامه ميخواستم كه خطوط تصادفي رنگارنگ با سايز بين 40 تا 100 پيكسل برام چاپ كنه اما تو قسمت 40 تا 100 پيكسل به مشكل خوردم تاپيكم دادم ولي كسي جواب كاملي بهم نداد كسي ميتونه كمك كنه اينم ادرس
http://www.barnamenevis.org/showthread.php?396938-%D8%AA%D9%88%D9%84%D9%8A%D8%AF-%D8%AE%D8%B7%D9%88%D8%B7-%D8%AA%D8%B5%D8%A7%D8%AF%D9%81%D9%8A-%D8%AF%D8%B1-%D8%B5%D9%81%D8%AD%D9%87

zmolaie
چهارشنبه 01 خرداد 1392, 23:37 عصر
با سلام
ميخواستم بدونم چطوري ميشه يك شكل رو در صفحه حركت داد توي محيط dev -C++‎
ممنون ميشم اگه كسي بتونه كمك كنه:عصبانی++:

Voodoo14
چهارشنبه 01 خرداد 1392, 23:43 عصر
یعنی چی!؟پس DirectX چی؟

sobhan13
دوشنبه 06 خرداد 1392, 15:14 عصر
با سلام.

کسی تو نو شتن يه برنامه اي که قسمتهاي مختلفش رو لينك کنم طوري كه اگر با ماوس روي آاونا كليك كنيم دستور مورد نظر رو انجام بده مثلا بره تو یه صفحه دیگه .تو اين حالت بايد چه جوري ماوس رو كنترل كنم كه وقتي كليك كرد این كار رو انجام بده اميدوارم منظورم رو رسونده باشم.

msh1992
پنج شنبه 09 خرداد 1392, 12:19 عصر
سلام کسی میدونه معادل graphics.h در ++visual c چیه؟

MR_Rohani
پنج شنبه 30 خرداد 1392, 13:54 عصر
سلام یک ساعت آنالوگ و خیلی ساده با c میخوام
اگه با ساعت سیستم کار نکنه و کداش کم باشن بهتره
مثلا با یه تایمر کار کنه.

namira-group
پنج شنبه 06 تیر 1392, 10:39 صبح
حتما اينجارو ببينيد. 11 بخش آموزشي ايجاد شده:
http://nn4e.blogfa.com/post/133

moh3en_f1
جمعه 24 آبان 1392, 08:33 صبح
سلام
من چند تا تمرین برنامه نویسی (گرافیک کامپیوتری) باید انجام بدم؟ ولی نمیدونم از کجا شروع کنم؟
من یکی از سوالات رو اینجا میزارم اگه کسی میتونه حلش کنه بهم بگه. خواهش میکنم یاری کنید
تمرین ها بسیار زیاد هستند اگه کسی میتونه حل کنه اعلام کنه. یا حداقل همین یکی رو حل کنید تا من یه نمونه برای باقی تمرین ها داشته باشم. خیلی ممنونم
برنامه ای بنویسید که یک شی را حول نقطه دوران به طور مستمر دوران دهد. برای هر دوران متوالی از زوایای کوچک استفاده کنید و تقریب ها برای توابع سینوس و کسینوس را جهت تسریع محاسبات استفاده کنید. زوایه دوران برای هر مرحله را طوری انتخاب کنید که شئ در کمتر از 30 ثانیه یک دور کامل بزند. برای جلوگیری از افزایش خطاهای مختصاتی، در آغاز هر چرخش جدید مقادیر مختصاتی اصلی را از نو تنظیم کنید.

saied-jackson
دوشنبه 25 آذر 1392, 21:28 عصر
سلام دوستان من میخوام تو توربو c یه برنامه بنوسیم که چرخش 360 درجه داشته باشه میشه یه تیکه کد یا راهنمایی کنید

motherboard
سه شنبه 24 دی 1392, 20:29 عصر
عکس زیر برای یه برنامه گرافیکی است که ارور داره.به نظرتان چی کار باید کرد که این ارور بره.همه ی کارها رو برای فعال کردن گرافیک در dev طبق اموزش های اینترنتی انجام دادم.البته امیدوارم که این پست پاک نشود.تنها یه راهنمایی کوچک می خواهم .هر برنامه گرافیکی را هم که می نویسم همیشه خطای پایین همراهشه.با تشکر و سپاس.
115382115383

کامبیز اسدزاده
سه شنبه 24 دی 1392, 21:32 عصر
این متغیر int right; بهش مقدار میرسه ؟ فکر کنم باید یه جایی بهش مقدار رو بدی تا بتونه جایگزین کنه احتمالا چیزی نمیگیره که خطا میده.

subsub
پنج شنبه 26 دی 1392, 13:29 عصر
عکس زیر برای یه برنامه گرافیکی است که ارور داره.به نظرتان چی کار باید کرد که این ارور بره.همه ی کارها رو برای فعال کردن گرافیک در dev طبق اموزش های اینترنتی انجام دادم.البته امیدوارم که این پست پاک نشود.تنها یه راهنمایی کوچک می خواهم .هر برنامه گرافیکی را هم که می نویسم همیشه خطای پایین همراهشه.با تشکر و سپاس.
115382115383

اگه به خطا دقت کنید جواب سوالتون رو میگیرید. میگه که متغیر right دوباره تعریف شده. شما در همون عکس دوم همون خطی که قرمر شده رو دقت کنید، دوبار right رو تعریف و مقداردهی اولیه کردید. با توجه به نام سایر متغیرها احتمالاً باید right اول رو به up تغییر بدید.

motherboard
پنج شنبه 26 دی 1392, 14:12 عصر
اگه به خطا دقت کنید جواب سوالتون رو میگیرید. میگه که متغیر right دوباره تعریف شده. شما در همون عکس دوم همون خطی که قرمر شده رو دقت کنید، دوبار right رو تعریف و مقداردهی اولیه کردید. با توجه به نام سایر متغیرها احتمالاً باید right اول رو به up تغییر بدید.


سلام خسته نباشید کاربر (subsub),منظور شما این است که در سورس اصلی برنامه در داخل پرانتز initwindow اعداد را تکراری وارد کردم؟اگر ممکن است راهنمایی که در بالا اشاره کردید را به صورت ساده تر و
برایم توضیح دهید.به این شکل که من در کدام خط و چگونه مشکل را برطرف کنم.الان چندی است که این مشکل ذهنم را مشغول کرده.احیانا اگر کامپایلر dev دارید شما هم یک تستی بفرمایید(البته بی ادبی نباشد)چون من هنوز در ابتدای راه قرار دارم و مانند شما عزیزان خیلی با اصطلاحات اشنا نیستم.البته برنامه های غیر گرافیکی به راحتی اجرا میکنم.اما این برنامه که گرافیکی است اجرا نمی شود.با تشکر.

sinashan
جمعه 27 دی 1392, 09:44 صبح
با سلام آقا لطفا منو راهنمایی کنید.استاد مبانیمون یه پروژه داده که یکی از بازی های قدیمی آتاری رو به C بنویسید و خودش یه راهنما گذاشته که از graphics.h استفاده کنید.ولی هر کاری کردم و هر آموزشیو که رفتم جواب نداد و انگار اصن نمیشناستش.کامپایلرم هم dev c++ ورژن 4.9.9.2 هستش.لطفا راهنمایی کنید وقت تحویل پروژه نزدیکه و من هنوز هیچ کاری نکردم.

saba4446
جمعه 30 خرداد 1393, 21:36 عصر
سلام خسته نباشید
کد زیر مربوط به تبدیل reg to nfaدر زبانc++ هستش
ارور داره میشه کمکم کنید؟؟؟؟



Regular exp to nfa:ناراحت::ناراحت::ناراحت:










# include <stdio.h>



# include <conio.h>






# include <string.h>



# include <ctype.h>







int ret[100];



static int pos=0;






static int sc=0;



void nfa(int st,int p,char *s)






{ int i,sp,fs[15],fsc=0;



sp=st;pos=p;sc=st;






while(*s!=NULL)



{if(isalpha(*s))






{ret[pos++]=sp;



ret[pos++]=*s;






ret[pos++]=++sc;}



if(*s=='.')






{sp=sc;



ret[pos++]=sc;






ret[pos++]=238;



ret[pos++]=++sc;






sp=sc;}



if(*s=='|')






{sp=st;



fs[fsc++]=sc;}






if(*s=='*')



{ret[pos++]=sc;






ret[pos++]=238;



ret[pos++]=sp;






ret[pos++]=sp;



ret[pos++]=238;






ret[pos++]=sc;



}






if (*s=='(')



{char ps[50];






int i=0,flag=1;



s++;






while(flag!=0)



{ps[i++]=*s;






if (*s=='(')



flag++;






if (*s==')')



flag--;






s++;}



ps[--i]='\0';






nfa(sc,pos,ps);



s--;






}



s++;






}



sc++;






for(i=0;i<fsc;i++)



{ret[pos++]=fs[i];






ret[pos++]=238;



ret[pos++]=sc;






}



ret[pos++]=sc-1;






ret[pos++]=238;



ret[pos++]=sc;






}



void main()






{ int i;



char *inp;






clrscr();



printf("enter the regular expression :");






gets(inp);



nfa(1,0,inp);






printf("\nstate input state\n");



for(i=0;i<pos;i=i+3)






printf("%d --%c--> %d\n",ret[i],ret[i+1],ret[i+2]);



printf("\n");






getch();



}

behinam
سه شنبه 18 آذر 1393, 15:54 عصر
سلام به همگی خسته نباشید:بوس:
عاغا این استاد ما یه پروژه داده من نمیتونم درستش کنم ازش سر در نمیارم :ناراحت:
لطفاً کمکم کنید :گریه:
سه ترمه دارم این درسو میفتم :عصبانی++:


سوالش اینه
لاک پشتی در صفحه 20*20 وجود دارد و همه خانه ها خالی هستند.
1)یک دستور از کاربر دریافت میکند.
2)برنامه شما صفحه 20 * 20 را نمایش دهد. اگر دستور نبود به مرحله برگردد.
در خانه ای که لاک پشت قرار دارد و قلم آن پایین میباشد یک ستار چاپ میشود.
لاک پشت در سطر 5 و ستون 5 میباشد.
جهت لاک پشت به سمت راست میباشد
1) قلم را پایین می آورد 'D'
2) قلم را بالا می آورد 'A'
3)یک خانه به جلو 'F'
4) 90 درجه به چپ 'L'
4)90 درجه به راست 'R'
6) خروج ازبرنامه 'Q'



دوستان لطفاً کمکم کنیییید این پروژه رو تحویل بدم دوباره نیفتمش :ناراحت:

amin.mir123
دوشنبه 08 دی 1393, 21:41 عصر
با سلام ببخشید من یک سوال داشتم

من در برنامه ای که می نویسیم ( ++dev c) می خواهم تا یک متغیر را در محیط گرافیکی ببینم ، هر کاری کردم درست در نیامد

لطفا مرا راهنمایی کنید

chikar
چهارشنبه 06 اسفند 1393, 19:55 عصر
به شما Qt رو پیشنهاد می کنم که به شما امکان استفاده از مدرن ترین فریمورک C++ هم برای Application و هم برنامه نویسی گرافیک و خیلی چیزهای دیگر رو می ده
به تالار کیوت و هم خانواده هایش مراجعه شود (http://barnamenevis.org/forumdisplay.php?111-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%AF%D8%B1-%D9%85%D8%AD%DB%8C%D8%B7-QT-%D9%88-%D9%87%D9%85-%D8%AE%D8%A7%D9%86%D9%88%D8%A7%D8%AF%D9%87-%D9%87%D8%A7%DB%8C%D8%B4)

m_37_m
شنبه 23 آبان 1394, 09:10 صبح
با سلام
کسی در مورد تبدیل فرمت فایلهای BMP به YUV اطلاعات داره ؟
چطور کار می کنه ؟
ممنون .:متفکر:

ali.zl
شنبه 19 دی 1394, 16:01 عصر
سلام

وقتتون بخیر

اساتید محترم چند وقتی هستش که در پی نمایش فایل های تصویری ؛ عکس و فیلم؛ تو C++‎‎‎ (کنسول) هستم

با open cv موفق به نمایش تصویر شدم اما راهی برای پخش فیلم به همراه صداش پیدا نکردم...
در کل میخوام یه نرم افزار نمایش فیلم با قابلیت کنترل یوزر مثل پلی و پاوز و ... تو C++‎‎‎ بنویسم...

ممنون میشم اگه تو رسیدن به هدفم کمکم کنید

سپاس فراوان

3pid71
پنج شنبه 09 اردیبهشت 1395, 12:16 عصر
ولی من مستندات فارسی رو یک جا جمع کردم همراه چند کتاب دیگه
دانلود کنید اگر دوست داشتید.
geraphic.ir
هم سایتمه.



سایتتون باز نمیشه متاسفانه

3pid71
پنج شنبه 09 اردیبهشت 1395, 12:28 عصر
سلام به همگی

دوستان من درگیر یه برنامه هستم که دارم توی محیط ویژوال استادیو با استفاده از کتابخانه OpenGL و به زبان C++‎‎‎‎‎‎‎ برنامه م رو می نویسم.


من یک مش سطحی تعریف کردم که با استفاده از حرکات ماوس و پیاده سازی معادلات حاکم بر بافت باید روی این مش تغییراتی ایجاد بشه.(جابه جایی نودها و ...)

برای پیشرفت کارم باید مش سطحی که الان دارم رو به یک مش حجمی/عمقی/چندلایه تبدیل کنم.


به نظرم اومد از دستور glScale مش اصلیم رو shrink کنم و تو در تو رسمش کنم. مثل شکل زیر

ولی با این کار مختصات مش های shrink شده جایی سیو نمیشه.یعنی در اصل توی مختصات ها تغییری ایجاد نمیشه و فقط ماتریس نمایشمون تغییر می کنه. میخوام ببینم کسی راهی به ذهنش میرسه؟


چه دستوری از OpenGL باشه، چه یک نرم افزار دیگه که بتونه برای من همچین مشی ایجاد کنه.


لازم به ذکره که مختصات نودهای مش و یال ها توی یک فایل .vtk ذخیره شده که میشه توی محیط های دیگه مثل متلب هم خونده بشه.



ممنون از همگی:قلب:

amin1softco
پنج شنبه 09 اردیبهشت 1395, 13:34 عصر
در openGL هر ویو و حالتی که تبدیل می کنید ماتریس خودشو داره یعنی بعد از اینکه اون ماتریس توسط glscale تغییر پیدا کرد می تونید محتویاتشو دوباره لود کنید:
یک نگاهی به این دو تا لینک بندازید :
https://www.opengl.org/archives/resources/faq/technical/transformations.htm
http://www.opengl-tutorial.org/beginners-tutorials/tutorial-3-matrices/


GLfloat m[16];
glGetFloatv (GL_MODELVIEW_MATRIX, m);

3pid71
جمعه 10 اردیبهشت 1395, 18:08 عصر
در openGL هر ویو و حالتی که تبدیل می کنید ماتریس خودشو داره یعنی بعد از اینکه اون ماتریس توسط glscale تغییر پیدا کرد می تونید محتویاتشو دوباره لود کنید:
یک نگاهی به این دو تا لینک بندازید :
https://www.opengl.org/archives/resources/faq/technical/transformations.htm
http://www.opengl-tutorial.org/beginners-tutorials/tutorial-3-matrices/


GLfloat m[16];
glGetFloatv (GL_MODELVIEW_MATRIX, m);



ممنون بابت پاسخ و لینک هایی که گذاشتید.
من دستورات زیر رو اضافه کردم ولی باز موفق به بدست آوردن مختصات های جدید نشدم.
ماتریس modelview یه ماتریس 16تایی هست.و ماتریس مش من نزدیک به 500 تا راس داره که هر کدوم 3 مولفه x,y,z داره. یعنی ماتریسش 1500 خونه داره تقریبا.

حالا ضرب این ماتریس توی اون ماتریس چجوریه؟



GLfloat vertices_base[MAX_NODE],vertices[MAX_NODE],vox[MAX_NODE];
GLfloat m[16];
.
.
.
.

glPushMatrix();
glTranslatef(-50,80,80);
glVertexPointer(3, GL_FLOAT, 0,vertices);
glScalef(0.5,0.5,0.5);
glColor4f (1.0, 1.0, 0.0,0.0);
glDrawElements(GL_TRIANGLES, number_triangle*3, GL_UNSIGNED_INT,indices);
glGetFloatv (GL_MODELVIEW_MATRIX, m);
//glLoadMatrixf(m);
glMultMatrixf(vertices);
glGetFloatv (GL_MODELVIEW_MATRIX, vox);
//printf("yellow model=%f\n",vertices[0]);
glPopMatrix();

amin1softco
شنبه 11 اردیبهشت 1395, 04:01 صبح
ممنون بابت پاسخ و لینک هایی که گذاشتید.
من دستورات زیر رو اضافه کردم ولی باز موفق به بدست آوردن مختصات های جدید نشدم.
ماتریس modelview یه ماتریس 16تایی هست.و ماتریس مش من نزدیک به 500 تا راس داره که هر کدوم 3 مولفه x,y,z داره. یعنی ماتریسش 1500 خونه داره تقریبا.

حالا ضرب این ماتریس توی اون ماتریس چجوریه؟



GLfloat vertices_base[MAX_NODE],vertices[MAX_NODE],vox[MAX_NODE];
GLfloat m[16];
.
.
.
.

glPushMatrix();
glTranslatef(-50,80,80);
glVertexPointer(3, GL_FLOAT, 0,vertices);
glScalef(0.5,0.5,0.5);
glColor4f (1.0, 1.0, 0.0,0.0);
glDrawElements(GL_TRIANGLES, number_triangle*3, GL_UNSIGNED_INT,indices);
glGetFloatv (GL_MODELVIEW_MATRIX, m);
//glLoadMatrixf(m);
glMultMatrixf(vertices);
glGetFloatv (GL_MODELVIEW_MATRIX, vox);
//printf("yellow model=%f\n",vertices[0]);
glPopMatrix();







به نظرم شما باید یکمی بیشتر اصول اپن چی ال را بررسی کنید و بعد از اینکه ماتریس مدل ویو را استخراج کردید با ضرب کردن در مختصات همون نقاط می تونید چرخش یافتشونو بدست بیارید
140187
همینطور که در این عکس می بینید مختصات شی یا object coordinate در ماتریس مدل ویو ضرب می شه و همینطور تا آخر پیش میره
http://www.glprogramming.com/red/chapter02.html

3pid71
شنبه 11 اردیبهشت 1395, 12:59 عصر
به نظرم شما باید یکمی بیشتر اصول اپن چی ال را بررسی کنید و بعد از اینکه ماتریس مدل ویو را استخراج کردید با ضرب کردن در مختصات همون نقاط می تونید چرخش یافتشونو بدست بیارید
140187
همینطور که در این عکس می بینید مختصات شی یا object coordinate در ماتریس مدل ویو ضرب می شه و همینطور تا آخر پیش میره
http://www.glprogramming.com/red/chapter02.html


ممنون از پاسخ هاتون:چشمک:

ضرب کردن رو متوجه شده بودم ولی نمی دونستم ضرب ماتریسیشو چطور انجام بدم که ماتریس جاری رو گرفتم بردم تو متلب و مختصات رئوس به راحتی ضرب کردم و بعد فایلو تو ویژوال بازخوانی کردم.

فقط الان نمی دونم چطور این مش ها با سایزهای مختلف رو به یکدیگه مربوط کنم.


آیا کسی نرم افزاری میشناسه که خودش مش حجمی (مش عمقی / یعنی مشی که فقط سطح رو در نظر نگیره و داخل اون شی هم نود طراحی کنه) بسازه؟

code1391
پنج شنبه 25 آذر 1395, 13:46 عصر
سلام دوستان و اساتید عزیز،وقت بخیر..
سوالی دارم که ممنون میشم اساتید راهنمایی کنند.
در رسم دایره در c++،اگه بخوایم از 15 رنگ واقع در setcolor،رنگ مورد نظر رو از ورودی بگیریم،از چه روشی استفاده کنیم که کاربر هر رنگی رو نوشت،کدش در بخش رنگ دایره ثبت بشه؟
سوالم رو بهتر بپرسم،
#include <graphics.h>
#include<iostream>
using namespace std;
int main()
{
int x=100,y=100,r;
cout<<"shoae dayere ra vared konid: "<<"\n";
cin>>r;
initwindow(300, 200);
cout<<"mikhahid dayere che rangi bashad?"<<"\n";
؟؟؟؟
setcolor();
؟؟؟؟
circle(x,y,r);
getch();
}
در واقع می خوام برنامه به صورتی باشه که از کاربر رنگ مورد نظر رو بپرسه،بعد از ورود کاربر کد رنگ واره شده رو در تابع setcolor جاگذاری کنه..
ممنونم.

morningstars
چهارشنبه 20 اردیبهشت 1396, 16:56 عصر
همه اینجا ویندوز کار میکنند ؟
کیوت یک چهارچوب عالی برای سی پلاس پلاسه قابل حمل هم است و قابل اجرا بر روی همه نوع سیستم عاملی هم هست یه خورده تحقیق بفرمایید دوستان میفهمید بنده چی عرض میفرمایم
برای سی هم از اوپن جی ال استفاده کنید که قدرتش رو ندید توی یونیکس و سیستم های گنو/لینوکسی که چجوریه

کیوت
https://www.qt.io/
اوپن جی ال
https://www.opengl.org/

سربلند باشید و بهروز

derhamifanta
پنج شنبه 18 خرداد 1396, 10:12 صبح
من یک سایت درباره فانتاکروم (http://fantachrome.ir/%D9%84%DB%8C%D8%B3%D8%AA-%D9%82%DB%8C%D9%85%D8%AA/) دارم که با وردپرس نوشته شده اگه بخوام بیارمش رو زبون سی شارپ چند وقت زمان میبره؟

Alityr
جمعه 22 شهریور 1398, 21:53 عصر
سلام، مدتی هست که می‌خوام یک نرم افزار سه بعدی رو تولید کنم. میدانم که تهیه یک نرم افزار سه بعدی سریع با Opengl امکانپذیره. اما کسی هست که بدونه تفاوت سرعت در win32 که بهتره، چقدر از MFC بهتره. اگر نرم افزار یک نرم افزار سنگین بشه این تفاوت می‌تونه کمتر بشه؟ نمونه های VCL و کتابخانه ی غیر استاندارد، همون سرعت رو ادامه میدن؟ و کار آیا در آنها از Win32 راحتتره؟ با تشکر

Alityr
جمعه 22 شهریور 1398, 21:54 عصر
البته منظورم سرعت نرم افزار بود.

Hamedrd
دوشنبه 25 آذر 1398, 19:05 عصر
:لبخند:سلام میخوام داخل محیط ویندوز فرم سی مختصات دلفی رو با دکارتی
نمایش بده اما کد زیر فقط یک دایره با الگوریتم دکارتی ترسیم میکنه
میشه کمک کنید ممنونم private void DekartiCircle()
{
int red, green, blue;
Double xc, yc, r, x, y;
red = Convert.ToInt32(R.Text);
green = Convert.ToInt32(G.Text);
blue = Convert.ToInt32(B.Text);
xc = Convert.ToDouble(textBoxXcircle.Text);
yc = Convert.ToDouble(textBoxYcircle.Text);
r = Convert.ToDouble(textBoxRcircle.Text);

Bitmap bmp = new Bitmap(6000, 6000);
for ( x = xc-r; x < xc+r; x++)
{
y = Math.Sqrt(r * r )- (x - yc) * (x - xc);
bmp.SetPixel(Convert.ToInt32(x), Convert.ToInt32(yc + y), Color.FromArgb(red, green, blue));
bmp.SetPixel(Convert.ToInt32(x), Convert.ToInt32(yc - y), Color.FromArgb(red, green, blue));
}
pictureBox1.Image = bmp;
}