ايران ويج

نسخه‌ی کامل: کمک برای تبدیل کد ها به vb
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام
من دارم یه برنامه نسبتا ساده رو از ++C به vb6 تبدیل می کنم ولی بعضی جاهاش گیر کردم...
کد:
char    *m_ReadBuffer, *m_WriteBuffer;
m_ReadBuffer = (char *)malloc(SIZE * SIZE);
m_WriteBuffer = (char *)malloc(SIZE * SIZE);
...
#define SETBUFFER(buf,x,y,value)    (buf[((y) * WATER_SIZE) + (x)] = value)
#define READBUFFER(buf,x,y)    (buf[((y) * WATER_SIZE) + (x)])
توی کد بالا اول 2 تا pointer تعریف کرده ولی setbuffer و readbuffer چیه ؟ تابع یا ... ؟
معنی این چیه؟ m_Display.Invalidate . میشه گفت refresh کردن صفحه نمایش یا picturebox ؟
در ضمن در حالت دیباگ توی ++VC چطور میشه مقدار موجود در یک pointer رو دید ؟ همش هگز خود اشاره گر رو نشون میده.
خیلی ممنون
نقل قول: توی کد بالا اول 2 تا pointer تعریف کرده ولی setbuffer و readbuffer چیه ؟ تابع یا ... ؟

اونها ماکرو هستند که تعریف کرده . ماکروها تابع نیستند بلکه یه قسمت کد هستند که بشکل تابع نوشته میشن . ماکروپروسسور ( قسمتی از برنامه کامپایلر) قبل از کامپایل شدن برنامه ، مقدار اونها رو با کد اصلی جانشین میکنه . مثلا اگر در قسمتی از برنامه بنویسیم :

کد:
SETBUFFER(buf,2,3,5);

این کد با مقدار زیر جانشین میشه ( در واقع انگار کد زیر رو نوشتیم ) :

کد:
(buf[((3) * WATER_SIZE) + (2)] = 5)

نقل قول: معنی این چیه؟ m_Display.Invalidate . میشه گفت refresh کردن صفحه نمایش یا picturebox ؟

این همون مثل متد refresh هست در وی بی 6 . کارش اینه که باعث میشه ویندوز به برنامه یک پیغام WM_PAINT بفرسته و باعث بشه که picturebox دوباره خودش رو ترسیم کنه ( معمولا تغییراتی که تو حافظه انجام دادیم رو حالا ترسیم کنیم )

نقل قول: در حالت دیباگ توی ++VC چطور میشه مقدار موجود در یک pointer رو دید ؟

توی variable Window میتونی این رو ببینی . روی قسمت خالی ToolBar کلیک راست بکن و بعد این گزینه رو انتخاب کن تا پنجره اش باز بشه .
ببخشید این قضیه ماکرو ها رو درست نفهمیدم. مثلا اگر SIZE=256 ، x=5 , y=3 باشه اونوقت با توجه به :
کد:
#define SETBUFFER(buf,x,y,value)    (buf[((y) * WATER_SIZE) + (x)] = value)
#define READBUFFER(buf,x,y)    (buf[((y) * WATER_SIZE) + (x)])
اگر داشته باشیم :
کد:
SETBUFFER (m_WriteBuffer,i,j,value)
و
READBUFFER(m_ReadBuffer,x,y)
اونوقت در setbuffer و readbuffer چه اتفاقی میوفته ؟
ممنون
هر زمان ، در هر جایی از کد برنامه ، اگر شما کد زیر رو بنویسید :

کد:
SETBUFFER (m_WriteBuffer,i,j,value)

دقیقا مثل این میمونه که نوشته باشی ( در واقع خط زیر جایگزین کد بالا میشه قبل از کامپایل )

کد:
m_WriteBuffer[((j) * 256) + (i)] = value

و همینطور :
کد:
READBUFFER(m_ReadBuffer,x,y)

جانشین میشه با :

کد:
m_ReadBuffer[((y) * 256) + (x)]


ماکرو ها کدهایی هستند که حالت کلی دارند و در قسمت های مختلف برنامه باید با پارامتر های مختلف نوشته بشن . بجای اینکه ما هر بار این قسمت از کد رو در برنامه تکرار کنیم ، یک ماکرو مینویسیم و هر جا که بخواییم اون ماکرو رو با پارامتر های دلخواهمون مینویسم میزنیم . قبل از کامپایل این ماکرو ها به کداصلی خودشون تبدیل میشن ( جانشین میشن ) و بعد برنامه کامپایل میشه .
شرمنده اینقدر سوال میکنم...تازه کارم دیگه Shy
این علامت >> و << چه عملی انجام میدن ؟ مثلا :
کد:
#define RGB32(r,g,b)    ((r << 16) + (g << 8) + b)
و یه خواهش دیگه، میشه ای سورس رو یه نگاه بندازید ؟ مشکل اصلی من اینه که میخوام طول و عرض تصویرم متفاوت باشه ولی توی این سورس تصویر مربع فرض شده؛ برای همین برای من یه کم پیچیدس...
download
خیلی ممنون
نقل قول: این علامت >> و << چه عملی انجام میدن ؟

اینها در اینجا شیف های بیتی هستند . شیفت به سمت چپ ( اگر اعداد رو در مبنای 2 فرض کنیم شیفت به سمت چپ باعث اضافه کردن 0 به بیت های سمت راست میشه و بیت های قبلی به سمت چپ منتقل میشن )
در واقع اینجا این ماکرو کاری نمیکنه جز اینکه یه مقدار رنگی RGB رو از مقادیر قرمز ، آبی و سبز بشکل 32 بیتی میسازه . ما عملگر شیف بیتی در وی بی نداریم ولی توی وی بی تابع RGB داریم که اینکار رو برات انجام میده .
http://msdn.microsoft.com/en-us/library/...S.80).aspx


تبدیل برنامه های MFC به VB تا حدودی مشکله . کلا چون سیستم برنامه نویسی این دوتا با هم فرق میکنه ! شما توی خط زیر باید بتونی سایز رو تغییر بدی :

کد:
CRect bounds(0,0,WATER_SIZE - 1,WATER_SIZE - 1);