C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[20709] Re:^^;; 또 질문이 있어서리..
방태윤 [nabty] 850 읽음    2002-08-08 19:36
^^
지금 하시는 방법도 좋겠지만도요,현재 선택된 객체가 이동할때 다른 객체의 밑으로 들어가는 경우도(가려질때) 고려해야 할것 같습니다.

대부분이 사용하는 방법인 이동할때 외곽선만 그리는 방식으로 하시던가요.
아니면 이동중에도 꼭 객체의 모양이 그대로 유지해야 한다면 전체 객체를 다시 다 그려주는 방법이 제일 간단하리라 생각합니다.

후자의 방법이라면 저는 이렇게 하겠습니다.(제 생각일 뿐입니다^^)

mouse_down()
{
  if 객체를 찾아서 객체를 선택하고 판단결과 move 작업이라면.
  {
    move_work=true;
    old_x=X;
    old_y=Y;
  }
}

mouse_move()
{
  if(!move_work) return;
  if(old_x==X && old_y==Y) return;

  int dx=X-old_x;int dy=Y-old_y;    
  old_x=X;old_y=Y;
 
  현재 선택된 객체의 좌표를 dx,dy 만큼 이동시킨다.
  그리고 모든객체를 다시그린다.
  여기서 여유가 되면 움직인 부분의 좌표를 계산해서
  변한부분만 clip area 를 정해주면 더 좋겠지요.
  더 여유가 되면 객체가 clip area 내에 걸리는것만 체크해서 그려주게 하면 좋구요...
  더 여유가 되신다면  다른 메모리상의 비트맵에 먼저 그린후 완료된 비트맵으로
  화면을 갱신하면 더 좋구요.(객체가 여러개 겹쳐있을때 뻔적거리는거 방지)

}
mouse_up()
{
  move_work=false;
  물론 최종적으로 다시그려줌.   
}



최수정 님이 쓰신 글 :
: 맨날 질문만 해서리.. 죄송 스러버여..  ^(_._)^ -->엽기토끼 인사버젼..헤~
:
: //------------------------ 마우스 무브 할때..^^ ---------------------
:      r.left = sh[i].StartX;
:      r.top = sh[i].StartY;
:      r.right = sh[i].EndX;
:      r.bottom = sh[i].EndY;
:      //assert(PtInRect(&r,pt));
:      if(PtInRect(&r,pt))
:         {
:         ::OffsetRect(&r,X,Y); -------------------->>  마우스가 움직일때  마다
:                                                       좌표이동하믄서 그림그리는 부분 이구여..
:
:         DrawShape(r.left , r.top , r.right , r.bottom);  -->> 그리는 부분..
:         // iROP2 = ::SetROP2(hWnd, R2_NOTXORPEN);
:         // Image1->Canvas->ClipRect(Image1->Canvas->Handle);
:
:         aaa=::InvalidateRect(Image1->Canvas->Handle, &Oldr, False);
:         --->> 잔상없앨라구 쓴 api()함수인데여..
:               문제는 aaa= false 가 들어가여..
:
:         //::SetROP2(hDC,iROP2);
:         DrawShape(Oldr.left , Oldr.top , Oldr.right , Oldr.bottom);
:         ----->> 글구 InvalidateRect()함수 쓰고..다시 그려 줘야 하나여.
:                 몰겠어여..ㅠ.ㅠ
:
:         Oldr.left = r.left;
:         Oldr.top = r.top;
:         Oldr.right = r.right;
:         Oldr.bottom = r.bottom;
:
:         //ShowMessage("들어왔음");
:         }
:       
:        마우스 이동할때 좌표이동해서 그려지는건 그려지는데염..
:        잔상이 안 없어져여..
:
:        바쁘신데 맨날 맨날 귀찮게 해드리네염.. ^^;;
:

+ -

관련 글 리스트
20708 ^^;; 또 질문이 있어서리.. 최수정 741 2002/08/08
20709     Re:^^;; 또 질문이 있어서리.. 방태윤 850 2002/08/08
20720         ^^ 감사해여..매번.. 글구여.. 저번에 님이 주신 소스랑..비슷하네여.. 최수정 734 2002/08/09
20721             Re:^^ 감사해여..매번.. 글구여.. 저번에 님이 주신 소스랑..비슷하네여.. 방태윤 868 2002/08/09
20722                 그렇군여.. ^(_._)^ 꾸뻑~ 글믄..다시 혼자 연구를~~ 헤~ 최수정 715 2002/08/09
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.