Jeg ved godt du bad om et kodeeksempel, men det er faktisk ret simpelt...
Brug ClassWizarden til at nedarve en klasse fra CPropertySheet og dernæst til at nedarve en klasse fra CPropertyPage for hver side (faneblad) du vil have.
Du bruger dit sheet næsten ligesom en dialog (hvilket det er), og kan altså kalde DoModal på en instans af klassen. Dit sheet har en metode kaldet AddPage, som du kalder for hver faneblad du vil have på dit sheet.
Hmmm. Jeg kan godt få det til at virke hvis jeg laver et nyt projekt baseret på MFC. Men ikke i mit 'gamle' projekt, der er baseret på en helt tom win32 applikation. (Det er ikke nok med #include <afxdlgs.h> )
Når jeg tager udgangspunkt i min 'gamle' applikation og bruger ClassWiz får jeg flg. fejl: fatal error C1083: Cannot open include file: 'stdafx.h': No such file or directory 'stdafx.h' er en maskin-genereret fil i MFC, ikk?
Der er "normalt" ikke nogen fil med det navn i et projekt. Du har sikkert ikke lavet nogen resource fil *.rc (genereres automatisk hvis du vælger en MFC app).
Mit forslag til dig er at bruge AppWizarden til at generere et projekt, hvor du så også kan bruge ClassWizarden, det er et utrolig kraftigt stykke værktøj!
Ahh, det må du meget undskylde, jeg læste forkert! Den spørger efter en .h-fil, så det skal filen naturligvis også hedde...
Selvom du ikke kender til MFC's MessageMap, synes jeg nu du skulle bruge AppWizarden alligevel, vi kan jo ta' det i små skridt..? Hvis du fortæller mig hvilke message du vil have, skal jeg hurtig fortælle dig hvordan du får lavet dit MessageMap. Det er ret let med ClassWizzard. Men det er selvfølgelig dit eget valg.
Nu har jeg lavet en lille test app. Jeg har lavet en PropSheet med to PropPages samt et menupunkt der hedder view->Property Sheet (ID_VIEW_PROPERTYSHEET).
Min instans af PropSheet (PS) er public member i MainFrm, og bliver initialiseret i MainFrm constructoren. --- Nu vil jeg gerne vise PS (PS->DoModal()) når jeg vælge menu punktet. Hvor skriver jeg det?
Jeg kan se, at det er i <app.name>.cpp menu-events ligger. Så jeg kan altså fange ON_COMMAND(ID_VIEW_PROPERTYSHEET, xxx), men hvilken funktion skal istedet for xxx???
Højreklik på den fil hvori du vil fange eventen (fx MainFrm.cpp) og vælg "ClassWizard". Find ID'et (ID_VIEW_PROPERTYSHEET) i listen "Object ID's", dobbeltklik på "COMMAND" i listen "Messages" og klik "OK" på boksen der kommer frem. Den kodestup der genereres, er den, der kaldes, når du klikker på menupunktet.
Alt i alt må jeg sige at jeg er imponeret. Det er lækkert og nemt og ser hamrende godt ud...Der kommer nok nogle MFC spm i løbet af de næste par uger :-) Tak for hjælpen.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.