To mój kod:
#include<iostream>
#include<cmath>
#include<windows.h>
/*const float x0=M_PI+M_PI/5;
const float x1=1.2*M_PI;
const float x2=1.7*M_PI;*/
const float x0=1.2*M_PI;
const float x1=1.5*M_PI;
const float x2=1.8*M_PI;
float y_0=sin(x0);
float y_1=sin(x1);
float y_2=sin(x2);
LPSTR nazwaklasy="klasa_okna";
MSG komunikat;
HINSTANCE g_hInstance;
HWND okno1, button1, button2, okno_lagrange, button_lagrange;
int g_nCmdShow;
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
void ilagrange();
void rysuj_sinus(HWND okno);
double lagrange(float x);
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
WNDCLASSEX wc;
wc.cbSize = sizeof( WNDCLASSEX );
wc.style = 0;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon( NULL, IDI_APPLICATION );
wc.hCursor = LoadCursor( NULL, IDC_ARROW );
wc.hbrBackground =( HBRUSH )( COLOR_WINDOW + 1 );
wc.lpszMenuName = NULL;
wc.lpszClassName = nazwaklasy;
wc.hIconSm = LoadIcon( NULL, IDI_APPLICATION );
RegisterClassEx(&wc);
g_hInstance=hInstance;
g_nCmdShow=nCmdShow;
// okno glowne
okno1=CreateWindowEx(WS_EX_CLIENTEDGE, nazwaklasy, "Interpolacja", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 240, 200, NULL, NULL, hInstance, NULL);
ShowWindow(okno1, nCmdShow);
UpdateWindow(okno1);
button1=CreateWindowEx(0, "BUTTON", "Metoda Lagrange'a", WS_CHILD | WS_VISIBLE, 45, 30, 150, 30, okno1, NULL, hInstance, NULL);
button2=CreateWindowEx(0, "BUTTON", "Metoda Newtona", WS_CHILD | WS_VISIBLE, 45, 90, 150, 30, okno1, NULL, hInstance, NULL);
//
while(GetMessage(&komunikat, NULL, 0, 0))
{
TranslateMessage(&komunikat);
DispatchMessage(&komunikat);
}
return komunikat.wParam;
return 0;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_CLOSE: DestroyWindow(hwnd); break;
case WM_DESTROY: PostQuitMessage(0); break;
case WM_COMMAND:
if((HWND)lParam==button1) ilagrange();
if((HWND)lParam==button_lagrange) rysuj_sinus(okno_lagrange);
break;
default: return DefWindowProc(hwnd, msg, wParam, lParam);
}
return 0;
}
void ilagrange()
{
HDC hdcOkno;
okno_lagrange=CreateWindowEx(WS_EX_CLIENTEDGE, nazwaklasy, "Interpolacja Lagrange'a", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, NULL, NULL, g_hInstance, NULL);
hdcOkno=GetDC(okno_lagrange);
ShowWindow(okno_lagrange, g_nCmdShow);
TextOut(hdcOkno, 100, 30, "Interpolacja metod¹ Lagrange'a", 30);
float i=M_PI;
while(i<2*M_PI)
{
//SetPixel(hdcOkno, int(100*i)+10, int(100*(sin(i)))+200, RGB(12,34,56));
SetPixel(hdcOkno, int(100*i)+10, int(100*(lagrange(i)))+200, 0x000000FF);
//SetPixel(hdcOkno, int(100*i)+10, int(100*(sin(i)-lagrange(i)))+200, RGB(12,34,56));
i=i+0.0001;
}
UpdateWindow(okno_lagrange);
button_lagrange=CreateWindowEx(0, "BUTTON", "Pokaz sinus(x)", WS_CHILD | WS_VISIBLE, 300, 300, 150, 30, okno_lagrange, NULL, g_hInstance, NULL);
ReleaseDC(okno_lagrange, hdcOkno);
}
double lagrange(float x)
{
return (y_0*(((x-x1)*(x-x2))/((x0-x1)*(x0-x2)))+y_1*(((x-x0)*(x-x2))/((x1-x0)*(x1-x2)))+y_2*(((x-x0)*(x-x1))/((x2-x0)*(x2-x1))));
}
void rysuj_sinus(HWND okno)
{
HDC hdcOkno;
GetDC(okno_lagrange);
float i=M_PI;
while(i<2*M_PI)
{
SetPixel(hdcOkno, int(100*i)+100, int(100*(sin(i)))+200, 0x000000FF);
i=i+0.0001;
}
UpdateWindow(okno_lagrange);
}
Gdy w głównym oknie programu wcisnę przycisk "Interpolacja Lagrange'a" to otwiera się okno. Na tym oknie jest przycisk "Pokaz sinus(x)". Chciałbym, aby po jego naciśnięciu "rysował" się wykres funkcji sinus (wywołanie funkcji
void rysuj_sinus(HWND okno)
)