2007년 12월 19일
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)
2006년 11월 23일
화면에 보여줄 내용을 백버퍼 대신 사용자가 지정한 서피스(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)
2005년 12월 18일
여러가지로 편해보이는 프로그래밍 언어 D! ㄱ-;
이걸 공부해 봐야겠다.. 좋아보인다.. 아직까진
http://digitalmars.com D언어 만든 회사인듯 하다... 컴파일러 제공
http://dsource.org 여러 강좌와 D언어로 제작중인 프로젝트가 있다..
# by kiho | 2005/12/18 18:29 | 프로그래밍 팁 | 트랙백 | 덧글(0)
2005년 10월 15일
(밑에 둘중 위에것이 된다는 것을) 몰랐다... 바보다 -_-;;
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)
2005년 10월 05일
BM_GETCHECK 메시지로 상태를 얻어온다
물론 반대는 BM_SETCHECK
MFC에서 체크박스용 클래스가 없어서 약간 헤맴..
# by kiho | 2005/10/05 00:07 | 프로그래밍 팁 | 트랙백 | 덧글(0)
2005년 08월 08일
데브피아에 이 주제로 글이 올라왔다..
답글은 별로 없었지만..
근데 갑자기 duff's device가 떠올랐다
(http://zsoo.net/prg/cpp/duffs_device.html)
그래서 그냥 간단하게 만들었다..
생각해본 다음에 소스를 열어보세요..
소스코드 보기
# by kiho | 2005/08/08 02:19 | 프로그래밍 팁 | 트랙백 | 덧글(2)
2005년 08월 08일
설명 필요없을정도 이므로 소스로 대신함..
핸들을 릴리즈 해줘야한다든지는 잘 몰라서 그냥 둠..
소스코드 보기
# by kiho | 2005/08/08 02:18 | 프로그래밍 팁 | 트랙백 | 덧글(0)
2005년 08월 08일
# by kiho | 2005/08/08 02:17 | 프로그래밍 팁 | 트랙백 | 덧글(0)
2005년 08월 08일
마우스 포인터가 현재 창을 벗어난후에도 마우스 이벤트를 입력받기 위해 사용한다
3D툴에서 마우스로 회전을 하는데 마우스가 창을 벗어나서 회전이 멈춘다면 별로 보기좋지 않을것이다..
어쨌든
SetCapture(HWND);
ReleaseCapture(void);
WM_LBUTTONDOWN, WM_LBUTTONUP 등에 잘 침투시키면 된다
# by kiho | 2005/08/08 02:16 | 프로그래밍 팁 | 트랙백 | 덧글(3)