متاسفانه برای گرفتن حالات کنترل ها در 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 یا سایر موارد تا به کنترل آن دسترسی پیدا کنید، حالات را بخوانید و تغییر دهید و غیره.