본문 바로가기
C | C++ | VC++

Rebar Band가 우측으로 align 되는 현상

by 두루물 2010. 8. 31.
이현상은 Common-Control 6.0 이상 Manifest 가 포함되어 있고
리바 밴드속성의 cx = cxMinChild 값이 동일할 때 나타난다.

manifest with set Common-Controls version="6.0.0.0"


How to Fix:

rbBand.fMask = RBBIM_CHILD | RBBIM_IDEALSIZE |RBBIM_CHILDSIZE | RBBIM_STYLE | RBBIM_ID  ;
  .
  .
  .

 LRESULT lResult = (BOOL)InsertBand(&rbBand);
 int nIndex = IdToIndex(nID);
 
 /*
    If has manifest with set Common-Controls version="6.0.0.0" ,a new band set right align,
       ,left band is stretching to right side,this code effect killing this bug,
    by reduce left band size. krkim 2010.08
  */
 새 row 속성이 아닌이상 앞의 밴드폭을 cxMinChild 설정된 값으로 최소화로 해준다.
 if(nIndex > 0 && !(rbBand.fStyle & RBBS_BREAK))
  MinimizeBand(nIndex-1);


BOOL kxReBarCtrl::InsertBand(LPREBARBANDINFO lprbbi,int nBand)
{
 ASSERT(::IsWindow(m_hWnd));
#ifdef FIXBUG
 lprbbi->cbSize = GetSizeofRBBI();
#else
 lprbbi->cbSize = sizeof(REBARBANDINFO);
#endif
 return (BOOL)::SendMessage(m_hWnd, RB_INSERTBAND, nBand, (LPARAM)lprbbi);
}

void kxReBarCtrl::MinimizeBand(int nBand)
{
 ASSERT(::IsWindow(m_hWnd));
 ::SendMessage(m_hWnd, RB_MINIMIZEBAND, nBand, 0L);
}

This is a part of source code in my KFC Library (renamed  KFC___  to kx___)

처음에 mask 값과 cx,cxMinChild 등의 값의 폭을 조절하였지만,안되었다.

코드상에서 여러가지 잡다한 조작을 다해봐도 소용없어서, 그냥 포기하고
cx값을 cxMinChild 값 + 14 정도(툴바가 들어간 자리 이외의 Rebar의 Client Free Gap,Grip등의 좌우 여백영역)
Hard code 하였으나,찝찝하던중 Manifest 가 포함되고 안되고의 차이를 발견함.

이 예제는 msdn,코드구루,코드플젝,에그헤드 및 인터넷 어디에도 없음.
누가 이런 동일한 문제로 여기까지 찾아와 볼런진 몰겠지만,..
이문제 원인과 해결 하느라 하루를 삽질한 결과 이곳에 최초 백업용 메모로 남겨둠^^

http://krkim.net