C/C++ WinAPI ошибки LNK2019, LNK2028, LNK1120
сегодня я впервые попытался создать оконное приложение. У меня уже был готовый код, и он довольно хорошо работал в консоли (по крайней мере, с математической стороны)
/Заранее извиняюсь за то, что скинул все в один файл, думаю, это не очень хорошо, но для меня главным было проверить, как будет работать взаимодействие с кнопками и другими штуками. Я перепишу код более красиво позже./ Так вот сам вопрос. Я переместил функцию рисования графика (если закомментировать эту функцию, то все скомпилируется и вычисления выполнятся правильно) и получил следующие ошибки:
в то же время в консоли все работало нормально. При этом я удивлен, что подобные ошибки не возникли при переносе других функций. Поэтому я хотел бы знать, как это исправить.
И еще кое-что. Не могли бы вы рассказать мне, как отобразить график в PictureBox?Я был бы очень благодарен тем, кто поможет. Так как я не понял, что к чему отнести. есть функция, но как её применить не в консоли пока плохо представляю.
#include "MyForm.h"
#include<math.h>
#include <conio.h>
#include <iostream>
#include <windows.h>
using namespace System;
using namespace System::Windows::Forms;
[STAThreadAttribute]
void main(array<String^>^ args)
{
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
Practform::MyForm form;
Application::Run(% form);
}
float MaxABSValue(float arr[], int size) {
float max = abs(arr[0]);
for (int i = 1; i < size; i++) {
if (abs(arr[0]) > max)
max = abs(arr[0]);
}
return max;
}
void DrawGraph(int steps, float* graphY, int zeroX, LPCWSTR minX, LPCWSTR maxX, int segStart, LPCWSTR segStartVal, int segEnd, LPCWSTR segEndVal) {
system("cls");
POINT op;
HWND hWnd = GetConsoleWindow();
HDC hDC = GetDC(hWnd);
HPEN graphPen = CreatePen(PS_SOLID, 2, RGB(0, 162, 232));
HPEN segmentPen = CreatePen(PS_SOLID, 2, RGB(237, 28, 36));
HPEN axisPen = CreatePen(PS_SOLID, 1, RGB(195, 195, 195));
HPEN projectionPen = CreatePen(PS_SOLID, 1, RGB(136, 0, 21));
SelectObject(hDC, axisPen);
float substepX = (640 / steps);
float maxY = MaxABSValue(graphY, steps);
MoveToEx(hDC, 0, 150, &op);
LineTo(hDC, 640, 150);
MoveToEx(hDC, zeroX * substepX, 0, &op);
LineTo(hDC, zeroX * substepX, 480);
TextOut(hDC, 632, 151, TEXT("X"), 1);
TextOut(hDC, 0, 151, minX, lstrlen(minX));
for (int i = 0; i < steps - 1; i++) {
int x1 = (i * substepX);
int y1 = -(graphY[i] / maxY) * (150);
int x2 = ((i + 1) * substepX);
int y2 = -(graphY[i + 1] / maxY) * (150);
if (i >= segStart && i <= segEnd)
SelectObject(hDC, segmentPen);
else
SelectObject(hDC, graphPen);
MoveToEx(hDC, x1, 150 + y1, &op);
LineTo(hDC, x2, 150 + y2);
if (i == zeroX) {
TextOut(hDC, (i * substepX) - 8, 151, TEXT("0"), 1);
TextOut(hDC, (i * substepX), 0, TEXT("Y"), 1);
}
if (i == steps - 2)
TextOut(hDC, ((i + 1) * substepX), 151, maxX, lstrlen(maxX));
if (i == segStart) {
if (y1 >= 0)
TextOut(hDC, ((i)*substepX), 134, segStartVal, lstrlen(segStartVal));
else TextOut(hDC, ((i)*substepX), 150, segStartVal, lstrlen(segStartVal));
SelectObject(hDC, projectionPen);
MoveToEx(hDC, x1, 150, &op);
LineTo(hDC, x1, 150 + y1);
}
if (i == segEnd) {
if (y2 >= 0)
TextOut(hDC, ((i + 1) * substepX), 134, segEndVal, lstrlen(segEndVal));
else TextOut(hDC, ((i + 1) * substepX), 150, segEndVal, lstrlen(segEndVal));
SelectObject(hDC, projectionPen);
MoveToEx(hDC, x2, 150, &op);
LineTo(hDC, x2, 150 + y2);
}
}
ReleaseDC(hWnd, hDC);
std::cin.get();
}
double _a, _b,_e;
double dihotom(double a, double b, double e, double(*fp)(double)) {
double c = 0;
double fc, fa = fp(a);
while (fabs(a - b) >= e) {
c = (a + b) / 2;
fc = fp(c);
if (fc == 0) {
break;
}
if (fa * fc <= 0) b = c; else a = c;
fa = fp(a);
}
return c;
}
double f(double x) {
//2x^3-11x^2-17x+115
return sin(x) - x + 0.15 - 4;
}
double f1(double x) {
return x * x - 5 * sin(x);
}
double f2(double x) {
return exp(x) - 2;
}
double f3(double x) {
return cos(1/100*x+exp(x));
}
double f4(double x) {
return x - pow(9 + x, 0.5) + x * x - 4;
}
double (*fcnPtr)(double x) = f1;
System::Void Practform::MyForm::обПрограммеToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
MessageBox::Show("","");
return System::Void();
}
System::Void Practform::MyForm::выходToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
Application::Exit();
return System::Void();
}
System::Void Practform::MyForm::func1_Click(System::Object^ sender, System::EventArgs^ e) {
cur_func->Text = "sin(x) - x + 0.15 - 4";
fcnPtr = f;
numericUpDown_a->Text="-4";
numericUpDown_b->Text = "-2";
}
System::Void Practform::MyForm::func2_Click(System::Object^ sender, System::EventArgs^ e) {
cur_func->Text = "exp^x -2";
fcnPtr = f2;
numericUpDown_a->Text = "0";
numericUpDown_b->Text = "1";
}
System::Void Practform::MyForm::func3_Click(System::Object^ sender, System::EventArgs^ e) {
cur_func->Text = "cos(1/100*x+exp(x))";
fcnPtr = f3;
numericUpDown_a->Text = "1";
numericUpDown_b->Text = "2";
}
System::Void Practform::MyForm::func4_Click(System::Object^ sender, System::EventArgs^ e) {
cur_func->Text = "x - (9+x)^(1/2)+ x * x - 4";
fcnPtr = f4;
numericUpDown_a->Text = "2";
numericUpDown_b->Text = "3";
}
System::Void Practform::MyForm:: button5_Click(System::Object^ sender, System::EventArgs^ e) {
_a = Convert::ToDouble(numericUpDown_a->Value);
_b = Convert::ToDouble(numericUpDown_b->Value);
_e = Convert::ToDouble(numericUpDown_e->Value);
double k1 = dihotom(_a, _b, _e, fcnPtr);
textBox1->Text = System::Convert::ToString(k1);
//textBox1->Text = System::Convert::ToString(sum);
}
System::Void Practform::MyForm::pictureBox1_Click(System::Object^ sender, System::EventArgs^ e) {
}
System::Void Practform::MyForm::draw_Click(System::Object^ sender, System::EventArgs^ e) {
float graphY[60];
float substep = 0.25f;
float x = -7.5f;
int zeroX = 0;
int start, end;
for (int i = 0; i < 60; i++) {
double value = x + substep * i;
if (value == _a)
start = i;
if (value == _b)
end = i;
graphY[i] = (float)fcnPtr(value);
if (value == 0)
zeroX = i;
}
//DrawGraph(60, graphY, zeroX, L"-7.5", L"7.5", start, L"a", end, L"b");
pictureBox1->CreateGraphics();
}
