166 lines
4.2 KiB
C
166 lines
4.2 KiB
C
#include <windows.h>
|
||
#include <commdlg.h>
|
||
|
||
#include <malloc.h>
|
||
#include <math.h>
|
||
#include <memory.h>
|
||
#include <stdio.h>
|
||
#include <stdlib.h>
|
||
#include <string.h>
|
||
|
||
|
||
#include "fonttest.h"
|
||
#include "rings.h"
|
||
|
||
#include "dialogs.h"
|
||
|
||
|
||
//*****************************************************************************
|
||
//************************* D R A W R I N G S ***************************
|
||
//*****************************************************************************
|
||
|
||
#define PI (3.1415926)
|
||
#define TWOPI (2.0*PI)
|
||
#define PI4 (PI/4.0)
|
||
|
||
HDC hdcCachedPrinter = 0;
|
||
|
||
void DrawRings( HWND hwnd, HDC hdc )
|
||
{
|
||
double Angle, dAngle, Radius;
|
||
|
||
int i, x, y;
|
||
HFONT hFont, hFontOld;
|
||
|
||
int myStrlen;
|
||
|
||
if (!isCharCodingUnicode)
|
||
myStrlen = lstrlenA(szStringA);
|
||
else
|
||
myStrlen = lstrlenW(szStringW);
|
||
|
||
if( myStrlen == 0 ) return;
|
||
|
||
Radius = cxDC / 4;
|
||
dAngle = 360.0 / (double)myStrlen;
|
||
|
||
Ellipse( hdc, xDC + cxDC/2-(int)Radius, yDC + cyDC/2-(int)Radius,
|
||
xDC + cxDC/2+(int)Radius, yDC + cyDC/2+(int)Radius );
|
||
|
||
Angle = 0.0;
|
||
|
||
for( i = 0; i < myStrlen; i++, Angle += dAngle )
|
||
{
|
||
if (!isCharCodingUnicode)
|
||
{
|
||
elfdvA.elfEnumLogfontEx.elfLogFont.lfEscapement = elfdvA.elfEnumLogfontEx.elfLogFont.lfOrientation = (int)(10.0*Angle);
|
||
hFont = CreateFontIndirectWrapperA( &elfdvA );
|
||
}
|
||
else
|
||
{
|
||
elfdvW.elfEnumLogfontEx.elfLogFont.lfEscapement = elfdvW.elfEnumLogfontEx.elfLogFont.lfOrientation = (int)(10.0*Angle);
|
||
hFont = CreateFontIndirectWrapperW( &elfdvW );
|
||
}
|
||
|
||
if( !hFont )
|
||
{
|
||
dprintf( "Couldn't create font for Angle = %d", (int)Angle );
|
||
continue;
|
||
}
|
||
|
||
hFontOld = SelectObject( hdc, hFont );
|
||
|
||
SetTextAlign( hdc, wTextAlign );
|
||
SetBkMode( hdc, iBkMode );
|
||
SetBkColor( hdc, dwRGBBackground );
|
||
SetTextColor( hdc, dwRGBText );
|
||
|
||
x = xDC + cxDC/2 + (int)(Radius * sin( TWOPI * Angle / 360.0 ) );
|
||
y = yDC + cyDC/2 + (int)(Radius * cos( TWOPI * Angle / 360.0 ) );
|
||
|
||
// dprintf( " x, y = %d, %d", x, y );
|
||
|
||
if (!isCharCodingUnicode)
|
||
TextOutA( hdc, x, y, &szStringA[i], 1 );
|
||
else
|
||
TextOutW( hdc, x, y, &szStringW[i], 1 );
|
||
|
||
MoveToEx( hdc, x-cxDC/150, y ,0);
|
||
LineTo( hdc, x+cxDC/150, y );
|
||
MoveToEx( hdc, x, y-cxDC/150 ,0);
|
||
LineTo( hdc, x, y+cxDC/150 );
|
||
|
||
SelectObject( hdc, hFontOld );
|
||
DeleteObject( hFont );
|
||
}
|
||
|
||
if (!isCharCodingUnicode)
|
||
elfdvA.elfEnumLogfontEx.elfLogFont.lfEscapement =
|
||
elfdvA.elfEnumLogfontEx.elfLogFont.lfOrientation = 0;
|
||
else
|
||
elfdvW.elfEnumLogfontEx.elfLogFont.lfEscapement =
|
||
elfdvW.elfEnumLogfontEx.elfLogFont.lfOrientation = 0;
|
||
}
|
||
|
||
|
||
//*****************************************************************************
|
||
//********************* R I N G S W N D P R O C ***********************
|
||
//*****************************************************************************
|
||
|
||
LRESULT CALLBACK RingsWndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
|
||
{
|
||
HDC hdc;
|
||
PAINTSTRUCT ps;
|
||
HCURSOR hCursor;
|
||
|
||
|
||
switch( msg )
|
||
{
|
||
// case WM_CREATE:
|
||
// return NULL;
|
||
|
||
|
||
case WM_CHAR:
|
||
HandleChar( hwnd, wParam );
|
||
return 0;
|
||
|
||
|
||
case WM_PAINT:
|
||
hCursor = SetCursor( LoadCursor( NULL, MAKEINTRESOURCE(IDC_WAIT) ) );
|
||
ShowCursor( TRUE );
|
||
|
||
//ClearDebug();
|
||
//dprintf( "Drawing rings" );
|
||
|
||
hdc = BeginPaint( hwnd, &ps );
|
||
SetDCMapMode( hdc, wMappingMode );
|
||
|
||
SetTextCharacterExtra( hdc, nCharExtra );
|
||
|
||
SetTextJustification( hdc, nBreakExtra, nBreakCount );
|
||
|
||
DrawDCAxis( hwnd, hdc , TRUE);
|
||
|
||
DrawRings( hwnd, hdc );
|
||
|
||
CleanUpDC( hdc );
|
||
|
||
SelectObject( hdc, GetStockObject( BLACK_PEN ) );
|
||
EndPaint( hwnd, &ps );
|
||
|
||
//dprintf( " Finished drawing rings" );
|
||
|
||
ShowCursor( FALSE );
|
||
SetCursor( hCursor );
|
||
|
||
return 0;
|
||
|
||
case WM_DESTROY:
|
||
return 0;
|
||
}
|
||
|
||
|
||
return DefWindowProc( hwnd, msg, wParam, lParam );
|
||
}
|
||
|