PDA

View Full Version : سوال: ایجاد یک تم در برنامه وتغییر در سایر برنامه های اجرا شده



mscode.ir
چهارشنبه 29 خرداد 1387, 15:19 عصر
سلام دوستان.راستش نمی دونم چجوری میشه تو c (ویژال یا برلند فرقی نمی کنه)مثلا شکل یک دکمه رو عوض کرد می خواستم ببینم کسی بلده؟ (مثل برنامه های گذاشتن تم رو برنامه ولی من منظورم بدون استفاده از اوهاست)
بعد یه چیز دیگه هست که بهش می گن hooking . اون چیزی که من میگم برنامه ای رو که اجرا شده رو تغییر میده و شکلشو عوض میکه. کسی می دونه اون چه شکلی اجرا میشه؟

A_Salimi
چهارشنبه 29 خرداد 1387, 16:24 عصر
در مورد سوال اول حتما این دو لینک را مشاهده کنید :


XP Media Center Animated Button Control (http://www.codeproject.com/KB/buttons/CMCButton.aspx)

A simple hoverbutton with one bitmap and a tooltip (http://www.codeproject.com/KB/buttons/hoverbutton.aspx)

Nima_NF
چهارشنبه 29 خرداد 1387, 21:08 عصر
این کارها طراحی کنترل ها به شکل custom Draw یا OwnerDraw می گویند (دو مفهوم جداگانه) که می توانید هر نوع طراحی که خواستید برای کنترل ها با حفظ خواص آنها انجام دهید و می توانید این لغات را در اینترنت جستجو کنید تا مطالب فراوانی پیدا کنید.

قبلا توضیحاتی در تاپیک زیر دادم و لینک یک مثال خوب هم قرار دادم:
Applying style to program (http://barnamenevis.org/forum/showthread.php?t=97048)

mscode.ir
شنبه 01 تیر 1387, 12:11 عصر
با سلام . منظور من دقیقا این نبود. اگه بد توضیح دادم شرمنده اما منطورم تمی در حد تم یاهو مسنجر هست که هر دیالوگی داخل برنامه حتی دیالوگ هایی مانند open dialog , font dialog و اینها رو هم تغییر میده. یه چیزی در حد http://skincrafter.com/ یا http://www.codeproject.com/KB/library/USkin.aspx اما خوب می خوام خودم درست کنم و از این بند و بساط ها استفاده نکنم. برای شروع یه دکمه رو هدف قرار دادم. بعد در مورد سوال دومم نظری نداری؟ می دونی دقیقا من یه برنامه می خوام بنویسم که یه برنامه ی دیگه که من ننوشتمش رو با هاش بازی کنه مثلا عدد progress ش رو بخونه یا یه دکمه شو بزنه.

Nima_NF
یک شنبه 02 تیر 1387, 16:23 عصر
موضوعی که مطرح کردید بحث کوچکی نیست و هر کدام برای خود عظمتی دارد، لذا باید آشنایی کامل با تمامی مباحث داشته باشید.

مثلا برای تغییر رنگ دیالوگ ها و کنترل ها، ابتدا باید تمامی هندل های پنجره ها و دیالوگ ها را که از نوع فرزند پنجره هستند پیدا کنید حال opendialog هست یا print یا هر دیالوگ خود برنامه (مثلا با استفاده از GetWindow و ده ها تابع دیگر ) و سپس دستورات تغییر رنگ را اعمال کنید (WM_CTLCOLORDLG ،WM_CTLCOLORSTATIC و ... ) که قبلا در تاپیک زیر کامل توضیح دادم:

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


سپس نوبت پیدا کردن هندل کنترل های موجود در یک پنجره یا دیالوگ هست، با هر تابعی مانند GetWindow یا WindowFromPoint یا ... و بعد از آن باید با استفاده از تابع GetClassName نام کلاس ها را دریافت و مقایسه کنید مثلا برای یک دکمه نام "BUTTON" و برای editbox نام "EDIT" , ... می باشد.

بعد از مشخص شدن نوع کنترل نوبت به اعمال تغییرات می رسد، یعنی باید با استفاده از SetWindowLong با فلگ GWL_WNDPROC تابع اصلی برای پردازش های کنترل را به تابع سفارشی خودتان تغییر دهید، و در آن شروع به استفاد از WM_PAINT (یا همان onPaint در MFC) و غیره کنید،
اما بهترین کار تغییر خواص کنترل هست (با همان SetWindowLong و فلگ GWL_STYLE ) به BS_OWNERDRAW برای دکمه ها و غیره.