처음부터 그래픽 라이브러리 만들기

 
주제
 

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

크라우드소싱 GUI. 오픈 베타 테스트.

알렉세이 바바신 , 2020.03.07 21:25

"하지만 객체에서 모든 것을 하는 것이 더 쉬울 수 있습니다" - 이것은 논리적 이상입니다.

"네, 물론, 우리는 부분적으로 그것에 의존할 것입니다." - 그런 다음 즉시 수정합니다.

 class CCoordPBase

Наследуемся от CObject, то есть:

class CCoordPBase : public CObject

Хотя наверное можно и по другому:

class Control : public CObject

CObject는 개발자 라이브러리에 있는 모든 개체의 기본 클래스입니다. C++ 및 C#과 유추하여 만들었습니다. Sharpe에서 기본 개체(유형)는 개체입니다.

좌표와 치수는 이미 요소(컨트롤)의 속성이며 기본 색상, 프레임 색상 및 두께, 반올림 반경, 아이콘 및 텍스트입니다.

먼저 구성 측면에서 기본으로 간주 할 제어 유형을 결정하고 이것에서 춤을 추십시오. 즉, 기본 속성을 설명하십시오.

물론 이전에 정의된 속성 중 일부는 자손에서 더 이상 사용되지 않을 수 있습니다. 이것은 더 이상 문제가 되지 않지만 기본 속성을 가장 보편적으로 만드는 것이 좋습니다.

멀리 보지 않기 위해 다음은 가장 간단한 범용 컨트롤의 샘플 예입니다.

배경, 테두리, 반경, 아이콘, 텍스트 포함

레이블을 가져와야 하는 경우 배경, 테두리 및 아이콘이 지정되지 않고 패널이 필요한 경우 내용이 지정되지 않고 그림 버튼이 필요한 경우 아이콘만 지정됩니다. 그림이 필요한 다음 배경, 프레임 및 그림이 지정됩니다..

즉, 이러한 구성은 대부분의 컨트롤에 매우 보편적입니다.


이것으로 좌표를 유지하면서 호버에서 스타일을 변경하는 문제는 명확합니다 ... 이미 명확한 것처럼 보이지만

표준 제어 라이브러리가 있습니까?

 

CObject의 본질은 모든 개체를 입력하는 것입니다.

예를 들어 목록 라이브러리(요소 목록, 콤보 상자, 체크리스트 등)가 필요합니다. 각 유형의 요소에 대해 Anatoly와 같이 고유한 유형의 배열을 만들거나 기성 도구인 CArrayObj 를 사용할 수 있습니다.

즉, 많은 코드 조각이 발명될 필요가 없으며 이미 존재하고 가져 와서 사용합니다.

 
Alexandr Andreev :

이것으로 좌표를 유지하면서 호버에서 스타일을 변경하는 문제는 명확합니다 ... 이미 명확한 것처럼 보이지만

표준 제어 라이브러리가 있습니까?

기본적으로 개발자로부터 표준 라이브러리 를 가져올 수 있습니다. 이 계층 구조에서 부끄러운 것은 없습니다.

물론 직접 구축과 관련된 건 다 버려야 하지만, 이벤트 전달 시스템은 남겨둬야지 - 정말 만능!

이 기술에 따르면 가장 복잡한 제어 요소라도 어떤 클래스에 속하든 이벤트는 유형화된 기본 개체 시스템을 통해 전송됩니다.

기본 컨트롤의 그리기는 기본 CControls에서 수행되고 그 후에 OnPaint() 이벤트가 생성됩니다. 이렇게 하면 하위 항목을 완료/다시 그릴 수 있으며 일반적으로 사용자가 원하는 대로 컨트롤을 다시 그릴 수 있습니다.

 
Alexandr Andreev :

하자!!!!!

그리고 바로 기초적인 상호작용을 하려고 생각했습니다.

여기서 우리는 행이나 열에 정렬하는 경우 이전 개체의 왼쪽에 위치를 지정합니다.

일반적으로 범용 컨트롤을 작성합니다.

이것이 바로 당신이 그것을 구축하는 데 필요한 방법입니다. 기본 상호 작용을 기록하십시오.

초기 수준의 기본 컨트롤에는 필요한 모든 속성이 필요하지 않으며 하나의 배경이면 충분합니다.

결국 컨트롤 자체를 그리려면 해당 기능이 포함됩니다. 따라서 속성을 추가할 때 하나의 단일 기능만 마무리하면 됩니다.

요소 계층으로?

CObject - 기본 유형

class CControl : public CObject - 라이브러리 자체의 기본 제어

클래스 CContainerControl : 공개 CControl - 그룹 제어. 필드 중 하나는 중첩된 컨트롤의 배열입니다. CWndContainer 표준 라이브러리 에서 예제를 볼 수 있습니다.

 
Sasha 님은 이미 코딩을 시작하셨으니 MQL에서 오픈 프로젝트 를 만들어 공동 개발을 하시면 될 것 같습니다. 누가 알겠습니까?
 
Алексей Барбашин :
Sasha 님은 이미 코딩을 시작하셨으니 MQL에서 오픈 프로젝트를 만들어 공동 개발을 하시면 될 것 같습니다. 누가 알겠습니까?

잠시 멈춘 동안 ... 표준 라이브러리 를 보니 .... 추가 항목이 많이 있습니다.

많지는 않지만))) 자신의 컨트롤러를 작성하는 것이 더 정확할 것입니다 ... 글쎄, 또는 즉시 상속

CChartObject

Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Стандартная библиотека MQL5 написана на языке MQL5 и предназначена для облегчения написания программ (индикаторов, скриптов, экспертов) конечным пользователям. Библиотека обеспечивает удобный доступ к большинству внутренних функций MQL5.
 
Алексей Барбашин :
Sasha 님은 이미 코딩을 시작하셨으니 MQL에서 오픈 프로젝트를 만들어 공동 개발을 하시면 될 것 같습니다. 누가 알겠습니까?

처음부터 너무 이른 것 같아 먼저 던져야 해

 
Alexandr Andreev :

잠시 멈춘 동안 ... 표준 라이브러리 를 보니 .... 추가 항목이 많이 있습니다.

많지는 않지만))) 자신의 컨트롤러를 작성하는 것이 더 정확할 것입니다 ... 글쎄, 또는 즉시 상속

CChartObject

아니 아니!!

주의 깊게 봐!

이 컨트롤은 아무데도 가지 않는 길입니다! 이산 차트 개체가 필요하지 않습니다! 캔버스에 그림을 그릴 필요가 있습니다. 그래야만 개발과 충분한 기회가 제공됩니다.

그리고 자신의 주요 제어를 수행해야 한다는 사실은 분명합니다.

표준 라이브러리에서 속성과 상태는 CWndObject와 CWnd로 나뉘지만 모든 것을 하나의 컨트롤로 결합해야 합니다.

 
Алексей Барбашин :

아니 아니!!

주의 깊게 봐!

이 컨트롤은 아무데도 가지 않는 길입니다! 이산 차트 개체가 필요하지 않습니다! 캔버스에 그림을 그릴 필요가 있습니다. 그래야만 개발과 충분한 기회가 제공됩니다.

그리고 자신의 주요 제어를 수행해야 한다는 사실은 분명합니다.

표준 라이브러리에서 속성과 상태는 CWndObject와 CWnd로 나뉘지만 모든 것을 하나의 컨트롤로 결합해야 합니다.

1/4 시간 동안 나는 프로젝트를 만들 려고 시도했습니다. 그리고 그것은 밝혀지기 위해 만들어졌습니다. 이제 나는 그것을 공개하는 방법을 찾고 있습니다.

 
Alexandr Andreev :

처음부터 너무 이른 것 같아 먼저 던져야 해

나는 그것이 처음부터 가치가 없다고 확신합니다.

아주 똑똑한 사람들은 동일한 표준 라이브러리Anatolia 라이브러리 를 만들기 위해 많은 시간과 지식을 투자했습니다.

사람들은 시간과 지식을 낭비했으며 그것을 사용하지 않는 것은 어리석은 일입니다.

우리의 관점에서 두 가지 모두에서 최고를 취하고 새로운 것을 수집하면 됩니다.

다른 사람의 실수로부터 배워야 합니다. 우리는 우리 자신을 만들 것입니다 :)