|
장성호님, 로리시아님..
답변 정말 감사드립니다.
엄청나게 큰 도움이 되었습니다. ㅠ.ㅜ
장성호님께 더 여쭤볼게 있는데요.
샘플 소스에서요.
if(Msg.LParamLo>18 && Msg.LParamLo< ScrollBar6->Width-18)
이 부분,
if(abs((Msg.LParamLo-18)-iScrPos)>9)
이 부분에서
값을 비교하고 가감을 하는데, 저 값들의 의미가 정확하게 무엇인지 모르겠습니다.
값을 다른 값으로 변경하니까, 스크롤바 움직일때 변화는 생기는데,
커서가 위치한 곳으로 스크롤바가 이동하는 부분이 있고, 그렇지 않은 부분이 생기더라구요.
스크롤바는 상하로 되어 있습니다.
답변 부탁 드릴께요.
그리고 다시 한번 감사드린다는 말씀 드립니다. ^^
장성호 님이 쓰신 글 :
: 1. 예쁘게 꾸미는것은?
: 지난번 세미나때 tip break 에 Image을 ScrollBar의 배경으로 넣어서 하는 방법이 소개되었습니다.
: 뭐 원리는 간단해요 Scrollbor의 크기에 따라 bitmap 이미지를 짤라서 paint이벤트때 draw해주는것뿐...
: 원리는 간단하지만 고려할 사항들이 많을꺼예요
:
: 2. 스크롤바 크릭한곳 바로가기
: 음... MouseDown 때.. 처리해주면 되는데..
: TStrollBar 의 기본 이벤트에는 MouseDown 이 없으므로 서브 클래싱해서 구현하면 됩니다.
:
: -----샘플----
: //---------------------------------------------------------------------------
: TWndMethod OrigProc;
: //---------------------------------------------------------------------------
: void __fastcall TForm1::FormCreate(TObject *Sender)
: {
: OrigProc=ScrollBar1->WindowProc;
: ScrollBar1->WindowProc = ScrollWinProc;
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::ScrollWinProc(TMessage& Msg)
: {
: if(Msg.Msg==WM_LBUTTONDOWN)
: {
: if(ScrollBar1->Kind==sbHorizontal) //좌우 스크롤 Bar인경우..
: {
: if(Msg.LParamLo>18 && Msg.LParamLo< ScrollBar1->Width-18) //좌우 맨끝에 버튼을 클릭한 경우를 제외
: {
: int iScrPos=ScrollBar1->Position*(ScrollBar1->Width-36)/ScrollBar1->Max;
: if(abs((Msg.LParamLo-18)-iScrPos)>9) //가운데 스크롤 버튼위에 mouse_down인경우를 제외
: {
: //전체 Max값에서 Mouse를 Click한 위치(Msg.LParamLo )의 좌표를 계산해 Position 값을 변경해줌
: // 18 이라는 숫자는 좌우의 화살표버튼 , 가우데 스크롤 버튼의 width (Vertical인경우 Height) 입니다.
: ScrollBar1->Position = (ScrollBar1->Max * Msg.LParamLo)/(ScrollBar1->Width-36);
: return; //직접 scroll을 움직여 줬으므로 .. mouse_down messge처리를 끝낸다.
: }
: }
: }
: else //상하 스크롤 Bar인경우..
: {
: if(Msg.LParamHi>18 && Msg.LParamHi< ScrollBar1->Height-18) //좌우 맨끝에 버튼을 클릭한 경우를 제외
: {
: int iScrPos=ScrollBar1->Position*(ScrollBar1->Height-36)/ScrollBar1->Max;
: if(abs((Msg.LParamHi-18)-iScrPos)>9) //가운데 스크롤 버튼위에 mouse_down인경우를 제외
: {
: //전체 Max값에서 Mouse를 Click한 위치(Msg.LParamHi )의 좌표를 계산해 Position 값을 변경해줌
: ScrollBar1->Position = (ScrollBar1->Max * Msg.LParamHi)/(ScrollBar1->Height-36);
: return;
: }
: }
: }
: }
:
: //MOUSE_LBUTTONDOWN 이벤트가 Scrollbar의 scroll영역 안에서 일어난것을 제외한
: // 모든 메세지는 원래(Original ) WindowProc에서 처리..
: OrigProc( Msg );
: }
: //
:
: 허접 님이 쓰신 글 :
: : 허접입니다.
: : 얼마전에도 글을 올렸었는데, 아무런 답변을 안주시네요..
: : 컴포넌트중에, scrollbox, checklistbox, 그리고 scrollbar..
: : 이 컴포넌트들을 보면, 윈도우에서 기본으로 제공하는 style의 모양만 나오잖아요?
: : 여기에 이것들을 좀 이쁘게 꾸미려고 합니다.
: : 그런데 방법을 모르겠네요. html 태그도 아니고.. 쩝~
: : ㅇ ㅏ.. 그리고 한 가지 더 있습니다.
: : 스크롤바를 클릭하면 클릭한 곳으로 스크롤바를 바로 이동시키고 싶은데, 그게 되는지요..
: : 예를 들어 winamp나 media player의 equalizer 처럼 마우스 클릭을 하면 해당 위치로 바로 가는것 처럼요..
: : 답변 좀 주세요~ ㅠ.ㅜ
: : 부탁드립니다~
|