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
[49956] Re:Paint가 계속 호출됩니다.
장성호 [nasilso] 1362 읽음    2007-07-19 09:33
VC의 PictureBox를 써보진 않았지만
   VC의 PictureBox는 CBuilder에서는 System탭에 있는 PaintBox가 아닐까 싶은데요..


1. Paint 이벤트가 계속 발생는 문제..
   TImage는 Handle이 없습니다. HDC도 없구요
   결론적으로 Form의 DC에다가 draw하는겁니다.
  
   그래서 Image에서 Draw하면 그것을 화면에 반영하기 위해 WM_PAINT 이벤트가 발생합니다.

   TImage는 Canvas에 Draw한것을 기억합니다.

   그러므로 아무때나 한번만 draw해주면 됩니다.

//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender) // TImage에는 한번만..
{
    Image1->Canvas->TextOut(20,20,"하하하");
    Image1->Canvas->MoveTo(0,0);
    Image1->Canvas->LineTo(100,100);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormPaint(TObject *Sender)   // Form의 Canva에 그리는것은?
{
    Canvas->TextOut(20,20,"하하하");
    Canvas->MoveTo(0,0);
    Canvas->LineTo(100,100);
}
//---------------------------------------------------------------------------



2. Lock / UnLock 문제
   
    그냥은  안해도 됩니다.

    쓰레드가 여럿 있을때 ,  여러 쓰레드에서 Canvas에 접근할때 사용합니다.

     vcl 소스에...
     Lock      ==>  EnterCriticalSection(FLock);
     UnLock  ==>  LeaveCriticalSection(FLock);

     Lock()함수에 커서 갇다 두고 F1  Help를 보세요 설명이 나옵니다.


그럼...


android 님이 쓰신 글 :
: 빌더를 처음 사용하는지라 툴도 익힐겸 간단히 테트리스를 짜보려고 합니다.
: VC의 PictureBox에 해당하는것이 TImage인가요?
:
: void __fastcall Form1Paint(Tobject *Sender)
: {
:     static int i=0;
:     TRACE("Test = %d", i++);
:
:     Image1->Canvas->Lock();
:     Image1->Canvas->TextOut(20,20,"하하하");
:     Image1->Canvas->MoveTo(0,0);
:     Image1->Canvas->LineTo(100,100);
:     Image1->Canvas->Unlock();
: }
:
: 두가지 질문입니다.
:
: 1.
: Paint는 화면이 가려진다거나 했을때 호출되는건데 위의 소스는 계속 호출됩니다.
: 그래서 매우 깜빡깜빡거리고 있고 TRACE문도 쉴새없이 실행되고있죠.
: 아무래도 TImage 때문인거같은데.. 어떻게 끄나요?
:
: 2.
: 스레드를 실행하는것도 아니고 TImage위에 선과 글씨만 쓰는건데 Lock, Unlock이 왜 필요합니까?
: Q&A 검색해봤는데 대부분 그걸 쓰더군요.

+ -

관련 글 리스트
49954 Paint가 계속 호출됩니다. android 1069 2007/07/19
49956     Re:Paint가 계속 호출됩니다. 장성호 1362 2007/07/19
49960         Re:Re:Paint가 계속 호출됩니다. android 1609 2007/07/19
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.