Verschiedene Dialogelemente per Preprozessor



  • Hallo,

    ich hab einen recht üppigen Dialog, der viele Buttons, Checkboxen usw enthält. Jetzt möchte ich per Preprozessor eine abgespeckte Variante erzeugen, die dann nur noch ein paar wenige Buttons enthält.
    Wozu? Die SW soll für Entwickler alles anzeigen, für User nur noch das notwendige.
    Wie kann ich per #define einen Button erzeugen, bzw nicht erzeugen lassen?
    Problem ist, dass das Rescourcefile ja vom Visual Studio selbst erzeugt wird!

    Gruss,
    Hansi



  • Wie wäre es, wenn du einfach die Controls mit ShowWindow versteckst? 🙂



  • ich könnte alle nicht benötigten Elemente per Menüauswahl so zur Laufzeit abschalten, dann kann aber jeder x-beliebige User die Entwickler-Ansicht reaktivieren, was eigentlich nicht gewünscht ist.
    Oder ich schalte erst mal alle aus, und per #define nur die gewünschten wieder ein, das müsste eigentlich gehen...



  • hschon schrieb:

    ich könnte alle nicht benötigten Elemente per Menüauswahl so zur Laufzeit abschalten, dann kann aber jeder x-beliebige User die Entwickler-Ansicht reaktivieren, was eigentlich nicht gewünscht ist.
    Oder ich schalte erst mal alle aus, und per #define nur die gewünschten wieder ein, das müsste eigentlich gehen...

    Musst das ja dem Nutzer nicht unbedingt zugänglich machen. Wenn Du die Einstellungen (also welche Dialogelemente sichtbar sind und welche nicht) über ein Dialogfeld abfragst, so lass das Dialogfeld doch nur für einen bestimmten Nutzer (z.B. Admin) aufrufbar sein. Den Namen hast Du ja beim Login, für alle anderen disablest Du diesen Menüpunkt.
    Variante 2 wäre die mit den Präprozessordirektiven. Steuer das doch einfach über Debug- und Release-Version. Über

    #ifdef _DEBUG
    //hier Code zum Aktivieren aller Dialogelemente einfügen
    #endif //_DEBUG
    

    dürfte das funktionieren. In der Debugversion, die üblicherweise nur der Entwickler hat sind dann alle Dialogelemente dargestellt. Der Endnutzer bekommt die Release. In diesem Fall wird der obenstehende Codeabschnitt nicht mit kompiliert.



  • ...jetzt wäre nur noch interessant, WIE ich den Button wieder "visible" bekomm...

    Ein Button hängt so in der MessageMap:

    ON_BN_CLICKED(IDC_BUTTON_Measurement, OnBnClickedButtonMeasurement)
    

  • Mod

    Mit ShowWindow!



  • Fuer ShowWindow brauch ich eine Klasse.
    Bisher hab ich den Button nur in der MessageMap bekannt gemacht, die beim Event dann eben die angegebene Funktion aufruft.
    Kannste mir mal ein "ShowWindow"-Beispiel schreiben? -wäre hilfreich !



  • Die Klasse ist CWnd...
    CWnd::ShowWindow()

    Schau in der Hilfe, dort ist ein Artikel drin.

    ShowWindow() markieren und dann F1 druecken, dort CWnd::ShowWindow() auswaehlen. 🙂



  • GetDlgItem(IDC_BUTTON_Measurement)->ShowWindow(SW_SHOW); // oder SW_HIDE



  • OK, es sieht ganz gut aus (allerdings konnte ich mit der Microsoft-Doku nicht viel anfangen! Die Aussage "Sets the visibility state of the window" führt doch völlig in die Irre -oder seit wann ist ein Button ein Window?!)
    Am besten sind immer noch Beispiele.

    Damit's andere einfacher haben:

    1. Button als Objekt in der Klasse CFormView anlegen:
    CButton m_measurement;

    2. dann z.B in OnInitialUpdate den Button "visible" schalten:
    m_measurement.ShowWindow(TRUE);

    Danke euch allen für die Tipps !!!



  • hschon schrieb:

    OK, es sieht ganz gut aus (allerdings konnte ich mit der Microsoft-Doku nicht viel anfangen! Die Aussage "Sets the visibility state of the window" führt doch völlig in die Irre -oder seit wann ist ein Button ein Window?!)
    Am besten sind immer noch Beispiele.

    Damit's andere einfacher haben:

    1. Button als Objekt in der Klasse CFormView anlegen:
    CButton m_measurement;

    2. dann z.B in OnInitialUpdate den Button "visible" schalten:
    m_measurement.ShowWindow(TRUE);

    Danke euch allen für die Tipps !!!

    Da hast Du wohl was nicht ganz verstanden. Rate mal warum Windows Windows heißt? Weil (fast) alles was Du siehst als Fenster angesehen wird, auch der Startknopf und die Taskleiste.


Anmelden zum Antworten