Exemple #1
0
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);
}
Exemple #4
0
/**
 *  윈도우 화면 버퍼에 현재 라인부터 화면에 출력
 */
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;
}