본문 바로가기
.NET

Codejock RibbonBar 예제 및 CXTPControlEdit spin message

by leo21c 2022. 7. 15.

예제는 Codejock 설치 경로에 있는 Samples\Ribbon\RibbonControls 프로젝트를 참고 하면 된다.

Codejock RibbonBar에 Edit 컨트롤을 올려 놓고 spin 버튼을 추가해서 사용을 해봤다.

 

CXPTControlEdit을 사용하고 RibbonBar에 추가하는 방법은 아래와 같다.


CXTPRibbonGroup* pGroupSearch = pTabEdit->AddGroup(ID_GROUP1);

CXTPControlEdit* pControlEdit = DYNAMIC_DOWNCAST(
	CXTPControlEdit, pGroupSearch->Add(xtpControlEdit, ID_EDIT1));
if (pControlEdit)
{
	pControlEdit->SetEditText(_T("1"));
	pControlEdit->SetWidth(XTP_DPI_X(130));
	pControlEdit->ShowSpinButtons();
	pControlEdit->SetStyle(xtpButtonIconAndCaption);
	pControlEdit->SetTextLimit(4);
}

SetEditText() 함수는 초기화 값을 넣는다.
SetWidth() 함수는 크기를 결정한다.
ShowSpinButton() 함수를 이용해서 Spin 버튼을 표시한다.
SetStyle()함수를 이용해서 캡션과 아이콘 표시를 세팅한다.
SetTextLimit()함수는 최대 글자 길이이다.

 

그럼 Spin 버튼을 눌렀을 때 어떻게 이벤트를 받을까?

아래와 같이 Message Map을 이용한다.


ON_NOTIFY(XTP_FN_SPINUP, ID_EDIT1, OnIndentLeftSpin)
ON_NOTIFY(XTP_FN_SPINDOWN, ID_EDIT1, OnIndentLeftSpin)

void CScrollRichEditViewEx::OnIndentLeftSpin(NMHDR* pNMHDR, LRESULT* pResult)
{
	NMXTPUPDOWN* tagNMCONTROL = (NMXTPUPDOWN*)pNMHDR;
	CXTPControlEdit* pControl = DYNAMIC_DOWNCAST(CXTPControlEdit, tagNMCONTROL->pControl);

	if (pControl)
	{
		long indent = CheckIndentLeft(StrToInt(pControl->GetEditText()) + tagNMCONTROL->iDelta);

		CString strIndent;
		strIndent.Format(_T("%d"), indent);
		pControl->SetEditText(strIndent);
	}
	*pResult = 1;
}

long CScrollRichEditViewEx::SetIndentLeft(long nIndentLeft)
{
	if (nIndentLeft < 1)
		nIndentLeft = 1;
	if (nIndentLeft > 9999)
		nIndentLeft = 9999;
	return nIndentLeft;
}

위의 함수는 Spin 버튼을 누르면 호출이 되고 iDelta 만큼 더한 값을 체크해서 Edit에 표시하도록 한다.

CXPTControlEdit의 최대 값은 9999이고 최소값은 1로 처리가 되도록 구현한 함수이다.

 

예제 함수와 다르게 내가 간단하게 수정을 했다.