카테고리 : 프로그래밍 팁

Visual C++ 확장기능: 클래스 속성 만들기

c#에 보면 property란게 있어서 코딩시에 변수처럼 사용하면서 값을 대입하거나 가져올때의 동작을 작성할 수가 있다.
이런 property는 vc++에서도 확장기능으로 지원한다... 상당히 예전부터 지원하던거라 새로운 내용은 아니다..

msdn에 의한 스펙을 보면 다음과 같다.

__declspec( property( get=get_func_name ) ) declarator
__declspec( property( put=put_func_name ) ) declarator
__declspec( property( get=get_func_name, put=put_func_name ) ) declarator

클래스 선언안에 위와 같은 형식으로 적으면 되는데, property() 의 괄호안에 get항목만 적으면 읽기전용 속성이 되는것이고
put항목만 적으면 쓰기전용, get,put둘다 적으면 읽기,쓰기가 다 되는 속성을 만드는 것이다.














msdn에 있는 예제보기

by kiho | 2007/12/19 15:57 | 프로그래밍 팁 | 트랙백 | 덧글(1)

DIrect3D 화면 텍스쳐에 그리기

화면에 보여줄 내용을 백버퍼 대신 사용자가 지정한 서피스(Surface)에 그리게 하는 기능이다.

IDirect3DDevice9 의 함수중에 쓸것은..

CreateRenderTarget
SetRenderTarget
GetRenderTarget

CreateRenderTarget으로 surface를 만든다.
GetRenderTarget으로 원본 백 버퍼를 가져와 보관하고...
SetRenderTarget으로 위에서 만든 서피스를 지정한다...
그 후
BeginScene, EndScene으로 원래 하던 렌더링을 한다..
그 내용이 지정한 서피스안에 들어가게 된다..
그 후 SetRenderTarget으로 원래 백 버퍼를 복구시키고..

이 과정에서 얻은 서피스의 내용을 텍스쳐로 옮겨서
그대로 화면에 렌더링한다.. (안 그러면.. 당연히 그 프레임에는 아무것도 안나오게된다.... 서피스에만 그렸으니까)


CreateRenderTarget 함수를 쓰지 않고
RenderTarget옵션을 줘서 CreateTexture를 호출하여 텍스쳐를 바로 만들어도 된다...
대신 D3DPOOL_DEFAULT 옵션만을 지원하므로.. 귀찮은 점이 있다.. (D3DPOOL_MANAGED 가 편하다..)

나는 요청이 들어올때 마다 캡쳐를 하여 새로운 텍스쳐에 복사하도록 코딩하였다..

밑은 내가 작성한 코드를 정리한것이다.


LPDIRECT3DSURFACE9 originalTarget; // 백 버퍼
LPDIRECT3DSURFACE9 capturingTarget; // 캡쳐된 내용이 들어갈 서피스
device->GetRenderTarget(0, &originalTarget); // 가져온다..(백업?)

// 백 버퍼와 같은 속성으로 렌더타겟을 만든다.
D3DSURFACE_DESC desc;
originalTarget->GetDesc(&desc);
device->CreateRenderTarget(desc.Width, desc.Height, desc.Format, 0, 0, TRUE, &capturingTarget, NULL);

// 렌더타겟 설정후 그림.
device->SetRenderTarget(0, this->capturingTarget);
device->Clear(0, NULL, D3DCLEAR_TARGET, 0, 1, 0);
device->BeginScene();
// 그릴 내용이 여기에..
device->EndScene();

// 여기서 텍스쳐를 만들어 캡쳐된 서피스의 내용을 복사한다...

// 원래대로 되돌린다.
device->SetRenderTarget(0, originalTarget);
device->BeginScene();
// 위에서 만든 텍스쳐를 전체화면에 그림.. 혹은 맘대로..
device->EndScene();
device->Present(NULL, NULL, NULL, NULL);

capturingTarget->Release(); // 다 쓴 건 release....

아 실제로는.. capturingTarget은 한번 만들고 계속 쓰게 했다.. 마지막에 release하고..

by kiho | 2006/11/23 01:20 | 프로그래밍 팁 | 트랙백 | 덧글(0)

D 프로그래밍 언어

여러가지로 편해보이는 프로그래밍 언어 D! ㄱ-;
이걸 공부해 봐야겠다.. 좋아보인다.. 아직까진

http://digitalmars.com D언어 만든 회사인듯 하다... 컴파일러 제공
http://dsource.org 여러 강좌와 D언어로 제작중인 프로젝트가 있다..

by kiho | 2005/12/18 18:29 | 프로그래밍 팁 | 트랙백 | 덧글(0)

cout 출력조절..

by kiho | 2005/11/27 05:56 | 프로그래밍 팁 | 트랙백(1) | 덧글(0)

구조체 배열 초기화..

(밑에 둘중 위에것이 된다는 것을) 몰랐다... 바보다 -_-;;

struct point
{
int x, y;
};

1)
struct point pt[] =
{
1, 2, 3, 4
};

2)
struct point pt[] =
{
{1, 2}, {3 ,4}
};

둘다 된다...
여태까지 2번으로만 했었는데...
그래도 보기 더 편하니까 -_-

by kiho | 2005/10/15 01:56 | 프로그래밍 팁 | 트랙백 | 덧글(0)

WINAPI 체크박스

BM_GETCHECK 메시지로 상태를 얻어온다
물론 반대는 BM_SETCHECK

MFC에서 체크박스용 클래스가 없어서 약간 헤맴..

by kiho | 2005/10/05 00:07 | 프로그래밍 팁 | 트랙백 | 덧글(0)

숫자에 3자리마다 , 찍기

데브피아에 이 주제로 글이 올라왔다..
답글은 별로 없었지만..
근데 갑자기 duff's device가 떠올랐다
(http://zsoo.net/prg/cpp/duffs_device.html)
그래서 그냥 간단하게 만들었다..

생각해본 다음에 소스를 열어보세요..


소스코드 보기

by kiho | 2005/08/08 02:19 | 프로그래밍 팁 | 트랙백 | 덧글(2)

콘솔프로젝트외의 프로젝트에서 콘솔창 띄우기

설명 필요없을정도 이므로 소스로 대신함..
핸들을 릴리즈 해줘야한다든지는 잘 몰라서 그냥 둠..


소스코드 보기

by kiho | 2005/08/08 02:18 | 프로그래밍 팁 | 트랙백 | 덧글(0)

c++ 로 그냥..

재미는 없고..


소스코드 보기

by kiho | 2005/08/08 02:17 | 프로그래밍 팁 | 트랙백 | 덧글(0)

마우스 캡쳐

마우스 포인터가 현재 창을 벗어난후에도 마우스 이벤트를 입력받기 위해 사용한다
3D툴에서 마우스로 회전을 하는데 마우스가 창을 벗어나서 회전이 멈춘다면 별로 보기좋지 않을것이다..
어쨌든

SetCapture(HWND);
ReleaseCapture(void);

WM_LBUTTONDOWN, WM_LBUTTONUP 등에 잘 침투시키면 된다

by kiho | 2005/08/08 02:16 | 프로그래밍 팁 | 트랙백 | 덧글(3)

◀ 이전 페이지          다음 페이지 ▶