Dynamische Steuerelemente



  • Hallo,
    also normalerweise schreibe ich viel mit den visual studios und c#.da ist es ja fast ein kinderspiel eigene steuerelemente zu entwickeln.da ich aber ein bisschen weg vom .NET framework will wollte ich das ganze mal in c+ und dann mit borland C+++ Builder 6 versuchen.doch wo finde ich dort die option ein eigenes steuerelement zu erstellen.vielelicht fehlern mir auch einfach nur die begrifflichkeiten bei borland und es versteckt sich hinter einem anderen namen.
    und wenn möglich ist würde ich auch gerne meine steuerelemente während der laufzeit dynmaisch erstellen.wie sieht es da in c++ aus..wie kann ich zum bleistift eines meiner steuerelemente in ein tablelayoutpanel(so heißt es in bei microsoft) unterbringen.außerdem besteht mein steuerelement aus mehreren textboxen,labels und comboboxen..wie kann ich auf diese elemente zugreifen??hatte mir es so vorgestellt.also der benutzer kann sagen wieviele steuerelemente er angezeigt bekommen haben will...sind es z.b. 3 oder 3000 dann lasse ich diese in einer schleife erstellen und weise ihnen eine nummer zu und darüber möchte ich zugreifen..
    also Steuerelement[i].Label1.Text = blablabla....
    oder sowas in der art...



  • secondsun@gmx.de schrieb:

    würde ich auch gerne meine steuerelemente während der laufzeit dynmaisch erstellen.

    Da habe ich zufällig was vorbereitet...

    #include <windows.h>
    #include <stdio.h>
    
    HINSTANCE hInstGlobal;
    
    int useparms(int a, ...)
    {
      return a;
    }
    
    char *fbprint(char *format, ...)
    {
      static char buf[160];
    
      vsprintf(buf, format, (&format)+1);
      return (char *)buf;
    }
    
    long TextOutStr(HDC hdc, int x, int y, char *s)
    {
      return TextOut(hdc, x, y, s, strlen(s));
    }
    
    int ReturnValue = 19;
    
    char templ[1000];
    
    char *Even4(char *s)
    {
      unsigned long l;
    
      l = (long)s;
      l = (l+3)&~3;
      return (char *)l;
    }
    
    char *CopyWide(short *dest, char *src)
    {
      do
          *dest++ = *src;
      while(*src++);
      return (char *)dest;
    }
    
    char *CopyShort(short *dest, unsigned short value)
    {
      *dest++ = value;
      return (char *)dest; 
    }
    
    /* ============================== */
    /* Template im Speicher erstellen */
    /* ============================== */
    void CreatTempl(void)
    {
      DLGTEMPLATE *dlgt;
      DLGITEMTEMPLATE *dlgit;
      char *s;
    
      dlgt = (DLGTEMPLATE *)templ;
      dlgt->style           = WS_SYSMENU;
      dlgt->dwExtendedStyle = 0;
      dlgt->cdit            = 1; /* Es folgt 1 Item-Struktur */
      dlgt->x               = 10;
      dlgt->y               = 10;
      dlgt->cx              = 200;
      dlgt->cy              = 200;
      s = (char *)(dlgt+1);
      s += 2;/* menu */
      s += 2;/* class */
      /*s += 2;*//* title */
      s = CopyWide((short *)s, "Schweine im Weltall");
    
      dlgit = (DLGITEMTEMPLATE *)Even4(s); /* Vor Item Adresse bündig machen */
      dlgit->style           = WS_CHILD | WS_VISIBLE;
      dlgit->dwExtendedStyle = 0;
      dlgit->x               = 10;
      dlgit->y               = 10;
      dlgit->cx              = 40;
      dlgit->cy              = 40;
      dlgit->id              = 20;
      s = (char *)(dlgit+1);
    
      /*s += 2;*//* class */
      /*s = CopyWide((short *)s, "button");*/
      s = CopyShort((short *)s, 0xFFFF), /* Entspricht */
      s = CopyShort((short *)s, 0x0082); /* "button" */
    
      /*s += 2;*//* title */
      s = CopyWide((short *)s, "OK");
    
      s += 2;/* dsize */
      /* itemdaten beginnen ebenfalls mit align4 */
    
      /* hier würde nächstes Item folgen */ 
    }
    
    int _stdcall dialogproc(HWND hwnd, unsigned int message,
                                           unsigned int wParam, long lParam)
    {
      switch(message)
        { case WM_INITDIALOG:
              return 1;
          case WM_KEYDOWN:
              EndDialog(hwnd, 28);
              return 1;
          case WM_COMMAND:
              EndDialog(hwnd, 30);
              return 1;
        }
      useparms(0, wParam, lParam);
      return 0;
    }
    
    void DoDialogBox(HWND hwnd)
    {
      CreatTempl();
      ReturnValue = DialogBoxIndirectParam(hInstGlobal,
                                   (DLGTEMPLATE *)templ, hwnd, dialogproc, 0);
    }
    
    long _stdcall WndProc(HWND hwnd, unsigned int message, unsigned int wParam,
                                                                   long lParam)
    {
      HDC hdc;
      PAINTSTRUCT ps;
      int KEYDOWN_nVirtKey;
    
      switch(message)
        { case WM_PAINT:
              hdc = BeginPaint(hwnd, &ps);
              TextOutStr(hdc, 10, 10, fbprint("ReturnValue %i", ReturnValue));
              EndPaint(hwnd, &ps);
              return 0;
          case WM_KEYDOWN:
              KEYDOWN_nVirtKey = wParam;
              if (KEYDOWN_nVirtKey == VK_RETURN)
                { DoDialogBox(hwnd);
                  InvalidateRect(hwnd, 0, TRUE);
                  UpdateWindow(hwnd);
                }
              return 0;
          case WM_DESTROY:
              PostQuitMessage(0);
        }
      return DefWindowProc(hwnd, message, wParam, lParam);
    }
    
    int _stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                                        char *szCmdLine, int iCmdShow)
    {
      HWND hwnd;
      MSG msg;
      WNDCLASS wc;
      char *cln = "mbclass";
    
      hInstGlobal = hInstance;
      memset(&wc, 0, sizeof(WNDCLASS));
      wc.style         = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
      wc.lpfnWndProc   = WndProc;
      wc.hInstance     = hInstance;
      wc.hIcon         = LoadIcon(0, IDI_INFORMATION);
      wc.hCursor       = LoadCursor(0, IDC_ARROW);
      wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
      wc.lpszClassName = cln;
    
      RegisterClass(&wc);
      hwnd = CreateWindow(cln, "Titel", WS_OVERLAPPEDWINDOW,
                                        CW_USEDEFAULT, CW_USEDEFAULT,
                                        CW_USEDEFAULT, CW_USEDEFAULT,
                                        0, 0, hInstance, 0);
      ShowWindow(hwnd, iCmdShow);
      UpdateWindow(hwnd);
    
      useparms(0, hPrevInstance, szCmdLine);
      while(GetMessage(&msg, 0, 0, 0))
        { TranslateMessage(&msg);
          DispatchMessage(&msg);
        }
    
      return msg.wParam;
    }
    

Anmelden zum Antworten