با سلام به دوستان
من یه پروژه از نوع ( MFC AppWizard ( exe درست کردم
بعدش اومدم و تو فرمم یه کلید گذاشتم و اسم تابع کلید رو
OnButton5 گذاشتم
کد:
void CTestDlg::OnButton5()
{
}
حالا می خواهم مثلآ یه تابع API مثل SendMessage رو توش
بکار بگیرم
و یا بطور کل چجوری تو پروژه های از نوع ( MFC AppWizard ( exe
می شه توابع API رو به کار گرفت
با تشکر
سلام
تویه پروژه های MFC لازم نیست تابع API رو معرفی کنی. تمامی توابع از قبل معرفی شدن . فقط باید هدر فایل اون تابع api رو معرفی کنی تا ثابت های تابع هم کار کنن ( یادت باشه که C به بزرگ بودن و کوچیک بودن حروف حساسه پس توابع API رو با دقت تایپ کن)
برای اینکه هدر فایل ها و شیوه کامل کار برای هر تابع API رو یاد بگیری میتونی بری به MSDN و یا کتاب windows 2000 api super bible مراجعه کنی
-----------------------
www.ps-ware.net
با سلام به شما دوست عزیز
و تشکر از اینکه منو راهنمایی کردید
ولی متاسفانه چند مشکل هنوز هست ...
نقل قول: فقط باید هدر فایل اون تابع api رو معرفی کنی تا ثابت های تابع هم کار کنن
من تو MSDN دیدم که تابع SendMessage از یکی از دو هدر Winuser.h یا
Winuser.h فراخونی می شه ولی هر کدامش رو امتحان کردم کار نداد !
در ضمن من وقتی تابع SendMessage رو می آرم به من سه تا پارامتر ارایه
می ده در حالی که تابع SendMessage چهار تا پارامتر داره !
به نظر شما مشکل این قسمتش چیه ؟
با تشکر
ویژوال سی بطور خودکار برخی از قسمتهای توابع api رو کامل میکنه از جمله این قسمتها هندل هستش که به صورت خودکار hwnd خود فرم رو میذاره. استفاده از api داخل vc مثل استفاده اونها داخل vb نیستش بخاطر همین بهتره به یک کتاب مرجع که اسمشو گفتم نگاه کنی داخل اون مثال تمامی توابع هستش . اگه بخوای یکم صبر کن از کتابخونه کتاب رو بگیرم شیوه کامل کار تابع رو اسکن کنم برات بفرستم؟
یادم رفت بگم اگر قبل از دستور SendMessage دو تا : بذاری تمامی دستورا برات لیست میشن که می بینی بعضی از اونها دو تا یا بیشترن. اگر SendMessage دوم رو انتخاب کنی این تابع 4 تا پارامتر داره.
----------------------------------
www.ps-ware.net
با تشکر از شما دوست عزیز
نقل قول: اگه بخوای یکم صبر کن از کتابخونه کتاب رو بگیرم شیوه کامل کار تابع رو اسکن کنم برات بفرستم؟
خیلی ممنون نمی خواد به خاطر من خدتون رو تو زحمت بندازید
تا همین جاش هم که کمک کردین ممنونم
فکر کنم تو MSDN توضیحات کامل باشه !
نقل قول: یادم رفت بگم اگر قبل از دستور SendMessage دو تا : بذاری تمامی دستورا
برات لیست میشن که می بینی بعضی از اونها دو تا یا بیشترن. اگر
SendMessage دوم رو انتخاب کنی این تابع 4 تا پارامتر داره.
ممنون از راهنمایتون !
متشکر
خسرو جان سلام
توابعی که توی هدر ها تعریف شدن باید بصورت Global صدا زده بشن چون زمانی که شما داری با MFC برنامه می نویسی توی کلاس های MFC داری برنامه می نویسی و برای توابعی مثل API که توی هدر ها بصورت Global تعریف شدن استفاده از Scope resolution Operator الزامیه . حالا این یعنی چی ؟ یعنی استفاده از یک :: قبل اسم تابع API .
()SendMessage::
موفق باشید
ممد جان سلام از اینکه منو راهنمایی کردید ممنونم
با صحبت هایی که کردید چند تا سوال برام پیش اومد
که اگه پاسخ بدید ممنون می شم
نقل قول: توابعی که توی هدر ها تعریف شدن باید بصورت Global صدا زده بشن
منظورت کدام توابع و کدام هدر ها هست ؟
یکم اگه توضیح بدی ممنون می شم
یه سوال که برام پیش اومده اینکه که چرا وقتی مثلآ قبل از همین تابع
سند مسیج Scope resolution Operator می زاریم بهمون 4 تا پارامتر می ده
ولی وقتی Scope resolution Operator نمی زاریم بمون سه تا پارامتر می ده
یه سوال دیگه هم که دارم اینه که تو وی سی ++ مثلآ هندلی که از تابع
FindWindow بدست می آد رو تو چه نوع متغیری باید بریزم که بعدش مثلآ
ازش تو تابع SendMessage استفاده کنم
با تشکر
نقل قول: منظورت کدام توابع و کدام هدر ها هست ؟
خوب معلومه ! اونهایی که مربوط به MFC نمیشن مثل توابع تعریف شده در همون windows.h که طبیعتا میشن همون توابع API !
وقتی شما داری توی یک Class Member function ( تابع عضو کلاس ) یک تابع دیگه رو صدا میزنی کامپایلر چطور باید بفهمه اون تابع جزیی از توابع تعریف شده همون کلاسه یا جز توابعی هست که بطور Global در هدر ها یا فایل ها یا حتی DLL های دیگه موجوده ؟؟
واسه اینکه به کامپایلر بگی که تابعی که صدا میزنی یک تابع Global هست که خارج از کلاس های MFC تعریف شده باید از همون Scope resolution operator یا :: استفاده کنی ! توی ++C وجودیت و تعریف توابع با نام های یکسان مجازه و کلا یکی از امکانات مهم زبانه و یکی از مهمترین وظایف کامپایلر ++C انتخاب بهترین تابعی هست که با پارامتر هایی که صدا زده میشه بخونه . اونجا هست که شما یک تابع با چندین حالت پارامتر می بینی . به این امکان زبان میگن Function Overloading .
حالا به اینجا میرسیم که چرا با وجود :: و با نبودش این حالت دوگانگی پیش میاد ! خوب همون طور که گفتم زمانی که شما از :: استفاده می کنی کامپایلر دیگه کلا از توابعی که توی کلاس ها یا Namespace های MFC تعریف شده چشم پوشی می کنه و دنبال اون تابع با اسم مشابه توی محدوده Global می گرده ! جالبه بدونی 2 تا تابع با نام SendMessage داریم . یکیش توی توابع API و تعریف شده در هدر windows.h و یکیش توی خود کلاس های MFC که کلا وظیفه متفاوتی داره و توی MFC framework انجام عمل می کنه . این دوتا با هم کاملا متفاوت هستند و دیدی که با یک :: از هم متمایز میشن .
خسرو جان ، واقعا برای بروبچز ایرانی علاقمند متاسف هستم که کتاب های خوب و مفیدی برای یادگیری ++C ندارند . من قبلا هم بهت توصیه کرده بودم که بدون یادگیری کل زبان ++C یادگیری وی سی ++ محاله و شدیدا مشکل و غیر قابل فهمه . هر چقدر روی ++C کار کنی کمه !
نکته : آقا راستی یادم رفت جواب سوال آخری رو بدم . توی MSDN نوع بازگشتی و پارامتر های توابع رو کاملا توضیح داده . تمام اون نوع ها از طریق windows.h توی ++VC در دسترس هستند و مشکلی نباید در تعریف کردنش و استفاده ازشون وجود داشته باشه . اگر مشکلی پیدا کردی همین جا بگو ، اگر تونستم دریغ نمی کنم .
ممد جان از کمکات خیلی خیلی خیلی ... متشکرم
ولی ...
نقل قول: خسرو جان ، واقعا برای بروبچز ایرانی علاقمند متاسف هستم که کتاب های خوب و مفیدی برای یادگیری ++C ندارند . من قبلا هم بهت توصیه کرده بودم که بدون یادگیری کل زبان ++C یادگیری وی سی ++ محاله و شدیدا مشکل و غیر قابل فهمه . هر چقدر روی ++C کار کنی کمه !
ممد جان شما که اهل حال هستی خودت می دونی که وضع کتاب تو ایران
چطوره پس یکم کمتر ضد حال بزن چون من از کارم دارم پشیمون می شم
که اومدم وی سی ++ یاد بگیرم
من یه مقدار با این کلاس ها و اینها کار کردم
بلاخره آدم باید از یه جایی شروع کنه دیگه
چاره ای هم نیست کتاب ها بی کیفیت هستند
شما راه بهتری سراغ دارید ؟
بابا من کی گفتم برو تو خط ضد حال ؟! شما سعی کن زبانت رو خوب تقویت کنی و با اصطلاح های انگلیسی برنامه نویسی آشنا بشی ، اونوقت بهتر می تونی کتاب های زبان اصلی بخونی و خوب تفاوت کیفیت آموزش رو بهتر میتونی درک کنی .
سلام دوست عزیز فکر می کنم اشکال کار شما اینجاست:
در منوی project روی گزینه settings کلیک کنید در یکی از برگه ها در قسمتی
این نوشته شده:
kernel32.lib, user32.lib,...
تابع مورد نظر شما در یکی از کتابخانه ها است(شما باید کتابخانه مورد نظرتان را از msdn پیدا کنید)
مثلا برای کار با socket (بدون MFC) باید هم فایل header را در اول برنامه Include کنید و هم فایل زیر را در قسمتی که بالا گفتم بنویسید:
ws2_32.lib