Benim yaklaşımım. Çekirdek - Motor. - sayfa 7

 
Özellikleri, nesneleri ve öğeleri düzenlemenin en iyi yolu bir tablo oluşturmaktır .

Elementlerin özü tablodur.

Belirli bir öğenin nesnelerinin başlangıç parametrelerini depolamak için tasarlanmış bir proto-çekirdek modeli oluşturduk.

Ardından, ana Çekirdeği oluşturmalı ve içine ihtiyacımız olduğu kadar çok öğe yazmalıyız.

Ardından ana çekirdeğin içindeki her bir element için yeni değerler belirleyeceğiz.

Daha sonra elementleri oluşturacağız.

Daha sonra onlarla çeşitli etkinliklerde çalışacağız.


 

Ana çekirdeği ilan ediyoruz:

 int G_CORE[All_objects][All_properties];

Çekirdeğin her satırı bir Nesneyi işgal edecektir.

Çekirdekte kaç tane nesne olacağını belirlememiz gerekiyor. Bunu yapmak için, oluşturmak istediğimiz öğelerin sayısını ve her bir öğedeki Nesnelerin sayısını saymalıyız.

Diyelim ki 10 düğmeye ihtiyacımız var. Ve bu: 10 eleman * 3 nesne = 30 nesne. Yani - 30 satır.

 #define All_objects     30
#define All_properties  10

Ana Çekirdekteki özelliklerin sayısını artırdık, çünkü temel parametrelere ek olarak, Elementlerin ve Nesnelerin adlarına, aralarındaki bağlantılara ve diğer bazı özelliklere ihtiyacımız var.


Nesne özelliklerini yeniden bildirelim:

 #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 özelliği, düğme metinlerini içeren başka bir diziye bir bağlantı içerecektir.

ELEMENT özelliği, aynı Elementin nesnelerini çekirdek içinde bağlamak için gereklidir (böylece hangi nesnenin hangi elemente ait olduğu konusunda bir karışıklık olmaz). Bu özellikte, elemanın sıra numarasını ayarlayacağız.

 
Реter Konow : // Element özelliği çağrıları şöyle görünecek:

Tabanı, metni ve simgeyi karıştırmak çok kolaydır. Açıklamada bunun veya bu dizinin içinde ne olduğu açıktır. Gerçek programlamada, tüm bunların akılda tutulması gerekecektir. Peter'ın unutma yeteneği keskin bir şekilde zayıflamış bir hafıza titanı olduğunu biliyorum. Ama korkarım ki böyle birkaç titan var. Ertesi gün nereye ve ne koyacağımı unutacağım.

Böyle bir şeye sahip olmak daha iyi olmaz mıydı (şöyle yapardım):

İhtiyacımız olan elementer yapıları ilan ediyoruz.

 struct SPosition
{
uint m_uiX;
uint m_uiY;
};

struct SElementSize
{
uint m_uiXSize;
uint m_uiYSize;
};

Artık paylaşılan nesneden temel, metin ve simge arayüzleri alabilirsiniz:

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

Ve bu üç arabirimden herhangi biri - ilgili özelliği ayarlar. Örneğin, metin:

ptText.SetPosition(SPosition& rpPos);

Pozisyon yapısını (X ve Y) dolduruyoruz, kernelden text interface'içağırıyoruz ve bu interface'den de konum ayar fonksiyonunu yapımızla çağırıyoruz. Ayrıca, bu arayüzlerin her biri, boyutu ayarlama ve rengi ayarlama işlevine sahiptir. Bunları, tüm işlevlerin sıfıra eşit olduğu ortak, tamamen sanal bir arabirimden devralmanız önerilir.

Burada bir şeyi karıştırmak çok daha zor. Çünkü işin her anında sadece iş için ihtiyacınız olan şeylere erişiminiz var. Ve başka bir şey için - yine de onu aramanız gerekiyor ve eğer sizin için yasaksa, o zaman sistemin doğru tasarımıyla - bu "yasak" arayüzü arayamazsınız, böylece kendinizi hatalardan korursunuz.

 

Ve böylece, ilk önce prototip çekirdeğin özellik sayısını değiştiriyoruz, ana çekirdektekiyle aynı sayıda özellik vardı. Ardından, bir G_CORE derleme döngüsü yapalım.

 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;    
  }


Bu döngüden sonra G_CORE, 10 düğme prototipi ile doldurulacaktır. Daha sonra, görevimiz Elementlere benzersiz adlar vermek ve Nesneleri Elementlerine bağlayarak her bir Öğeye benzersiz bir dizin vermektir.

 
Реter Konow :

Ve böylece, ilk önce prototip çekirdeğin özellik sayısını değiştiriyoruz, ana çekirdektekiyle aynı sayıda özellik vardı. Ardından, bir G_CORE derleme döngüsü yapalım.

İçeride, bu kodda mükemmel bir şekilde görülebilir.

Orada a1'in ne anlama geldiğini ve a2'nin ne anlama geldiğini çoktan unuttum.

Ama bu o kadar da kötü değil - eğer unuttuysam - daha yükseğe bakmam gerekecek. Ama unutmadığımdan ve aynı zamanda - unsurları karıştırdığımdan emin olabilirim. Ve sonra - hemen ortaya çıkarsa iyi olur. Aksi takdirde, bu hiç bir gerçek değildir ve hata çok daha sonra ortaya çıkabilir ve ortalamalık yasasına göre, sadece en savunmasız noktada ve en uygunsuz anda etkileyecektir.

Peter'ın yaklaşımı bir hafıza titanının yaklaşımıdır. Ayrıca oldukça normaldir. Ancak katılımcılar arasında bu kadar çok titan var mı?

 

Bu arada, bazı küçük şirketler bile zavallı GUI'lerinin kodunu açtılar. :-)

gerçekten köşeyi dönüyorlar ... rekabetten korkuyorlardı !!

şakalar, şakalar, ancak Windows GUI'nin içeriden nasıl çalıştığını kimin umurunda?

WPF, Windows masaüstü uygulamaları oluşturmaya yönelik bir .NET Core UI çerçevesidir.: https://github.com/dotnet/wpf

Windows Forms, Windows masaüstü uygulamaları oluşturmaya yönelik bir .NET Core UI çerçevesidir: https://github.com/dotnet/winforms

UWP XAML kontrolleri ve Fluent stilleri ve malzemeleri dahil olmak üzere Windows UI özelliklerinin geriye dönük uyumlu sürümleri: https://github.com/Microsoft/microsoft-ui-xaml


 
Maxim Kuznetsov :

Bu arada, bazı küçük şirketler bile zavallı GUI'lerinin kodunu açtılar. :-

Buradaki sorun GUI değil. Yaklaşımım tahmin edilebilir ve herhangi bir amaca uygulanabilir. AI dahil.

Ardından, size nasıl yapılacağını göstereceğim.

 
George, lütfen devam etmeme izin ver. OOP'yi tercih ettiğinizi biliyorum ve bu sizin için daha uygun. Ancak kararlarınız programcının rahatlığına göre hesaplanır. Şimdi maksimum gelişmenin sağlanabileceği bir yaklaşım arıyorum. Kolaylık ikinci sırada gelir.
 
Реter Konow :

Çekirdekte kaç tane nesne olacağını belirlememiz gerekiyor. Bunu yapmak için, oluşturmak istediğimiz öğelerin sayısını ve her bir öğedeki Nesnelerin sayısını saymalıyız.

 #define All_objects     30
#define All_properties   10

Yerden soru:

Diyelim ki bir ticaret uzmanının anlaşma tablosunu oluşturduk. Her satır, giriş fiyatını, çıkış fiyatını, hacmi vb. gösteren bir işlemdir. Tablodaki satır sayısını doğru bir şekilde belirlemek için Uzman Danışmanın yapacağı işlem sayısını derlemeden önce önceden nasıl öğrenebilirim?

 
Vasiliy Sokolov :

Yerden soru:

Diyelim ki bir ticaret uzmanının anlaşma tablosunu oluşturduk. Her satır, giriş fiyatını, çıkış fiyatını, hacmi vb. gösteren bir işlemdir. Tablodaki satır sayısını doğru bir şekilde belirlemek için Uzman Danışmanın yapacağı işlem sayısını derlemeden önce önceden nasıl öğrenebilirim?

Her anlaşmada ArrayResize kullanarak diziye bir satır ekleyin ve anlaşma özelliklerini ona yazın.

Aynı zamanda, özellikleri hücrelere önceden dağıtın.

Ardından, tüm veriler sıralanacaktır.