반응형

클래스가

static LRESULT CALLBACK 함수명(); 이라는 멤버함수를 가지고 있습니다.

이 정적함수속에서 일반 멤버변수를 호출하였더니,

컴파일시에 비정적멤버를 잘못호출하였다는 에러가 뜹니다.

왜 에러가 뜨는건지. 자세히 설명해 주실 수 있으신지요..

감사합니다.

 

///////////////////////////////////////////////////////////////////////////////////

 

 

정적 함수란 클래스가 존재하지 않아도 호출이 가능한 함수입니다.

그런데 정적 함수 속에서 인스턴스가 생성되지도 않은 개체의 비정적 멤버 함수를 호출했으니

컴파일 에러가 나는건 당연지사입니다.

그런 에러 해결법을 위해서는...

static 멤버 변수로 자기 자신에 대한 포인터를 두거나, 혹은 매개변수로 전달을 받거나..할 수 있겠네요.


class Test
{
public:
........
........
static LRESULT CALLBACK CallBackFunc()
{
if( _This == NULL) _This = new _This;

...
....
return S_OK;
}


private:
static Test* _This;
}


반응형
반응형


 //윈도우 사이즈 계산.
 RECT rc = { startX, startY, wWidth+startX, wHeight+startY };
 AdjustWindowRect( &rc, WS_OVERLAPPEDWINDOW, FALSE );

 //윈도우 생성
 m_hWnd = CreateWindow( APP_CLASS_NAME, APP_NAME, WS_OVERLAPPEDWINDOW,
   rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, NULL, NULL, hInstance,
  NULL );
 if( !m_hWnd )
 {
  MessageBoxA(NULL, "TestWindow.cpp : Windows handle Error", "HanFW_Error", MB_OK);
  return E_FAIL;
 }

이런식으로 rc에 저장된 사이즈에 AdjustWindowRect을 추가해주면
알아서 제목표시줄, 메뉴등이 포함된 사이즈로 리사이즈된다.
 
나름 초보티는 벗나...라고 생각했는데 이런것도 몰랐다니 나에게 정말 실망이다..

반응형
반응형

RECT rc;
 if(!GetClientRect( hWnd, &rc ))
 {
  MessageBoxA(NULL, "D3D10Device.cpp : Getting window's client size error", "HanFW_Error", MB_OK);
  return E_FAIL;
 }

 //뷰포트사이즈
 vpWidth = rc.right - rc.left;
 vpHeight = rc.bottom - rc.top;

----------------------------------------------------------------------------------
이런식으로 세팅해놓은 윈도우 사이즈의 뷰포트 사이즈를 얻어올 수 있다.
반면 메뉴와 바등의 기타 윈도우 사이즈 통째로 얻어오려면

BOOL GetWindowRect(HWND hWnd, LPRECT lpRect);

이걸 쓰면 된다.
바보같이 일일히 입력하는 수고를 하지 말자...
반응형
반응형

헤더파일에서 private 속성으로 다음과 같이 정의 된 포인터들은
private:
 ID3D10Device *m_pDevice;
 ID3D10Texture2D *m_pDepthStencilBuf;
 ID3D10RenderTargetView *m_pRTView;
 ID3D10DepthStencilView *m_pDepthStencilView;
 IDXGISwapChain *m_pSwapChain;

cpp파일 생성자에서 다음과 같은 방법으로 초기화 해야한다...
CD3D10Device::CD3D10Device(void)
: m_pDevice(NULL)
, m_pDepthStencilBuf(NULL)
, m_pRTView(NULL)
, m_pDepthStencilView(NULL)
, m_pSwapChain(NULL)
{
}

음.. 객체지향들을 때 분명 배웠던건데 왜 까먹은거지....

역시.. 자주 안쓰는 방법이니 까먹은걸지도....
반응형
반응형


헤더파일의 중복 include를 방지 하기 위한 방법!!!!
컴파일러에게 해당 헤더 파일이 한번만 빌드되도록 하는 방법이 있다.

#pragma once
=> 전처리기한테 지시하는 것임.
    한 번 읽으면 다시는 읽지 마라라고 명령한것임

- 사용예 -
#pragma once

어쩌구(예를들면 #include...)

class 어쩌구
{
주저리주저리
}

#ifndef ~ #define ~ #endif 를 이용한 헤더파일 Wrapper 방식보다 쪼끔 더 빠르다 한다.

무조건 헤더파일을 한번 열어서 #ifndef 검사를 한번 해야하기때문이라 한다. 

 

반응형

+ Recent posts