Avatar billede kamikaze Nybegynder
10. april 2002 - 16:38 Der er 30 kommentarer og
1 løsning

Faneblad i MSVC++, hvordan...

Jeg skal bruge et faneblad (Tab Control ???) i mit interface, gerne som en modal dialog box. Hvordan gør man det??? (Kode eks.)
Avatar billede jpk Nybegynder
11. april 2002 - 08:24 #1
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.
Avatar billede kamikaze Nybegynder
11. april 2002 - 11:17 #2
Hmm... Jeg kender ikke MFC, men det kan jeg selvfølgelig komme til... Er der ikke en måde at gøre det på i ren Win32 API?
Avatar billede kamikaze Nybegynder
11. april 2002 - 11:30 #3
error C2504: 'CPropertySheet' : base class undefined

Denne fejl får jeg, når jeg bruger classwizard'en. Hvad skal jeg sætte op for at bruge MFC?
Avatar billede jpk Nybegynder
11. april 2002 - 11:31 #4
#include <afxdlgs.h>
Avatar billede kamikaze Nybegynder
11. april 2002 - 11:53 #5
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> )
Avatar billede jpk Nybegynder
11. april 2002 - 12:03 #6
Project->Settings under "Microsoft Foundation Classes" står nok til "Not using MFC"...
Avatar billede kamikaze Nybegynder
11. april 2002 - 12:52 #7
Nej, den har stået til både static og DLL, men det vil ikke...(kender ikke nok til MFC - må nok læse en bog... :-)
Avatar billede kamikaze Nybegynder
11. april 2002 - 12:56 #8
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?
Avatar billede kamikaze Nybegynder
11. april 2002 - 12:57 #9
(smid iøvrigt lige et svar så jeg kan give dig nogle point)
Avatar billede jpk Nybegynder
11. april 2002 - 13:03 #10
Jo, stdafx.h er genereret af wizarden og indeholder nogle generelle includes, således du bare kan nøjes med at include dén og ikke en masse filer.

Du skal naturligvis kun acceptere et svar hvis du er tilfreds med det!
Avatar billede kamikaze Nybegynder
11. april 2002 - 13:11 #11
Yup, jeg er 15-point-tilfreds med din hjælp indtil videre. Har stadig nogle MFC problemer, men det har jo ikke noget med dine svar at gøre.

Iøvrigt: fatal error C1083: Cannot open include file: 'script1.h': No such file or directory

ClassWiz'en forsøger at inkludere script1.h, men den har ikke genereret denne fil. Skal jeg selv gøre det?
Avatar billede kamikaze Nybegynder
11. april 2002 - 13:18 #12
Har du prøvet at starte med en Win32 Application (Simple application), og bruge PropertySheets derfra?
Avatar billede jpk Nybegynder
11. april 2002 - 13:18 #13
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!
Avatar billede kamikaze Nybegynder
11. april 2002 - 13:23 #14
Du mener MFC AppWizard(exe), ikk? Det kan jeg godt, men jeg er vant til WndProc og kender minus til MessageMap så det er et lidt større projekt...
Avatar billede kamikaze Nybegynder
11. april 2002 - 13:24 #15
(Jeg har iøvrigt lavet en resource-fil 'script1.rc', men den bliver ikke til en header fil)
Avatar billede kamikaze Nybegynder
11. april 2002 - 13:26 #16
Umiddelbart er det ikke lige til, at blande ren win32-kode med MFC...
Avatar billede jpk Nybegynder
11. april 2002 - 13:33 #17
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.
Avatar billede kamikaze Nybegynder
11. april 2002 - 13:43 #18
OK. Sidder lige og prøver lidt forskelligt af...vender tilbage straks.
Avatar billede kamikaze Nybegynder
11. april 2002 - 14:00 #19
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?
Avatar billede kamikaze Nybegynder
11. april 2002 - 14:04 #20
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???
Avatar billede kamikaze Nybegynder
11. april 2002 - 14:07 #21
Sorry, det må være det message_map der ligger i MainFrm.cpp....
Avatar billede jpk Nybegynder
11. april 2002 - 14:16 #22
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.
Avatar billede kamikaze Nybegynder
11. april 2002 - 14:17 #23
Ok, det skal jeg lige prøve. Fandt ud af at håndkode det:
ON_COMMAND(ID_VIEW_PROPERTYSHEET, ShowPropSheet)
Avatar billede jpk Nybegynder
11. april 2002 - 14:19 #24
Nemlig, funktionen der kaldes, "ShowPropSheet", kan du navngive som du vil.
Avatar billede kamikaze Nybegynder
11. april 2002 - 14:21 #25
Nu har jeg lige fulgt din beskrivelse, og det virker (selvf.!). MEN, hvor er Message_map koden henne???
Avatar billede kamikaze Nybegynder
11. april 2002 - 14:23 #26
Ahhh...Den er bare grå... 1000 tak
Avatar billede kamikaze Nybegynder
11. april 2002 - 14:24 #27
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.
Avatar billede kamikaze Nybegynder
11. april 2002 - 14:26 #28
Lige en sidste ting:

Hvor ser jeg om brugeren har klikket OK eller Cancel på PropertySheet'et???
Avatar billede jpk Nybegynder
11. april 2002 - 14:27 #29
Den er grå, fordi er indsat af ClassWizarden og står mellem:
//{{AFX_MSG_MAP(.....)
og
//}}AFX_MSG_MAP

Det er til for at wizarden ved hvad den har indsat...
Avatar billede jpk Nybegynder
11. april 2002 - 14:29 #30
int nRet = Sheet.DoModal();
if(nRet == IDOK)
  ok..
else if(nRet == IDCANCEL)
  not...
Avatar billede kamikaze Nybegynder
11. april 2002 - 14:31 #31
THANX... Nu skal du nok få lidt fred :-))
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester