Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <windows.h>
- #include "resource.h"
- // your path for this include may vary
- #include "GraphicsFramework.h"
- // Global variable to store the graphics framwork object
- GraphicsFramework* PGraphics;
- HWND HOutput = 0; // handle to the output control
- HWND HDialog = 0;
- //Function prototype
- void DrawLine(int x1, int x2, int y1, int y2, unsigned int color)
- // function to get the absolute value of an integer
- int Abs(int x) {
- if (x < 0) return -x;
- else return x;
- }
- // function to get the sign (+1 or -1) of an integer
- int Sign(int x) {
- if (x < 0) return -1;
- else return 1;
- }
- // function to draw a line between the two points (x, y1) and (x2, y2)
- void DrawLine(int x1, int y1, int x2, int y2, unsigned int color);
- {
- PGraphics->AddPoint(x1+1, y1, color);
- PGraphics->AddPoint(x1, y1+1, color);
- PGraphics->AddPoint(x1+1, y1+1, color);
- PGraphics->AddPoint(x2+1, y2, color);
- PGraphics->AddPoint(x2, y2+1, color);
- PGraphics->AddPoint(x2+1, y2+1, color);
- }
- void DrawStuff() {
- COLORREF green = RGB(0, 255, 0); // green color to draw with
- COLORREF purple = RGB(255, 0, 255); // purple color to draw with
- char str[32]; // string to store user input
- int h, k; // parabola vertex
- double a; // parabola constant - might be a decimal
- int x, y; // loop and point variables
- int xPrev, yPrev; // previous point for drawng line segments
- int ymin, ymax; // limits for y loop
- RECT rect; // rectangle for the output window
- // get the user input from the edit boxes and
- // convert string input to integer
- GetDlgItemText(HDialog, IDC_EDIT_VERTEXX, str, 32);
- h = atoi(str);
- GetDlgItemText(HDialog, IDC_EDIT_VERTEXY, str, 32);
- k = atoi(str);
- GetDlgItemText(HDialog, IDC_EDIT_CONSTA, str, 32);
- a = atof(str); // use atof to allow user to enter a decimal
- // get the rect for this window
- GetClientRect(HOutput, &rect);
- // use the rectangle info to set up y loop limits
- ymin = -(rect.bottom - rect.top) / 2;
- ymax = (rect.bottom - rect.top) / 2;
- // clear the scene and add an axis
- PGraphics->ClearScene(RGB(0, 0, 0));
- PGraphics->AddAxis(RGB(150, 150, 150), 10);
- // loop in y, calculate x and draw
- for (y = ymin; y <= ymax; y++) {
- x = (int)( a * (y-k) * (y-k) ) + h;
- PGraphics->AddPoint(x, y, green);
- }
- // draw the points
- PGraphics->Draw();
- DrawLines(
- }
- /*
- DialogProc
- this is the window event handler for the main dialog
- */
- BOOL CALLBACK DialogProc (HWND hwnd,
- UINT message,
- WPARAM wParam,
- LPARAM lParam)
- {
- switch(message)
- {
- case WM_INITDIALOG:
- // dialog is initializing - store the picture box handle in a global variable for later
- HOutput = GetDlgItem(hwnd, IDC_PICTURE_OUTPUT);
- // instantiate and initialize our graphics framework object
- PGraphics = new GraphicsFramework(HOutput);
- break;
- case WM_COMMAND:
- switch(LOWORD(wParam))
- {
- case IDC_BTN_DRAW:
- // draw button was pressed
- DrawStuff();
- break;
- case IDC_BTN_CLEAR:
- // clear button was pressed so clear the scene and draw the empty scene
- PGraphics->ClearScene(RGB(0, 0, 0));
- PGraphics->Draw();
- break;
- case IDCANCEL:
- // user is quitting so release the GraphicsFramework object and quit
- delete PGraphics;
- PostQuitMessage(0);
- break;
- }
- }
- return FALSE;
- }
- // this is the main function that starts the application
- int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, char * cmdParam, int cmdShow)
- {
- // create the main window
- // store its handle in a global if needed
- HDialog = CreateDialog (GetModuleHandle(NULL),
- MAKEINTRESOURCE(IDD_DIALOG1),
- 0,
- DialogProc);
- // make the dialog visible
- ShowWindow(HDialog, SW_SHOW);
- // standard windows message loop
- MSG msg;
- int status;
- while ((status = GetMessage (&msg, 0, 0, 0)) != 0)
- {
- if (status == -1)
- return -1;
- // avoid processing messages for the dialog
- if (!IsDialogMessage (HDialog, & msg))
- {
- TranslateMessage ( & msg );
- DispatchMessage ( & msg );
- }
- }
- return (int)(msg.wParam);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement