2025-04-27 07:49:33 -04:00

166 lines
4.2 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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 );
}