1. مهمان گرامی، جهت ارسال پست، دانلود و سایر امکانات ویژه کاربران عضو، ثبت نام کنید.
    بستن اطلاعیه

تفاوت برنامه نویسی MFC و WIN32 در ویژوال سی

شروع موضوع توسط hector2141 ‏15/10/12 در انجمن C #C++

  1. کاربر ارشد

    تاریخ عضویت:
    ‏6/9/12
    ارسال ها:
    14,323
    تشکر شده:
    2,698
    امتیاز دستاورد:
    0
    حرفه:
    daneshjo
    [​IMG]
    در محیط ++Visual C پروژه های متنوعی می توانید ایجاد کرد که دو نوع آنها استفاده بیشتری دارد. یکی پروژه های MFC و دیگری Win32.
    این دو نوع پروژه چه تفاوتی دارند و به چه کارمان می‌آیند؟
    تفاوت آنها با پروژه‌ی کنسول ساده چیست؟


    [h=2]پروژه های Win32[/h] از اسم win32 پیداست که منظور پروژه هاییست که برای ویندوز 32 بیتی نوشته می شود (البته اگر شما برنامه 64 بیتی هم بخواهید بنویسید باز همین نوع پروژه را می توانید استفاده کنید). ویندوز یک سری کتابخانه های پویا یا همان dll دارد که در این کتابخانه ها توابع متعددی برای کار با پنجره ها در محیط ویندوز وجود دارد. این توابع که به عنوان API (مخفف Application Programming Interface) مشهور هستند نوشته شده اند که کار میکروسافت و سیستم عامل ویندوزش راه بیفتد. لیکن مایکروسافت زحمت کشیده و بخش عظیمی از این API را در اختیار برنامه نویسان هم قرار داده که کار آنها هم لنگ نماند. مثلا تابع MessageBox که یک پیام را نمایش می دهد، یا تابع CreateWindowEx که یک پنجره ایجاد می کند، یا تابع ShellExecute که یک برنامه را اجرا می کند و یا تابع GetCommState که وضعیت پورت Com (ارتباط سریال) را مشخص می کند و توابعی از این دست، همگی در فایلهایی مثل user32.dll و kernel32.dll و ... تعریف شده اند. به کمک این توابع شما می توانید پنجره بسازید، دکمه تعریف کنید، منو بسازید، نوار ابزار ایجاد کنید و هر آنچه در یک برنامه تحت ویندوز نوعی می بینید، ایجاد کنید. لیکن تمام کارها در قالب کدنویسی صورت می گیرد.

    با تعریف پروژه win32 به طور پیش فرض فایل سرآیه‌ی windows.h به پروژه شما اضافه شده، فایلهای lib لازم (مثل user32.lib و kernel32.lib) هم در تنظیمات پروژه اضافه شده و تقریبا تمام توابع لازم برای کار با پنجره ها در اختیار شما قرار می گیرد. اگر این کارها را به صورت دستی در یک پروژه کنسول ساده انجام دهید نیازی به تعریف پروژه win32 ندارید!

    [h=2]پروژه های MFC[/h] MFC مخفف Microsoft Foundation Classes یعنی کلاسهای پایه ای میکروسافت، کتابخانه ای است که شرکت میکروسافت جهت تسهیل برنامه نویسی برای ویندوز توسعه داده است. این کتابخانه چیزی نیست جز تعدادی کلاس که به صورت پوششی بر روی API ویندوز قرار گرفته و کار کردن با پنجره ها را باز هم آسانتر کرده است. به عبارتی هزاران توابع موجود در API در قالب تعدادی کلاس و به صورت مرتب درآمده اند. مثلا توابع کار با پنجره در کلاس CWnd قرار گرفته اند؛ توابع کار با دکمه در کلاس CButton و توابع کار با دیالوگ در کلاس CDialog واقع شده اند. بسیاری از کلاسهای MFC از جمله CButton، CDialog، CEdit و CRichEdit فرزند کلاس CWnd هستند.
    به کمک این نوع پروژه شما می توانید، منو، دیالوگ، نوار ابزار و حتی ریبون (ویژوال استودیو 2010) را به صورت دیداری طراحی کنید و فقط کدهای لازم برای مدیریت رویدادها (مثل کلیک روی یک منوی خاص) را می نویسید. در این نوع پروژه کلاسهایی مثل CImage برای کار با تصاویر، CButton برای کار با دکمه، CFont برای کار با قلمهای ویندوز، CMenu برای منوها و ده ها کلاس متنوع دیگر وجود دارد که برنامه نویسی تحت ویندوز را بسیار تسهیل می کند.

    با همه این تفاسیر کار کردن با پروژه های MFC نسبت به زبانهایی مثل #C و ویژوال بیسیک بسیار سخت تر است! به عنوان مثال در #C به محض ساختن یک Text Box با نام edit1 متغیری با همین نام در اختیار شما قرار می گیرد که به راحتی می توانید با آن کار کنید (متن آن را بخوانید یا تغییر دهید یا رنگ آن را عوض کنید) لیکن در MFC باید یک متغیر به آن تخصیص دهید و یا با دستوری مثل GetDlgItem پنجره مربوط به آن Text Box را گرفته و سپس با آن کار کنید. آن هم نه همه کاری! مثلا کارهای ساده ای مثل تغییر رنگ یک کنترل در MFC به سختی پشتک بارو زدن است! کاری که در سایر زبانها در زمان طراحی قابل انجام است. البته همین امر هم سبب شده که برنامه های نوشته شده با ویژوال سی نسبت به سایر زبانها بسیار سریعتر باشند (هر زبان را بهر کاری ساختند!)

    به نقل پی سی کدنویس