Avatar billede mouse-the-mighty Nybegynder
30. marts 2004 - 10:38 Der er 18 kommentarer og
1 løsning

vis ny dialog

jeg har (udover main dialogen) en dialog der bliver brugt til settings.
hvordan for man den frem og henter værdier fra den?

er i MS VC++
Avatar billede jpk Nybegynder
30. marts 2004 - 10:41 #1
Hvis vi antager at dialogen hedder CMyDialog og har en member ved navn m_nNumber, kan du gøre således:

CMyDialog dlg;
if(dlg.DoModal() == IDOK)
{
  int nNumber = dlg.m_nNumber;
}
Avatar billede jpk Nybegynder
30. marts 2004 - 10:41 #2
Altså dialogens class hedder CMyDialog...
Avatar billede mouse-the-mighty Nybegynder
30. marts 2004 - 10:55 #3
hmmm min main dialog hedder IDD_LISTINDEXER_DIALOG og min settings dialog hedder file_extentions og den skulle gerne retunere værdien af en CString.

er desvære lidt n00b til C++ så jeg er kun halvt med på hvad der foregår i den kode du du viser
Avatar billede jpk Nybegynder
30. marts 2004 - 11:29 #4
Hvis du ikke har genereret en klasse for din settings dialog, er det det første du skal gøre.
Det kan du fx gøre ved at dobbeltklikke på dialogen i resource-editoren og udfylde et par felter...
Avatar billede mouse-the-mighty Nybegynder
30. marts 2004 - 11:44 #5
er ikke helt sikker men jeg tror nok klassen hedder file_ext da funktionen til en af des knapper hedder void file_ext::OnButton1()

er lidt forvired over det her, fordi da jeg oprettede dialogen kaldte jeg dens id for File_Extentions
Avatar billede jpk Nybegynder
30. marts 2004 - 11:53 #6
Dialogens id og klassenavn behøver ikke at være det samme..

Hvis du har en metode som ovenstående, hedder klassen ganske rigtig "file_ext".

Altså, det sted i koden du vil vise dialogen, skriver du:

file_ext dlg;
if(dlg.DoModal() == IDOK)
{
  // Her kommer koden til at læse variablen
}
Avatar billede mouse-the-mighty Nybegynder
30. marts 2004 - 12:01 #7
hmm jeg for at vide at file_ext er en undeclared identifier.
Avatar billede jpk Nybegynder
30. marts 2004 - 12:04 #8
Du skal lave en include af klassen, den kunne fx se sådan ud (afhængig af filnavnet):

#include "file_ext.h"

Includen skal være øverst i filen, dog under #include "StdAfx.h"
Avatar billede mouse-the-mighty Nybegynder
30. marts 2004 - 14:08 #9
hehe nu begynder det at ligne noget...... kan få dialogen frem og det hele men jeg har lidt problemer med at få fat i dens variabel :(
det ser dog ud til at jeg godt kan få fat i objekter ved at gøre sådan dlg.GetDlgItemText(IDC_static1, test); det giver ikke gogen compile error men når jeg køre programmet og kommer til det sted craser den :(
det ville nu også være nemmest hvis jeg kunne få værdien af den nye (file_ext) dialogs globale variabel så jeg kan bruge den i main dialogen.
Avatar billede jpk Nybegynder
30. marts 2004 - 14:18 #10
1) dlg.GetDlgItemText(IDC_static1, test); er IKKE nogen pæn måde at gøre det på og kan i øvrigt slet ikke lade sig gøre i dette tilfælde. Når du når til koden, findes dialogens kontroller jo ikke længere...
2) Dialogen skal ikke have værdierne som globale variable, men som public members (hvis du vil tilgå dem direkte).

Du kan oprette en membervariable for en kontrol sådan:

1) Dobbeeltklik på kontrollen (fx en editbox)
2) I dialogen der kommer frem, giv den et navn (fx m_strName hvis den indeholder et navn)
3) Vælg at det skal være "Value" (ikke control) og af typen CString (hvis det er tekst)

Du vil så kunne henvise til variablen før og efter således:

file_ext dlg;
dlg.m_strName = "Mouse";
if(dlg.DoModal() == IDOK)
{
  CString strName = dlg.m_strName;
}
Avatar billede mouse-the-mighty Nybegynder
30. marts 2004 - 14:48 #11
jeg er ikke helt sikker på hvad det med Value er.....
når jeg dobbelklikker på en editbox for jeg kun mulighedden for at skrive et navn som den selv foreslår skal være OnChangeEdit2.
har dog lige et spørgsmål til hvordan nye dialoger virker... når man klikker på ok og afslutter den, forsvider alle dens oplysninger og variabler så? ligesom når man kommer til enden af en funktion.
Avatar billede jpk Nybegynder
30. marts 2004 - 15:53 #12
Nej, de er jo medlem af klassen og "lever" sålænge dit dialogobjekt "lever".

Du skal nok holde Ctrl nede når du dobbeltklikker, min fejl...
Avatar billede mouse-the-mighty Nybegynder
31. marts 2004 - 14:51 #13
sorry jeg først skriver tilbage nu (fik lige pludselig travlt)
jeg har prøvet at læse lidt op på det du var ved at forklare mig med at tilføje en member variabler. yup fik det til at virke ^_^ er det kun objekter som text boxes der kan laves til en member eller kan man gøre det samme med variabler i den nye dialog?.
orv mens vi er ved det, jeg syndtes ikke at kunne finde en startup routine (som OnInitDialog())  i den nye dialog :( hvad gør man der?
Avatar billede jpk Nybegynder
01. april 2004 - 08:37 #14
Jeg forstår ikke dit spm. med "kan man gøre det samme med variabler i den nye dialog?".

Ang. OnInitDialog, så skal du selv tilføje den i VC++ 6 (som jeg går ud fra du bruger?).
1) Højreklik et sted i koden til dialogen og vælg ClassWizard
2) Find det faneblad hvor du kan vælge at tilføje en handler for en message
3) Find WM_INITDIALOG i listen og dobbeltklik
Avatar billede mouse-the-mighty Nybegynder
01. april 2004 - 09:46 #15
når jeg går ind i class wizarden er der et faneblad der heder Message Maps drunder er der en liste af objekts IDs hvor id'en til den nye dialog er i. når jeg vælger den er der en liste ved siden af der hedder messages hvor der er en hel del af dem der starter med WM_ men jeg kunne ike rigtig finde WM_INITDIALOG jeg fandt dog en der hedder WM_CREATE, det er vel ikke den?
Avatar billede jpk Nybegynder
01. april 2004 - 10:08 #16
Nej, det er det ikke.
Jeg har desværre ikke VC++ 6 her, så jeg kan ikke tjekke det...

Er der evt. et sted hvor du kan vælge "overrideables" og tilføje OnInitDialog der?
Avatar billede mouse-the-mighty Nybegynder
01. april 2004 - 10:53 #17
desvære ikke jeg lige kan finde
Avatar billede jpk Nybegynder
01. april 2004 - 11:15 #18
Jeg mener nu også du skal finde WM_INITDIALOG i listen over messages
Men du skal nok vælge klassenavnet for din dialog, ikke dens id...
Avatar billede mouse-the-mighty Nybegynder
06. april 2004 - 09:05 #19
hmmmm kan bare ikke finde den :/ men vi er vist også ved at være langt ud over det oprindelige spørgsmål, så du for lige dine velfortjænte point ^_^
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