ورود

View Full Version : سوال: چگونگی نوشتن تابع Resize برای اشکال در paint



shantia1
شنبه 04 تیر 1390, 16:39 عصر
سلام به همگی

من در حال نوشتن برنامه paint هستم و در حال حاظر به مشکلی در زمینه نوشتن تابع Resize (کوچک و بزرگ کردن اشکال)برای شکل هایی که می کشم برخوردم اگر کسی می تواند لطفا من را در نوشتن این تابع راهنمایی کند ؟

mehdi.mousavi
شنبه 04 تیر 1390, 19:03 عصر
سلام به همگی من در حال نوشتن برنامه paint هستم و در حال حاظر به مشکلی در زمینه نوشتن تابع Resize (کوچک و بزرگ کردن اشکال)برای شکل هایی که می کشم برخوردم اگر کسی می تواند لطفا من را در نوشتن این تابع راهنمایی کند ؟

سلام.
متاسفانه به مشکلی که باهاش مواجه شده اید اشاره نکردید. شما می تونید ضریبی برای شکل هایی که ترسیم میکنید در نظر بگیرید، سپس با کوچک و بزرگ شدن فرم، اون ضریب رو بطرز مناسبی کم و زیاد کنید تا شکل مورد نظر، بدرستی در OnPaint مجدد ترسیم بشه.

موفق باشید.

shantia1
شنبه 04 تیر 1390, 19:48 عصر
مرسی از راهنماییتون

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

mehdi.mousavi
شنبه 04 تیر 1390, 22:53 عصر
مرسی از راهنماییتون نه مشکل من اینه که چطور یک شی را انتخاب کنم و سایز اون شکل را تغییر بدم یعنی شکل را کوچک و بزرگ کنم و در ضمن مشکل دیگری هم که دارم اینه که شکل های من فقط از بالا به پایین رسم می شوند و از پایین به بالا رسم نمی شوند

حقیقتش متوجه نمیشم... منظورتون درست کردن چیزی مثل Corel Draw هستش؟ یعنی ساخت اشکالی توسط Vector و تغییر اندازه هر یک بصورت جداگانه؟

shantia1
یک شنبه 05 تیر 1390, 00:23 صبح
مرسی که وقت می گذارید

من اشیائی مثل مستطیل و دایره را رسم می کنم و این اشیا را داخل لینک لیست می ریزم حالا وقتی اشیا را رسم کردم می خوام یکی از اونها را انتخاب کنم و سایزش را تغییر بدم ولی نمی دونم چطوری باید شی موردنظر را انتخاب کنم تا روی بقیه اشیا بیاد و من بتونم سایزش را عوض کنم ؟؟

mehdi.mousavi
یک شنبه 05 تیر 1390, 09:47 صبح
مرسی که وقت می گذارید من اشیائی مثل مستطیل و دایره را رسم می کنم و این اشیا را داخل لینک لیست می ریزم حالا وقتی اشیا را رسم کردم می خوام یکی از اونها را انتخاب کنم و سایزش را تغییر بدم ولی نمی دونم چطوری باید شی موردنظر را انتخاب کنم تا روی بقیه اشیا بیاد و من بتونم سایزش را عوض کنم ؟؟

سلام.
من هنوز متوجه نشدم، این اشکالی که ترسیم می کنید Raster هستن یا Vector؟ شما Position هر کدوم رو روی صفحه دارید دیگه، درسته؟ (این بخشی از اون اطلاعاتی هستش که بازای هر Object در Linked List باید نگهداری کنید). بعد وقتی کاربر Click میکنه، باید ببینید توی چه نقطه ای کلیک کرده، سپس توی اون Linked List جستجو کنید ببینید آیا بخشی از اون Object ها در نقطه مزبور قرار گرفته اند یا خیر. اگر وجود داشت، میتونید اون شکل رو بیارید رو. چطوری؟ میتونید یک z-index بازای هر Object نگهداری کنید که ترتیب رسم اشکال در OnPaint رو بهتون نشون بده. طبیعتا شکلی که z-index بالاتری داره، باید دیرتر در فرآیند Paint رسم بشه... برای تغییر سایز اشکال نیز باید به همین شیوه عمل کنید. حقیقتش متوجه نمیشم دقیقا مشکل شما چی هستش...

موفق باشید.

Felony
یک شنبه 05 تیر 1390, 11:25 صبح
حقیقتش متوجه نمیشم دقیقا مشکل شما چی هستش...
مشکل ایشون این هست که فکر میکنن اشیائی که ترسیم میکنن Object هستن و میخوان به عنوان یک Object بهشون دسترسی داشته باشن ( مثل Button که میتونید در Design Time روش کلیک کنید و تغییر سایز بدیدش ) .

این کار به صورتی که در ذهن شماست امکان پذیر نیست ، باید یکسری از مسائل رو خودتون پیاده سازی کنید ( پست آقای موسوی توضیحات لازم رو ارائه کرده ) .

shantia1
یک شنبه 05 تیر 1390, 20:47 عصر
میشه یه کم بیشتر توضیح بدین که چطور این تابع انتخاب اشکال را پیاده سازی کنم؟

ممنون از کمک هاتون

Felony
یک شنبه 05 تیر 1390, 22:42 عصر
آقای موسوی که کامل توضیح دادن ، کجای پست آقای موسوی رو نفهمیدید ؟

mehdi.mousavi
دوشنبه 06 تیر 1390, 11:05 صبح
میشه یه کم بیشتر توضیح بدین که چطور این تابع انتخاب اشکال را پیاده سازی کنم؟ ممنون از کمک هاتون

سلام.
کافیه تا یک Region به ازای هر شکل در Linked List خودتون داشته باشید. سپس وقتی WM_LBUTTONDOWN رخ میده، می تونید مختصات نقطه Click شده رو بدین شکل بدست بیارید:

POINT pt;
GetCursorPos(&pt);
int x = pt.x;
int y = pt.y;

سپس، با استفاده از تابع PtInRegion (http://msdn.microsoft.com/en-us/library/dd162883%28v=vs.85%29.aspx) بررسی کنید که آیا x و y گرفته شده، در درون Region هایی که در Linked List دارید واقع شده یا خیر. اگر در درون اون اشکال بود، حالا باید z-index رو تغییر بدید، دوباره شکل رو Paint کنید و ...

موفق باشید.