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
[53924] Re:Re:더블버퍼링 문제
완전초보 [] 2563 읽음    2008-07-14 17:20
api로는 안되는군요 답변 감사해요


방태윤 님이 쓰신 글 :
: 전에 답글을 한번 달았었는데...
:
: 제말이 신빙성이 없다고 생각하시는거 같은데 제 말이 맞습니다.다른 방법은 없어요.
:
:
:
: 일단 제일 중요한건 님이 다른 프로그램에 그림을 그린다는거 아닙니까,(팡야라면 게임이죠?)
:
: 다른 프로그램의 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:더블버퍼링 문제 완전초보 2563 2008/07/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.