BOOL C3dMazeEffect::InitScene(HDC hDC) { GLGuarder guarder(hDC); { // init glClearColor(MAZE_GL_BG_COLOR); glShadeModel(GL_SMOOTH); glClearDepth(1.0f); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); } { // reshape const RECT &client = GetClientArea(); const RECT &wnd = GetWindowArea(); glViewport(client.left, wnd.bottom - client.bottom, client.right - client.left, client.bottom - client.top); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(-1.0, 1.0, -1.0, 1.0, 1.0, m_pMaze->GetMazeSize()*MAZE_GL_GRID_SIZE*2); glMatrixMode(GL_MODELVIEW); } { // texture m_tex[MT_WALL] = LoadTexture(hDC, IDBMP_3DM_WALL, 128, 128); m_tex[MT_CROSS_POINT] = LoadTexture(hDC, IDBMP_3DM_CROSS_POINT, 128, 128); glEnable(GL_TEXTURE_2D); } // init lists InitLists(); return TRUE; }
int KX_BlenderCanvas::GetMouseY(int y) { int top = GetWindowArea().GetTop(); return y - (m_area_top - top); }
int KX_BlenderCanvas::GetMouseX(int x) { int left = GetWindowArea().GetLeft(); return x - (left - m_area_left); }
/** * 윈도우 화면 버퍼에 현재 라인부터 화면에 출력 */ BOOL DrawTextBuffer( QWORD qwWindowID, TEXTINFO* pstInfo ) { DWORD i; DWORD j; DWORD dwBaseOffset; BYTE bTemp; int iXOffset; int iYOffset; int iLineCountToPrint; int iColumnCountToPrint; char vcBuffer[ 100 ]; RECT stWindowArea; int iLength; int iWidth; int iColumnIndex; // 좌표의 기준값 iXOffset = MARGIN; iYOffset = WINDOW_TITLEBAR_HEIGHT; GetWindowArea( qwWindowID, &stWindowArea ); //-------------------------------------------------------------------------- // 파일 정보 표시 영역에 정보를 출력 //-------------------------------------------------------------------------- // 파일 이름과 현재 라인, 그리고 전체 라인 수를 출력 iWidth = GetRectangleWidth( &stWindowArea ); DrawRect( qwWindowID, 2, iYOffset, iWidth - 3, WINDOW_TITLEBAR_HEIGHT * 2, RGB( 55, 215, 47 ), TRUE ); // 임시 버퍼에 정보를 저장 sprintf( vcBuffer, "File: %s, Line: %d/%d\n", pstInfo->vcFileName, pstInfo->iCurrentLineIndex + 1, pstInfo->iMaxLineCount ); iLength = strlen( vcBuffer ); // 저장된 정보를 파일 정보 표시 영역의 가운데에 출력 DrawText( qwWindowID, ( iWidth - iLength * FONT_ENGLISHWIDTH ) / 2, WINDOW_TITLEBAR_HEIGHT + 2, RGB( 255, 255, 255 ), RGB( 55, 215, 47 ), vcBuffer, strlen( vcBuffer ) ); //-------------------------------------------------------------------------- // 파일 내용 표시 영역에 파일 내용을 출력 //-------------------------------------------------------------------------- // 데이터를 출력할 부분을 모두 흰색으로 덮어쓴 뒤에 라인을 출력 iYOffset = ( WINDOW_TITLEBAR_HEIGHT * 2 ) + MARGIN; DrawRect( qwWindowID, iXOffset, iYOffset, iXOffset + FONT_ENGLISHWIDTH * pstInfo->iColumnCount, iYOffset + FONT_ENGLISHHEIGHT * pstInfo->iRowCount, RGB( 255, 255, 255 ), TRUE ); //-------------------------------------------------------------------------- // 루프를 수행하면서 라인 단위로 화면에 출력 //-------------------------------------------------------------------------- // 현재 라인에서 남은 라인 수와 한 화면에 출력할 수 있는 라인 수를 비교하여 // 작은 것을 선택 iLineCountToPrint = MIN( pstInfo->iRowCount, ( pstInfo->iMaxLineCount - pstInfo->iCurrentLineIndex ) ); for( j = 0 ; j < iLineCountToPrint ; j++ ) { // 출력할 라인의 파일 오프셋 dwBaseOffset = pstInfo->pdwFileOffsetOfLine[ pstInfo->iCurrentLineIndex + j ]; //---------------------------------------------------------------------- // 루프를 수행하면서 현재 라인에 문자를 출력 //---------------------------------------------------------------------- // 현재 라인에서 남은 문자 수와 한 화면에 출력할 수 있는 문자 수를 비교하여 // 작은 것을 선택 iColumnCountToPrint = MIN( pstInfo->iColumnCount, ( pstInfo->dwFileSize - dwBaseOffset ) ); iColumnIndex = 0; for( i = 0 ; ( i < iColumnCountToPrint ) && ( iColumnIndex < pstInfo->iColumnCount ) ; i++ ) { bTemp = pstInfo->pbFileBuffer[ i + dwBaseOffset ]; // 개행 문자가 보이면 종료 if( bTemp == '\n' ) { break; } // 탭 문자이면 탭 문자의 크기 단위로 출력할 오프셋을 변경 else if( bTemp == '\t') { // 탭 문자가 차지하는 영역 단위로 출력할 오프셋을 정렬 iColumnIndex = iColumnIndex + TABSPACE; iColumnIndex -= iColumnIndex % TABSPACE; } // 라인 피드 문자이면 무시 else if( bTemp == '\r' ) { // Nothing } // 기타 문자는 화면에 출력 else { // 출력할 위치에 문자를 출력하고 다음 위치로 이동 DrawText( qwWindowID, iColumnIndex * FONT_ENGLISHWIDTH + iXOffset, iYOffset + ( j * FONT_ENGLISHHEIGHT ), RGB( 0, 0, 0 ), RGB( 255, 255, 255 ), &bTemp, 1 ); iColumnIndex++; } } } // 윈도우 전체를 갱신하여 변경된 화면을 업데이트 ShowWindow( qwWindowID, TRUE ); return TRUE; }