내 접근 방식. 코어 - 엔진. - 페이지 7

 
속성, 개체 및 요소를 구성하는 가장 좋은 방법 은 표를 만드는 것 입니다.

요소의 핵심은 테이블입니다.

우리는 특정 요소의 개체에 대한 초기 매개변수를 저장하도록 설계된 프로토-커널 모델을 만들었습니다.

다음으로, 메인 Core를 생성하고 필요한 만큼 많은 요소를 작성해야 합니다.

그런 다음 메인 코어 내부의 각 요소에 대해 새로운 값을 설정합니다.

그런 다음 요소를 생성합니다.

그런 다음 우리는 다양한 행사에서 그들과 함께 일할 것입니다.


 

우리는 주요 핵심을 선언합니다:

 int G_CORE[All_objects][All_properties];

Core의 각 행은 하나의 개체를 차지합니다.

Core에 얼마나 많은 객체가 있을 것인지 결정해야 합니다. 이렇게 하려면 생성하려는 요소의 수와 각 요소의 개체 수를 계산해야 합니다.

10개의 버튼이 필요하다고 가정해 봅시다. 그리고 그것은: 10개의 요소 * 3개의 개체 = 30개의 개체입니다. 그래서 - 30 행.

 #define All_objects     30
#define All_properties  10

기본 매개변수에 추가하여 요소 및 개체의 이름, 이들 간의 링크 및 기타 속성이 필요하기 때문에 기본 Core의 속성 수를 늘렸습니다.


객체 속성을 다시 선언해 보겠습니다.

 #define NAME         0
#define TYPE         1
#define ELEMENT     2

#define X           3
#define X_SIZE       4
#define Y           5
#define Y_SIZE       6
#define BG_COLOR     7
#define TEXT_COLOR   7
#define TEXT         8
#define CORNER       9
#define STATE       10
//-------------------

TEXT 속성에는 버튼 텍스트가 포함된 다른 배열에 대한 링크가 포함됩니다.

ELEMENT 속성은 코어 내에서 동일한 요소의 개체를 연결하는 데 필요합니다(따라서 어떤 개체가 어떤 요소에 속하는지 혼동되지 않음). 이 속성에서 요소의 서수를 설정합니다.

 
Реter Konow : //요소 속성 호출은 다음과 같습니다.

베이스, 텍스트, 아이콘을 혼동하기 매우 쉽습니다. 이 또는 저 색인 내부에 무엇이 있는지 설명에서 명확합니다. 실제 프로그래밍에서는 이 모든 것을 염두에 두어야 합니다. 나는 피터가 잊는 능력이 급격히 약화 된 기억력 거인이라는 것을 알고 있습니다. 하지만 그런 거인은 거의 없습니다. 다음 날 어디에 무엇을 넣어야 하는지 잊어버릴 것입니다.

다음과 같은 것이 더 좋지 않을까요?(저는 이렇게 할 것입니다):

우리는 우리가 필요로 하는 기본 구조를 선언합니다.

 struct SPosition
{
uint m_uiX;
uint m_uiY;
};

struct SElementSize
{
uint m_uiXSize;
uint m_uiYSize;
};

이제 공유 객체에서 기본, 텍스트 및 아이콘 인터페이스를 얻을 수 있습니다.

CBaseI* pbBase = core.GetBase();
CTextI* ptText = core.GetText();
CIconI* pbIcon = core.GetIcon();

그리고 이 세 가지 인터페이스 중 하나는 해당 속성을 설정합니다. 예를 들어 다음과 같은 텍스트가 있습니다.

ptText.SetPosition(SPosition& rpPos);

위치 구조(X 및 Y)를 채우고 코어에서 텍스트 인터페이스를 호출하고 이 인터페이스에서 구조와 함께 위치 설정 함수 를 호출합니다. 또한 이러한 각 인터페이스에는 크기 및 색상을 설정하는 기능이 있습니다. 모든 기능이 0과 같은 공통의 순수 가상 인터페이스에서 상속하는 것이 좋습니다.

여기서 뭔가를 혼동하는 것이 훨씬 더 어렵습니다. 작업의 매 순간마다 작업에 필요한 것만 액세스할 수 있기 때문입니다. 그리고 다른 것에 대해서는 여전히 호출해야하며 그것이 금지 된 경우 시스템의 올바른 디자인으로이 "금지 된"인터페이스를 호출 할 수 없으므로 실수로부터 자신을 보호 할 수 있습니다.

 

그래서 먼저 프로토타입 코어의 속성 수를 변경했는데 메인 코어와 동일한 수의 속성이 있었습니다. 다음으로 G_CORE 빌드 주기를 만들어 보겠습니다.

 int P_CORE[ 3 ][ 10 ] = {
//Основание кнопки.-----------------------------
//
//NAME     TYPE   ELEMENT     X    Y     X_SIZE  Y_SIZE       COLOR 
//----------------------------------------------
{ 100001 ,  base,  button,     100 , 100 ,     200 ,     50 ,     C'245,245,245' },
//---------------------------------------------- 
//Текст кнопки.---------------------------------
//
//NAME    TYPE   ELEMENT   X    Y     X_SIZE  Y_SIZE       COLOR 
//----------------------------------------------
{ 100002 ,  text,  button,   120 , 120 ,     0 ,       0 ,       C'245,0,0' },
//---------------------------------------------- 
//Иконка кнопки.-------------------------------- 
//
//NAME    TYPE     ELEMENT   X    Y     X_SIZE  Y_SIZE       COLOR 
{ 100003 ,   icon ,    button,   140 , 140 ,     16 ,     16 ,           0 },
//---------------------------------------------- 
};
 //Далее, строим G_CORE:
//--------------------------------------
int q = 0;
//--------------
for ( int a1 = 0 ; a1 < All_objects; a1++)
  {
   for ( int a2 = 0 ; a2 < All_properties; a2++)
    {
     G_CORE[a1][a2] = P_CORE[q][a2];
    }
     q++;
     if(q == 3)q = 0;    
  }


이 루프 후에 G_CORE는 10개의 버튼 프로토타입으로 채워집니다. 다음으로 우리의 임무는 요소에 고유한 이름을 부여하고 개체를 요소에 바인딩 하여 각 요소에 고유한 인덱스를 제공하는 것입니다.

 
Реter Konow :

그래서 먼저 프로토타입 코어의 속성 수를 변경했는데 메인 코어와 동일한 수의 속성이 있었습니다. 다음으로 G_CORE 빌드 주기를 만들어 보겠습니다.

인 인에서는 이 코드에서 완벽하게 볼 수 있습니다.

나는 이미 거기에서 1이 무엇을 의미하는지, 그리고 a2가 무엇을 의미하는지 잊어버렸습니다.

그러나 이것은 그리 나쁘지 않습니다. 잊어 버리면 더 높은 곳을 봐야합니다. 그러나 나는 잊지 않고 동시에 요소를 섞었다 고 확신 할 수 있습니다. 그리고 나서 - 그것이 즉시 밝혀지면 좋습니다. 그렇지 않으면 전혀 사실이 아니며 오류가 훨씬 나중에 밝혀질 수 있으며 비열의 법칙에 따라 가장 취약한 지점과 가장 부적절한 순간에 영향을 미칩니다.

피터의 접근 방식은 기억 거인의 접근 방식입니다. 그것도 아주 정상입니다. 그런데 참가자들 중에는 그런 거인이 많습니까?

 

그 사이에 일부 작은 회사에서도 비참한 GUI에 대한 코드를 열었습니다. :-)

그들은 정말로 모퉁이를 돌고 있습니다 ... 그들은 경쟁을 두려워합니다 !!

농담, 농담, 하지만 누가 Windows GUI가 내부에서 작동하는지 알 수 있습니다.

WPF는 Windows 데스크톱 애플리케이션을 빌드하기 위한 .NET Core UI 프레임워크입니다.: https://github.com/dotnet/wpf

Windows Forms는 Windows 데스크톱 애플리케이션을 빌드하기 위한 .NET Core UI 프레임워크입니다. https://github.com/dotnet/winforms

UWP XAML 컨트롤, Fluent 스타일 및 자료를 포함한 Windows UI 기능의 이전 버전과 호환되는 버전: https://github.com/Microsoft/microsoft-ui-xaml


 
Maxim Kuznetsov :

그 사이에 일부 작은 회사에서도 비참한 GUI에 대한 코드를 열었습니다. :-

여기서 문제는 GUI가 아닙니다. 내 접근 방식은 외삽되어 모든 목적에 적용될 수 있습니다. AI 포함.

다음으로 그 방법을 알려 드리겠습니다.

 
조지, 계속하게 해주세요. 나는 당신이 OOP를 선호하고 그것이 당신에게 더 편리하다는 것을 알고 있습니다. 그러나 귀하의 결정은 프로그래머의 편의에 따라 계산됩니다. 나는 지금 최대한의 발전을 이룰 수 있는 방법을 찾고 있습니다. 편의성은 두 번째입니다.
 
Реter Konow :

Core에 얼마나 많은 객체가 있을 것인지 결정해야 합니다. 이렇게 하려면 생성하려는 요소의 수와 각 요소의 개체 수를 계산해야 합니다.

 #define All_objects     30
#define All_properties   10

바닥에서 질문:

거래 전문가의 거래 테이블을 생성한다고 가정해 보겠습니다. 각 라인은 진입 가격, 퇴출 가격, 거래량 등을 나타내는 하나의 거래입니다. 테이블의 행 수를 올바르게 결정하기 위해 Expert Advisor가 수행할 거래 수를 컴파일하기 전에 미리 알아내는 방법은 무엇입니까?

 
Vasiliy Sokolov :

바닥에서 질문:

거래 전문가의 거래 테이블을 생성한다고 가정해 보겠습니다. 각 라인은 진입 가격, 퇴출 가격, 거래량 등을 나타내는 하나의 거래입니다. 테이블의 행 수를 올바르게 결정하기 위해 Expert Advisor가 수행할 거래 수를 컴파일하기 전에 미리 알아내는 방법은 무엇입니까?

각 거래에 대해 ArrayResize를 사용하여 배열에 행을 추가하고 거래 속성을 씁니다.

동시에 속성을 셀에 미리 배포합니다.

그 후 모든 데이터가 정렬됩니다.