Cześć,
Jestem nowym członkiem forum, proszę o wyrozumiałość. Pracuję jako programista embedded w "czystym C" programując STM32.
W firmie zaszła potrzeba napisania aplikacji okienkowej na Windowsa. Zdecydowano się na C++/CLI .net framework w Visual Studio. Nie pytajcie dlaczego C++/CLI. Szukając rozwiązań wcześniejszych problemów na każdym forum czytałem, żeby przesiąść się na C# i zostawić C++/CLI w spokoju, niemniej duża część aplikacji jest już napisana i tak musi zostać.
Z racji, że nie mam dużego doświadczenia w programowaniu obiektowym - (cały czas się go uczę, pisząc tą aplikację również), a posiadam jakieś doświadczenie w C zacząłem tworzyć mam wrażenie różne dziwne tworki i pojawia mi się garść pytań, na które mam nadzieję znajdę odpowiedź na tym forum ;-) Do rzeczy:
-
Dlaczego w przeróżnych poradnikach, tutorialach itp. definicje funkcji pisane są w plikach z rozszerzeniem
.h
?
Jestem przyzwyczajony do rozdzielania deklaracji od definicji funkcji do oddzielnych plików (.h
,.c
) i trochę mnie to zastanawia skąd taki zwyczaj w wszystkich tutorialach C++/CLI. -
Chcę mieć zestaw funkcji dostępnych w kilku okienkach np. dodanie serii na wykresie. Stworzyłem więc pliki
MyChart.cpp
orazMyChart.h
. Wykres wstawiłem z przybornika w Visual Studio więc instancja klasy tworzy się w konstruktorze tej formy. Chcąc zmienić jakieś parametry muszę mieć wskaźnik na ten obiekt. Czy moje rozwiązanie jest poprawne w podejściu obiektowym? Przekazuję wskaźnik na obiekt w parametrze funkcji. Jak się to robi zgodnie ze sztuką?
Stworzyłem nowy plik .c
.h
z funkcjami np: AddHorizontalBorderLine2Chart która dodaje serię do wykresu (pozioma linię) i przyjmuje w argumencie wskaźnik na wykres oraz "value" na jakim poziomie tą linię namalować.
void AddHorizontalBorderLine2Chart(DataVisualization::Charting::Chart^ chart, String^ bordername, int y_value){
System::Windows::Forms::DataVisualization::Charting::Series^ series = (gcnew System::Windows::Forms::DataVisualization::Charting::Series());
series->Name = bordername;
series->Points->AddXY(chart->ChartAreas[0]->AxisX->Minimum, y_value);
series->Points->AddXY(chart->ChartAreas[0]->AxisX->Maximum, y_value);
series->ChartArea = L"ChartArea1";
series->ChartType = System::Windows::Forms::DataVisualization::Charting::SeriesChartType::Line;
series->Color = System::Drawing::Color::Red;
series->BorderWidth = 3;
chart->Series->Add(series);
}
Funkcję wywołuję w okienku, na zdarzenie wciśnięcia przycisku.
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
AddHorizontalBorderLine2Chart(chartFotoSensors, "granica2", 70);
}
Generalnie to działa i rozwiązało mój problem natomiast mam dziwne przeświadczenie że robię to bardzo na około.
Podpowiecie jak to powinno wyglądać w podejściu obiektowym?
Dzięki z pomoc i pozdrawiam :D