최근 Feature Pack을 사용해서 프로젝트를 변환하고 있는데..
동적으로 Plugin DLL들의 기능을 읽어서 리본바에 버튼을 추가하는 기능을 수정하고 있었다.
큰 버튼, 작은 버튼이 동적으로 추가되는데..
HICON으로 생성한 버튼은 리본버튼의 아이콘 크기 조정이 안되는 것이었다.
아이콘으로 버튼을 만들어 추가하면 아이콘 크기에 관계없이 무조건 왼쪽 그림과 같이 크게 나와버리는데..
이걸 오른쪽 그림과 같이 작게하고 싶었다. + 여기에 덤으로 상황에 따라 크게도 작게도 되는 버튼으로..
그런데 아무리 구글을 검색해보아도 관련된 질문이나 답변이 찾기 어려웠다.
가장 유사한 질답: http://connect.microsoft.com/VisualStudio/feedback/details/487869/cmfcribbonbutton-constructor-with-hicon
그래서 몇가지 상황들을 만들고 여러가지로 실험을 해보니,
HasLargeMode()에서 FALSE를 반환하면 작은 아이콘으로 그려진다는 것을 알아냈다.
그래서 다음과 같은 개선된 클래스를 만들었다.
시험삼아 사용해보니 잘 작동한다.
CMFCRibbonButton2* pBtn2 = new CMFCRibbonButton2(ID_EDIT_PASTE, strTemp, 0, 0);
pBtn2->SetSmallMode();
pPanelClipboard->Add(pBtn2);
필요한 기능이 있다면 이 클래스에 계속 추가해서 사용해야겠다.
동적으로 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);
필요한 기능이 있다면 이 클래스에 계속 추가해서 사용해야겠다.
'스킬북 > 코드 조각' 카테고리의 다른 글
| 실수를 문자열로 변환하기 (4) | 2010/04/07 |
|---|---|
| 아이콘 크기 조절 가능한 RibbonButton (0) | 2010/04/01 |
| VC6과 VC8에서 wchar_t가 호환되게 만들기 (0) | 2009/10/16 |
| C++에서 상속이 안되는 클래스 만들기 (2) | 2009/10/16 |


|꼬마늑대|


댓글을 달아 주세요