Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #if defined(UNICODE) && !defined(_UNICODE)
- #define _UNICODE
- #elif defined(_UNICODE) && !defined(UNICODE)
- #define UNICODE
- #endif
- #include <tchar.h>
- #include <windows.h>
- #include <cmath>
- int Round ( double x )
- {
- return (int) ( x + 0.5 );
- }
- void swappoints ( int &x1 , int &y1 , int &x2 , int &y2)
- {
- int temp = x1 ;
- x1 = x2 ;
- x2 = temp ;
- temp = y1 ;
- y1 = y2 ;
- y2 = temp;
- }
- void DrawLine ( HDC hdc , int xs , int ys , int xe , int ye , COLORREF c )
- {
- int dx = xe - xs , dy = ye - ys ;
- if ( abs(dx) > abs(dy) )
- {
- double m = (double) dy / dx ;
- if ( xs > xe)
- swappoints ( xs , ys , xe , ye);
- int x = xs ;
- double y = ys;
- SetPixel(hdc , xs , ys , c);
- while ( x < xe )
- {
- x++;
- y+=m;
- SetPixel(hdc , x , Round(y),c);
- }
- }
- else
- {
- double m = (double) dx / dy ;
- if ( ys > ye)
- swappoints ( xs , ys , xe , ye);
- int x = xs ;
- double y = ys;
- SetPixel(hdc , xs , ys , c);
- while ( y < ye )
- {
- y++;
- x+=m;
- SetPixel(hdc , Round(x) , y ,c);
- }
- }
- }
- void Draw8points ( HDC hdc , int x , int y , int xc , int yc , COLORREF c)
- {
- SetPixel(hdc , xc + x , yc + y , c);
- DrawLine(hdc , xc , yc , xc + x , yc + y , RGB(255,0,0));
- SetPixel(hdc , xc - x , yc + y , c);
- DrawLine(hdc , xc , yc , xc - x , yc + y , RGB(0,255,0));
- SetPixel(hdc , xc - x , yc - y , c);
- DrawLine(hdc , xc , yc , xc - x , yc - y , RGB(255,250,0));
- SetPixel(hdc , xc + x , yc - y , c );
- DrawLine(hdc , xc , yc , xc + x , yc - y , RGB(255,0,255));
- SetPixel(hdc , xc + y , yc + x , c);
- DrawLine(hdc , xc , yc , xc + y , yc + x , RGB(0,255,255));
- SetPixel(hdc , xc - y , yc + x , c);
- DrawLine(hdc , xc , yc , xc - y , yc + x , RGB(255,255,255));
- SetPixel(hdc , xc - y , yc - x , c);
- DrawLine(hdc , xc , yc , xc - y , yc - x , RGB(255,169,175));
- SetPixel(hdc , xc + y , yc - x , c);
- DrawLine(hdc , xc , yc , xc + y , yc - x , RGB(123,123,123));
- }
- void DrawCircle ( HDC hdc , int xc , int yc , int R , COLORREF c )
- {
- double x = 0 , y = R ;
- Draw8points( hdc , x , y , xc , yc , c );
- double d = 1 - R ;
- while ( x < y )
- {
- if ( d < 0 )
- {
- d += 2 * x + 3 ;
- x++ ;
- }
- else
- {
- d += 2 * ( x - y ) + 5 ;
- x++ ;
- y-- ;
- }
- Draw8points(hdc , Round (x) , Round (y) , xc , yc , c);
- }
- }
- /* Declare Windows procedure */
- LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
- /* Make the class name into a global variable */
- TCHAR szClassName[ ] = _T("CodeBlocksWindowsApp");
- int WINAPI WinMain (HINSTANCE hThisInstance,
- HINSTANCE hPrevInstance,
- LPSTR lpszArgument,
- int nCmdShow)
- {
- HWND hwnd; /* This is the handle for our window */
- MSG messages; /* Here messages to the application are saved */
- WNDCLASSEX wincl; /* Data structure for the windowclass */
- /* The Window structure */
- wincl.hInstance = hThisInstance;
- wincl.lpszClassName = szClassName;
- wincl.lpfnWndProc = WindowProcedure; /* This function is called by windows */
- wincl.style = CS_DBLCLKS; /* Catch double-clicks */
- wincl.cbSize = sizeof (WNDCLASSEX);
- /* Use default icon and mouse-pointer */
- wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
- wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
- wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
- wincl.lpszMenuName = NULL; /* No menu */
- wincl.cbClsExtra = 0; /* No extra bytes after the window class */
- wincl.cbWndExtra = 0; /* structure or the window instance */
- /* Use Windows's default colour as the background of the window */
- wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
- /* Register the window class, and if it fails quit the program */
- if (!RegisterClassEx (&wincl))
- return 0;
- /* The class is registered, let's create the program*/
- hwnd = CreateWindowEx (
- 0, /* Extended possibilites for variation */
- szClassName, /* Classname */
- _T("Code::Blocks Template Windows App"), /* Title Text */
- WS_OVERLAPPEDWINDOW, /* default window */
- CW_USEDEFAULT, /* Windows decides the position */
- CW_USEDEFAULT, /* where the window ends up on the screen */
- 544, /* The programs width */
- 375, /* and height in pixels */
- HWND_DESKTOP, /* The window is a child-window to desktop */
- NULL, /* No menu */
- hThisInstance, /* Program Instance handler */
- NULL /* No Window Creation data */
- );
- /* Make the window visible on the screen */
- ShowWindow (hwnd, nCmdShow);
- /* Run the message loop. It will run until GetMessage() returns 0 */
- while (GetMessage (&messages, NULL, 0, 0))
- {
- /* Translate virtual-key messages into character messages */
- TranslateMessage(&messages);
- /* Send message to WindowProcedure */
- DispatchMessage(&messages);
- }
- /* The program return-value is 0 - The value that PostQuitMessage() gave */
- return messages.wParam;
- }
- /* This function is called by the Windows function DispatchMessage() */
- int xc , yc , x , y ;
- int counter = 0 ;
- bool startpaint = false ;
- PAINTSTRUCT ps ;
- LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
- {
- switch (message) /* handle the messages */
- {
- case WM_DESTROY:
- PostQuitMessage (0); /* send a WM_QUIT to the message queue */
- break;
- case WM_LBUTTONDOWN:
- if ( counter == 0)
- {
- xc = LOWORD(lParam);
- yc = HIWORD(lParam);
- counter++ ;
- }
- else
- {
- x = LOWORD(lParam);
- y = HIWORD(lParam);
- counter-- ;
- startpaint = true ;
- }
- break;
- case WM_PAINT:
- if ( startpaint == true )
- {
- BeginPaint( hwnd , &ps );
- double R = sqrt( pow( x - xc , 2.0 ) + pow( y - yc , 2.0) ) ;
- DrawCircle ( ps.hdc , xc , yc , R , RGB(0,0,255));
- EndPaint( hwnd , &ps );
- }
- break;
- default: /* for messages that we don't deal with */
- return DefWindowProc (hwnd, message, wParam, lParam);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement