이 예제는 하늘소프트의 전자해도 커널 사용을 위한 최소 설정을 보여주는 것으로
전자해도 커널의 초기화/종료, ENC 파일의 로드 및 가장 기본적인 해도의 화면 표시에 대한 기본 코딩 과정을 보여준다.
마우스나 키보드 등의 입력 이벤트에 대한 처리는 이 예제에는 포함되어 있지 않다.
코드
커널 초기화
단순하게 hencInit() 함수를 실행하고 반환값을 체크하는 것으로 초기화는 마무리된다.
커널 초기화 후 해도 데이터 파일을 메모리에 로드한다. 카탈로그 파일을 통해 한 번에 로드할 수도 있지만 이 예제에서는
배경 지도 및 개별 해도 파일을 하나씩 불러오는 예를 보여 주도록 하였다.
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
if( 0 > hencInit() ) {
MessageBox( GetDesktopWindow(), _T( "hnsEnc 초기화 실패" ), _T( "오류" ), MB_OK );
return FALSE;
}
TCHAR szBaseDir[1024];
getPgmDir( GetModuleHandle( NULL ), szBaseDir, 1000 );
SetCurrentDirectory( szBaseDir );
hencLoad( _T( "SHP\\CNTRY92.SENC" ) ); // Load 세계지도 배경 SENC. index=0
hencLoad( _T( "SENC\\KR1A0000.SENC" ) ); // Load 한국 지도 SENC. index=1
hencLoad( _T( "SENC\\KR1B0000.SENC" ) ); // Load 한국 지도 SENC. index=2
hencLoad( _T( "SENC\\KR1C0000.SENC" ) ); // Load 한국 지도 SENC. index=3
hencLoad( _T( "SENC\\KR1D0000.SENC" ) ); // Load 한국 지도 SENC. index=4
hencLoad( _T( "SENC\\KR1E0000.SENC" ) ); // Load 한국 지도 SENC. index=5
hencLoad( _T( "SENC\\KR1EN000.SENC" ) ); // Load 한국 지도 SENC. index=6
hencLoad( _T( "SENC\\KR1ES000.SENC" ) ); // Load 한국 지도 SENC. index=7
hencLoad( _T( "SENC\\KR1F0000.SENC" ) ); // Load 한국 지도 SENC. index=8
hencLoad( _T( "SENC\\KR1G0000.SENC" ) ); // Load 한국 지도 SENC. index=9
hencLoad( _T( "SENC\\KR1H0000.SENC" ) ); // Load 한국 지도 SENC. index=10
hencLoad( _T( "SENC\\KR1I0000.SENC" ) ); // Load 한국 지도 SENC. index=11
hencLoad( _T( "SENC\\KR1J0000.SENC" ) ); // Load 한국 지도 SENC. index=12
hencLoad( _T( "SENC\\KR1K0000.SENC" ) ); // Load 한국 지도 SENC. index=13
hencLoad( _T( "SENC\\KR1L0000.SENC" ) ); // Load 한국 지도 SENC. index=14
hencLoad( _T( "SENC\\KR1M0000.SENC" ) ); // Load 한국 지도 SENC. index=15
hencLoad( _T( "SENC\\KR1N0000.SENC" ) ); // Load 한국 지도 SENC. index=16
hencLoad( _T( "SENC\\KR1O0000.SENC" ) ); // Load 한국 지도 SENC. index=17
hencLoad( _T( "SENC\\KR1P0000.SENC" ) ); // Load 한국 지도 SENC. index=18
...
return TRUE;
}
엔진 생성/초기화
hencCreate()를 사용하여 내부적으로 사용될 OpenGL 렌더링 컨텍스트와
DC 핸들을 생성하고, hencSelect() 함수를 사용하여 현재 윈도우와 커널을 연결한다.
어플리케이션 종료시에는 hencDelete() 함수를 사용하여
생성된 OpenGL 렌더링 컨텍스트와 DC 핸들을 제거해 주어야 한다.
아래의 WM_PAINT 메시지의 처리코드와 같이 구현하도록 한다. hencRender() 후에 hencCopyBuffer()를 하면
전시된 화면에 HDC를 사용해서 GDI 함수를 바로 이용할 수 있어서 GDI에 익숙한 사용자들도 해도 위에
임의의 그래픽 오브젝트를 그릴 수 있다. 이 부분에 대한 실 구현 예는 "해도 위에 그래픽 객체 그리기" 예제를
통해 익힐 수 있다.