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
[53913] Re:더블버퍼링 문제
방태윤 [nabty] 1689 읽음    2008-07-14 09:56
전에 답글을 한번 달았었는데...

제말이 신빙성이 없다고 생각하시는거 같은데 제 말이 맞습니다.다른 방법은 없어요.



일단 제일 중요한건 님이 다른 프로그램에 그림을 그린다는거 아닙니까,(팡야라면 게임이죠?)

다른 프로그램의 dc 를 얻어서 그릴수는 있습니다.

그런데 그리면 뭐해요? 다른 프로그램이 다시 랜더링 해버리는데요.

보통 게임은 15 fpt 이상 나올텐데...1초에 15번 다시 그려집니다.

그러니까 님이 그린 그림은 없어져 버리죠.

무한 루프로 그려봤자...그리면 지워지고,,,반복되니까...깜박거리는겁니다.


더블버퍼링은 내가 내 프로그램 만들때....깜벅거리는거 없애는 기법이지

남의 프로그램의 dc 얻어서 그리는 경우와는 전혀 상관이 없습니다.



해결책은...함수 후킹입니다만,,,

전에도 말했듯이 이쪽 부분이 녹녹한 분야가 아닙니다.




전에 답변드린 내용 참고하세요...


구글같은데서 directX hook 정도로 검색해보면 몇개의 예제들이 있을겁니다.

그런 예제를 바탕으로 간단하게 DX 프로그램 하나 만들어서 테스트하면 기능 구현이 가능합니다...

하지만 그걸 실제로 게임 화면에 적용하려면...여러 변수가 있어 딱 된다는 보장이 없습니다.

더군다나 요즘 대부분 게임들은 가드라는 해킹방지툴이 게임프로그램을 보호하고 있으므로.

예제에서 사용했던 관련 api 함수들이 대부분 후킹되어 작동을 안하기 때문입니다.







완전초보 님이 쓰신 글 :
: 다른프로그램에 그림을 계속 그릴려고합니다
: 일단 소스는 아래와같습니다
: void bmp(int t)
: HWND p; //프로그램 동작 종료를위한 dc
: Graphics::TBitmap *wa1 =new Graphics::TBitmap;
:    
:  TResourceStream *ResStream1;//리소스에요 비트맵 파일들어잇는
:  HINSTANCE ImageDllInstance;
:  ImageDllInstance = LoadLibrary("pslib.dll");    //DLL에서 이미지들을 가지고 온다.
:  ResStream1 = new TResourceStream( (int)ImageDllInstance, "ID_800X600", RT_RCDATA );
:  wa1->LoadFromStream( dynamic_cast<TStream*>( ResStream1 ) );
:  HWND h = FindWindow(NULL,"팡야:시즌4");//두번쩨 윈도우 핸들 찾기
:  HDC dc = GetDC(h) ;dc를 얻음
: do{
:     TransparentBlt(dc, 0,0, 800,600, wa1->Canvas->Handle,
:     0,0,800,600,RGB(255,255,255));//dc에다가 투명 으로 그려줌
:     Application->ProcessMessages(); 메세지처리
:     Sleep(t);//처리시간의 여유를줌
:  p = FindWindow(NULL,"사용중"); // 첫번쩨프로그램 핸들
:  if(p == 0)
:     break; // 첫번쩨프로그램의 캡션이 사용중이아니면 무한반복동작 종료
:  }while(1); //동작종료를위한것임
:  delete p;
:  delete wa1;
:  delete ResStream1;
:  ReleaseDC(h,dc);
:  FreeLibrary(ImageDllInstance);
: }
: 우선 여기까지가 제가사용하고있던 소스에요
: 이소스로는 계속 깜빡입니다
: 그리고 이소스는 DLL 내에 넣어둿구요
: 호출해서스고있습니다
: 여기서 더블버퍼링을 하려고합니다
: 이함수 호출하는 프로그램에서
: DoubleBuffered = true;
: 써준다고해서 되는게 아니더군요
: 제가원하는건 프로그램 실행시킨다음 그려지고있는 프로그램 이 활성화 되어있을때도 계속
: 그러줘야하거든요 그러니까
: 프로그램이 2개있을때 첫번쩨에서 그려주는 프로그램이 동작하고
: 두번쩨 프로그램을 사용중일때
: 첫번쩨 프로그램이 계속 동작되는상태가 되야하거든요
: OnPaint() 에 쓰면 첫번떼 윈도우가 활성화 안되면 안그려주고요
: 한번그리고 그냥 멈추거든요 그렇다고 OnPaint()에 무한반복해버리면
: 프로그램이 먹통이되구요 그래서 위소스처럼
: 그래서  dll 넣고 호출해서쓰는중이에요
: 설명이좀 난해할가모르겠네요 dll에서 함수넣고 하는방법이나
: 온페인트 에 바로 쓰는방법이나 둘중에 깜빡이지않게함과동시에
: 두번쩨프로그램이 사용중이 되더라도 첫번쩨 프로그램이 계속동작 하도록하는게
: 제목적이거든요 
: 어떻게 더블버퍼링 하는방법좀 알려주실수없나요?
: winapi.co.kr에서나온건  이해하기어렵네요 그거보고따라해도
: 이해가안되네요

+ -

관련 글 리스트
53911 더블버퍼링 문제 완전초보 1712 2008/07/14
53913     Re:더블버퍼링 문제 방태윤 1689 2008/07/14
53924         Re:Re:더블버퍼링 문제 완전초보 2564 2008/07/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.