반응형

http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=50&MAEULNo=20&no=820288&ref=820288

Feature Pack sample 중에 RibbonGadgets 라는 sample이 있습니다.

(아래 그림 참조) 리본바에서 color를 지정하고 나서 어떻게 색상 값을 받아와야 할지 모르겠네요?

 

 

 

 

<페널에 CMFCRibbonColorButton 추가>

 

bNameValid = strTemp.LoadString(IDS_RIBBON_PEN3);
 ASSERT(bNameValid);
CMFCRibbonColorButton* pBtnPen3 = new CMFCRibbonColorButton(ID_OBJECT_PEN3, strTemp, 2);
 pBtnPen3->EnableAutomaticButton(_T("&Automatic"), RGB(0, 0, 0));
 pBtnPen3->EnableOtherButton(_T("&More Colors..."), _T("More Colors"));
 pBtnPen3->SetColumns(10);
 pBtnPen3->SetColorBoxSize(CSize(17, 17));
 pBtnPen3->AddColorsGroup(_T("Theme Colors"), m_lstMainColors);
 pBtnPen3->AddColorsGroup(_T(""), m_lstAdditionalColors, TRUE);
 pBtnPen3->AddColorsGroup(_T("Standard Colors"), m_lstStandardColors);
 pPanelObject->Add(pBtnPen3);

 

<ID_OBJECT_PEN3 메뉴 버튼 에서>

void CMainFrame::OnObjectPen3()
{
 // TODO: Add your command handler code hee

// 여기서 처리를 어떻게 해야 하는지요?

// 요거 저거 해도 안되는군요...

CMFCColorButton m_wndColor;

 CString str;
 COLORREF color = m_wndColor.GetColor();
 str.Format(_T("%d,%d,%d"), GetRValue(color), GetGValue(color), GetBValue(color));
 SetOutput(str);
}

 

void CMainFrame::OnUpdateObjectPen3(CCmdUI *pCmdUI)
{
 // TODO: Add your command update UI handler code here
}

 

시원한 답변 부탁드립니다.

이 글에 답변 등록하기
[채택답변] 상콤한 답변 -_-
0
2010-03-18 오전 1:12:12
 질문자 인사 :답변 갑사합니다.
처음에는 안되서 왜 그런가 했는데..
제가 SDI라서 CMDIFrameWndEx를 CFrameWndEx로 변경하니 
잘 됩니다..
정말 감사합니다.
  오새롬 (diebuster)  오새롬님께 메시지 보내기오새롬님을 내 주소록에 추가합니다.오새롬님의 개인게시판 가기번호: 820292  

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


    CMFCRibbonColorButton* pColor = DYNAMIC_DOWNCAST( CMFCRibbonColorButton, pRibbon->FindByID(ID_OBJECT_PEN3));
    // Get the selected color 
    COLORREF color = pColor->GetColor();

 

 [답변]상콤한 답변 -_-2010-03-17 오후 11:58:36
오새롬 (diebuster)  오새롬님께 메시지 보내기오새롬님을 내 주소록에 추가합니다.오새롬님의 개인게시판 가기번호: 820292  추천:0  

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


    CMFCRibbonColorButton* pColor = DYNAMIC_DOWNCAST( CMFCRibbonColorButton, pRibbon->FindByID(ID_OBJECT_PEN3));
    // Get the selected color 
    COLORREF color = pColor->GetColor();

 

이 글에 답변 등록하기
         [답변]에러가 발생합니다.2010-03-18 오전 12:44:55
김정곤 (fdsdasom)  김정곤님께 메시지 보내기김정곤님을 내 주소록에 추가합니다.김정곤님의 개인게시판 가기번호: 820297  추천:0  

늦은시간인데 이렇게 답변 주셔서 감사합니다.

 

님께서 말씀 하신 방법을  적용 했습니다. 색을 선택하면 에러가 발생합니다.

 

디버깅 해 보니  CXX0030: Error: expression cannot be evaluated  이런 에러가 발생하네요!

 

그리고 저는 SDI에서 하고 있는데요 CMDIFrameWndEx* 이게 사용 가능 한건가요?

 

void CMainFrame::OnObjectPen3()
{

CString str;

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


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


 // Get the selected color 
 COLORREF color = pColor->GetColor();


 str.Format(_T("%d,%d,%d"), GetRValue(color), GetGValue(color), GetBValue(color));
 SetOutput(str);


}

 

소스를 보면 color가 크게 두가지 정도로 분류가 됩니다.

 

한가지는 펼처진 경우 보여지는 색상이구요, 다른 한가지는 other나 more 를 선택했을 때 나오는 ColorDlg입니다.

 

이둘을 같이 사용 하고 있는데 둘 중에 어떤것이 선택 되었는지도 알 수 가 없습니다. 이 것도 알 수 있는 방법이 없을 까요?

이 글에 답변 등록하기
                 [답변]CFrameWndEx2010-03-18 오전 1:33:30
오새롬 (diebuster)  오새롬님께 메시지 보내기오새롬님을 내 주소록에 추가합니다.오새롬님의 개인게시판 가기번호: 820299  추천:0  

CMFCRibbonBar* pRibbon = ((CFrameWndEx*) AfxGetMainWnd())->GetRibbonBar(); 


반응형

+ Recent posts