태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.
최근 Feature Pack을 사용해서 프로젝트를 변환하고 있는데..
동적으로 Plugin DLL들의 기능을 읽어서 리본바에 버튼을 추가하는 기능을 수정하고 있었다.

큰 버튼, 작은 버튼이 동적으로 추가되는데..
HICON으로 생성한 버튼은 리본버튼의 아이콘 크기 조정이 안되는 것이었다.
아이콘으로 버튼을 만들어 추가하면 아이콘 크기에 관계없이 무조건 왼쪽 그림과 같이 크게 나와버리는데..
이걸 오른쪽 그림과 같이 작게하고 싶었다. + 여기에 덤으로 상황에 따라 크게도 작게도 되는 버튼으로..

그런데 아무리 구글을 검색해보아도 관련된 질문이나 답변이 찾기 어려웠다.
가장 유사한 질답: http://connect.microsoft.com/VisualStudio/feedback/details/487869/cmfcribbonbutton-constructor-with-hicon

그래서 몇가지 상황들을 만들고 여러가지로 실험을 해보니,
HasLargeMode()에서 FALSE를 반환하면 작은 아이콘으로 그려진다는 것을 알아냈다.
그래서 다음과 같은 개선된 클래스를 만들었다.


#pragma once #include <afxcontrolbars.h> // MFC의 리본 및 컨트롤 막대 지원 class CMFCRibbonButton2 : public CMFCRibbonButton { protected: // 멤버 변수 bool m_bSmallMode; public: // 생성자 CMFCRibbonButton2(void) : m_bSmallMode(false) {} CMFCRibbonButton2(UINT nID, LPCTSTR lpszText, int nSmallImageIndex=-1, int nLargeImageIndex=-1, BOOL bAlwaysShowDescription=FALSE) : m_bSmallMode(false), CMFCRibbonButton(nID, lpszText, nSmallImageIndex, nLargeImageIndex, bAlwaysShowDescription) {} CMFCRibbonButton2(UINT nID, LPCTSTR lpszText, HICON hIcon, BOOL bAlwaysShowDescription=FALSE, HICON hIconSmall=NULL, BOOL bAutoDestroyIcon=FALSE, BOOL bAlphaBlendIcon=FALSE) : m_bSmallMode(false), CMFCRibbonButton(nID, lpszText, hIcon, bAlwaysShowDescription, hIconSmall, bAutoDestroyIcon, bAlphaBlendIcon) {} public: // 멤버 함수 void SetSmallMode(void) { m_bSmallMode = true; } void SetLargeMode(void) { m_bSmallMode = false; } public: // 상속 virtual BOOL HasLargeMode() const { if (m_bSmallMode) return FALSE; return __super::HasLargeMode(); } };

시험삼아 사용해보니 잘 작동한다.
    CMFCRibbonButton2* pBtn2 = new CMFCRibbonButton2(ID_EDIT_PASTE, strTemp, 0, 0);
    pBtn2->SetSmallMode();
    pPanelClipboard->Add(pBtn2);

필요한 기능이 있다면 이 클래스에 계속 추가해서 사용해야겠다.

저작자 표시 비영리 동일 조건 변경 허락
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by |꼬마늑대|

댓글을 달아 주세요

 체크하면 블로그 관리자에게만 내용을 공개합니다.