Skip to content

Instantly share code, notes, and snippets.

@daramkun
Created October 19, 2018 06:14
Show Gist options
  • Save daramkun/634986f37c45e6620abb896aa033307d to your computer and use it in GitHub Desktop.
Save daramkun/634986f37c45e6620abb896aa033307d to your computer and use it in GitHub Desktop.
#include <Windows.h>
#include <string>
#include <sstream>
float g_angle = 0;
LRESULT CALLBACK WndProc ( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
switch ( uMsg )
{
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hDC = BeginPaint ( hWnd, &ps );
RECT rect;
GetClientRect ( hWnd, &rect );
HBITMAP compBitmap = CreateCompatibleBitmap ( hDC, rect.right - rect.left, rect.bottom - rect.top );
HDC compDC = CreateCompatibleDC ( hDC );
HBITMAP oldBitmap = ( HBITMAP ) SelectObject ( compDC, compBitmap );
FillRect ( compDC, &rect, ( HBRUSH ) GetStockObject ( WHITE_BRUSH ) );
const int XOffset = 50, YOffset = 50;
Ellipse ( compDC, XOffset, YOffset, 100 + XOffset, 100 + YOffset );
float rad = g_angle / 180 * 3.141592f;
float xr = cos ( rad ), yr = sin ( rad );
MoveToEx ( compDC, 50 + XOffset, 50 + YOffset, nullptr );
LineTo ( compDC, XOffset + ( 1 + xr ) * 50, YOffset + ( 1 + yr ) * 50 );
std::wstringstream wss;
wss << g_angle << L"˚(" << rad << "RAD), xr: " << xr << ", yr: " << yr;
std::wstring wsss = wss.str ();
TextOut ( compDC, 0, 0, wsss.c_str (), wsss.size () );
BitBlt ( hDC, 0, 0, rect.right - rect.left, rect.bottom - rect.top, compDC, 0, 0, SRCCOPY );
SelectObject ( compDC, oldBitmap );
DeleteObject ( compDC );
DeleteObject ( compBitmap );
EndPaint ( hWnd, &ps );
}
break;
case WM_CLOSE:
PostQuitMessage ( 0 );
break;
default: return DefWindowProc ( hWnd, uMsg, wParam, lParam );
}
return 0;
}
int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE, LPSTR, int )
{
WNDCLASS wndClass = {
CS_VREDRAW | CS_HREDRAW, WndProc,
0, 0,
hInstance,
0, 0,
( HBRUSH ) GetStockObject ( WHITE_BRUSH ),
NULL,
L"AngleTest"
};
if ( INVALID_ATOM == RegisterClass ( &wndClass ) )
return -1;
HWND hWnd = CreateWindow ( L"AngleTest", L"Angle Test", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, nullptr );
if ( 0 == hWnd )
return -2;
ShowWindow ( hWnd, SW_SHOW );
UpdateWindow ( hWnd );
DWORD lastTickCount = GetTickCount (), currentTickCount;
MSG msg;
while ( true )
{
if ( PeekMessage ( &msg, 0, 0, 0, PM_NOREMOVE ) )
{
if ( !GetMessage ( &msg, 0, 0, 0 ) )
break;
TranslateMessage ( &msg );
DispatchMessage ( &msg );
}
else
{
currentTickCount = GetTickCount ();
if ( currentTickCount - lastTickCount > 1 / 60.0f * 1000 )
{
g_angle += 5.f * ( ( currentTickCount - lastTickCount ) / 1000.0f );
InvalidateRect ( hWnd, nullptr, false );
lastTickCount = currentTickCount;
}
Sleep ( 1 );
}
}
return msg.wParam;
}
@daramkun
Copy link
Author

image
image
image
image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment