MFC / Visual C++ PropertySheet Buttons

master_MO

Grünschnabel
hallo,

ich habe Probleme mit der Basisklasse CPropertyPage.
Es gibt dort 4 Buttons (OK, Abbrechen, Übernehmen & Hilfe) auf die ich nicht zugreifen kann.

Mein Ziel wäre folgendes:

1. den Übernehmen Button will ich entfernen oder generell deaktivieren weil er nicht
benötigt wird

2. der OK Button soll erst aktiviert werden, wenn alle Reiterkarten nacheinnander
durchgeclickt wurden, um nötige interne Berechnungen abzuschließen, da es sonst
zur Fehlermeldung kommt. Also erst wenn ich das Sheet "Verschiebungen" erreicht
habe, wird er aktiviert.

3. der Hilfe Button soll zu einer externen URL verlinkt werden, d.h. es öffnet sich der
Standard Browser. Mit welchem Befehl wird das erreicht?

hier ein Bild zur Übersicht:
Startscreen
ProgrammAblauf

zum Quelltext:
Code:
#include "StdAfx.h"
#include "Knotenbox.h"
#include "Staebebox.h"
#include "Auflagerbox.h"
#include "Lastenbox.h"
#include "Kraeftebox.h"
#include "Verschiebungenbox.h"
#include "FW_Fachwerk.h"
#include "Zeichnen.h"
#include <aced.h> 
#include <rxregsvc.h> 
#include <acutads.h>
#include <adscodes.h>
//-----------------------------------------------------------------------------
#define szRDS _RXST("")

//-----------------------------------------------------------------------------
//----- ObjectARX EntryPoint
class CFachwerkApp : public AcRxArxApp {

public:
	CFachwerkApp () : AcRxArxApp () {}

	virtual AcRx::AppRetCode On_kInitAppMsg (void *pkt) {
		AcRx::AppRetCode retCode =AcRxArxApp::On_kInitAppMsg (pkt) ;
		// TODO: Add your initialization code here
		acutPrintf ("\nGeben Sie fachwerk oder go ein!:\n");
		return (retCode) ;
	}

	virtual AcRx::AppRetCode On_kUnloadAppMsg (void *pkt) {
		AcRx::AppRetCode retCode =AcRxArxApp::On_kUnloadAppMsg (pkt) ;
		// TODO: Add your code here

		return (retCode) ;
	}

	virtual void RegisterServerComponents () {
	}

	// ----- Fachwerk.go command
	static void Fachwerkgo(void)
	{
		// Add your code for command Fachwerk._go here
		CFW_Fachwerk fachwerk;

		// Erzeugen einer Rahmendialogbox 
		CPropertySheet PropertySheet ("Fachwerkberechnung");

		// Erzeugen der Dialogboxseiten
		Knotenbox			KnotenPage(fachwerk.getASystem());
		Staebebox			StaebePage(fachwerk.getASystem());
		Auflagerbox			AuflagerPage(fachwerk.getASystem());
		Lastenbox			LastenPage(&fachwerk);
		Kraeftebox			KraeftePage(&fachwerk);
		Verschiebungenbox	VerschiebungenPage(&fachwerk);

		// Einfügen der Dialogboxseiten in die Standard-Rahmendialogbox
		PropertySheet.AddPage(&KnotenPage);					
		PropertySheet.AddPage(&StaebePage);					
		PropertySheet.AddPage(&AuflagerPage);
		PropertySheet.AddPage(&LastenPage);
		PropertySheet.AddPage(&KraeftePage);
		PropertySheet.AddPage(&VerschiebungenPage);
		
		// Übernehmen Button entfernen
		// sheet.m_psh.dwFlags |= PSH_NOAPPLYNOW;

		// Erzeugen der Zeichnung, wenn OK-Button geklickt
		if(PropertySheet.DoModal() == IDOK)
		{
			Zeichnen z(fachwerk.getASystem(), fachwerk.getKnotenLasten(), fachwerk.getEinflusslinie());
		} 
	}
} ;
 
Hallo,

das Ausblenden des Übernehmen-Buttons erreichst du, indem du vor dem Aufrufen des Dialogs
Code:
	mypropertysheet.m_psh.dwFlags|=PSH_NOAPPLYNOW;
in den Quelltext einfügst.

Für das Aktivieren/Deaktivieren des OK-Buttons würde ich die OnInitDialog-Funktionen der PropertyPage's überschreiben, dort das Parent holen (das PropertySheet) und in allen Pages für den OK-Button
Code:
             EnableWindow(false);
aufrufen. In der letzten Page kannst du dann die Funktion mit true aufrufen.
Zur dritten Frage habe ich im Moment keine Idee.

Mfg

langer
 
Zurück