ورود

View Full Version : اضافه کردن متغییر عضو در MFC Ribbon



pswin.pooya
پنج شنبه 14 مرداد 1389, 02:29 صبح
سلام
من از ویژوال استادیو 2010 برای ساخت پروژم که یه Single Document هست استفاده می کنم. حالا من داخل پروژه یه Check Box به Ribbon اضافه کردن و اسم اون رو ID_CHK1 گذاشتم. مشکل من اینجاست که من قبلا از Class Wizard برای Add کردن Member Variable ها استفاده می کردم ولی حالا توی کلاس CMainFrame دکمه Add Member... غیر فعال شده.

حالا چه شکلی می تونم یه متغییر برای این کنترل بسازم؟

و چه شکلی می تونم توی سند این متغییر ساخته شده رو بخونم؟

Nima_NF
پنج شنبه 14 مرداد 1389, 14:20 عصر
متاسفانه برای گرفتن حالات کنترل ها در Ribbon باید کد نویسی کرد و کمی با MFC متفاوت است، کلا wizard برای متغیر ها وجود ندارد.


شما باید دو مورد ON_COMMAND و ON_UPDATE_COMMAND_UI را توسط Event Handler ایجاد کنید یا در برخی موارد کدهای زیر را دستی وارد کنید، مثلا در جایی که چندین مورد کنترل هست و باید خودتان آن ها را ترکیب کنید.

مثال (کدهای زیر توسط Event Handler تولید می شوند یا می توانید دستی تولید کنید):
در قسمت BEGIN_MESSAGE_MAP :



ON_COMMAND(ID_VIEW_CHECK, OnViewCheck)
ON_UPDATE_COMMAND_UI(ID_VIEW_CHECK, OnUpdateViewCheck)

در قسمت تعریف کلاس:



afx_msg void OnViewCheck();
afx_msg void OnUpdateViewCheck(CCmdUI* pCmdUI);

در قسمت پیاده سازی:
شما باید متغیر yourVariable را خودتان به شکل خصوصی یا protected برای کنترل حالات تعریف کنید. (دستی) و مقدرای دهی اولیه کنید مثلا fasle.






void CMainFrame::OnViewCheck()
{
yourVariable = yourVariable ? false : true;
}

void CMainFrame::OnUpdateViewCheck(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck( yourVariable ? 1 : 0 );
}

در Ribbion گرفتن اطلاعات کمی متفاوت هست، مثلا اگر قرار هست در موراد مشابه تابع OnViewCheck یک کنترل رنگ را دریافت کنید، به شکل زیر عمل می کنیم:



CMFCRibbonBar* pRibbon = ((CMDIFrameWndEx*) AfxGetMainWnd())->GetRibbonBar();
ASSERT_VALID(pRibbon);

CMFCRibbonColorButton* pColor = DYNAMIC_DOWNCAST(
CMFCRibbonColorButton, pRibbon->FindByID(ID_FONT_COLOR));









برای سایر کنترل ها می توانید از جایگزین کردن کلاس و ID آن ها به جای CMFCRibbonColorButton و ID_FONT_COLOR در فوق استفاده کنید.
مثلا از CMFCRibbonButton یا CMFCRibbonCheckBox یا سایر موارد تا به کنترل آن دسترسی پیدا کنید، حالات را بخوانید و تغییر دهید و غیره.