با سلام و خسته نباشید به شما دوستان عزیز
من یه سوال داشتم :
این کلاس CWnd که یک سری توابع توشه ماله چیه که اکثرا برای کار با پنجره ها و کنترل ها و گرافیک می باشد
و بعضی از این توابع مثل FindWindow که توی VB مقداری از نوع Long رو بر می گردونه
من یه بار یه متغیر از نوع long برای این تابع تعریف کردم ولی کامپایلر خطایی رو اعلام کرد بر مبنای
ناتوانی در تبدیل CWnd به Long
نقل قول: این کلاس CWnd که یک سری توابع توشه ماله چیه که اکثرا برای کار با پنجره ها و کنترل ها و گرافیک می باشد
این کلاس پنجره برنامه رو در ویندوز نمایندگی میکنه یعنی اینکه هر پنجره ای که در برنامه های MFC وجود دارند از این کلاس مشتق شدن . یک سری وظایف دیگه هم داره مثلا اگر شما توی پنجره برنامه Menu یا Tool Bar داشته باشید این کلاس بصورت پیشفرض وظیفه داره که پیغام های مربوطه رو هندل کنه .
نقل قول: بعضی از این توابع مثل FindWindow که توی VB مقداری از نوع Long رو بر می گردونه . من یه بار یه متغیر از نوع long برای این تابع تعریف کردم ولی کامپایلر خطایی رو اعلام کرد بر مبنای ناتوانی در تبدیل CWnd به Long
من همیشه به دوستان اکیدا توصیه میکنم قبل از کار با MFC اول باید مفاهیم ++C رو یادبگیرند ولی هنوز ظاهرا کسی این توصیه ما رو جدی نگرفته . خب یکی از علت هایی که من میگم باید ابتدا زبان ++C رو خوب یادبگیرید همینه . حالا این مشکل از کجا آب میخوره ؟؟؟ مشکل از اینجاست که تابع FindWindow هم یک تابع API هست هم یکی از توابع کلاس CWnd . در همچین حالتی اگر شما FindWindow رو همینجوری صدا بزنید کامپایلر بدبخت که فکر شما رو نمیتونه بخونه پس حساب میکنه منظور شما تابع موجود در همون کلاس هست . تابع FindWindow در کلاس CWnd کاملا با اون تابع API فرق میکنه و مقدار بازگشتی اون اشاره گری هست به شی CWnd . لینک زیر رو ببین تا تعریف تابع داخل کلاس رو ببینی :
http://msdn.microsoft.com/en-us/library/...S.80).aspx
حالا چطور باید این مشکل رو حل کنیم ... یعنی چطور میتونیم در اینچنین حالتی تابع API رو صدا کنیم ، خب اینجا میشه همون دانستن زبان ++C !! شما باید از Resolution Operator یا :: پشت اسم تابع استفاده کنید . این به کامپایلر میگه که تابعی که من دنبالش هستم خارج از کلاس تعریف شده ( در اینجا Global هست یعنی همون تابع API ) اینطوری دیگه کامپایلر گیج نمیشه . مثلا اینطوری :
کد:
result = ::FindWindow("Type32_Main_Window", NULL);