Difference between revisions of "MFC"
(→Custom Dialogbokse) |
|||
Line 1: | Line 1: | ||
− | + | =Standart Dialogbokse= | |
En almindelig besked laves med <code>MessageBox("besked" [,"titel"] [,options])</code> | En almindelig besked laves med <code>MessageBox("besked" [,"titel"] [,options])</code> | ||
Line 26: | Line 26: | ||
} | } | ||
− | + | ==Custom Dialogbokse== | |
En ny custom dialogbox laves som en alm. boks og når at du skal kalde den, gøres det som med de indbyggede dialogbokse. Læg mærke til at det er ikke nødvendigt at kalde UpdateData(), det sker nemlig automatisk ved kald af <code>OnOK()</code>. | En ny custom dialogbox laves som en alm. boks og når at du skal kalde den, gøres det som med de indbyggede dialogbokse. Læg mærke til at det er ikke nødvendigt at kalde UpdateData(), det sker nemlig automatisk ved kald af <code>OnOK()</code>. | ||
Line 32: | Line 32: | ||
Husk at gøre sådan at du kan få fat i din custom dialogs data enten med en <code>getData()</code> function eller at gøre control variablen public. | Husk at gøre sådan at du kan få fat i din custom dialogs data enten med en <code>getData()</code> function eller at gøre control variablen public. | ||
− | + | =Data til og fra dialog-controls= | |
I MFC vil man typisk ikke aflæse dataene direkte fra objecterne. I stedet for vil man have en en variabel som man bruger til udveksle data mellem control og programkode. Dataene udveksles mellem program og dialogboks når at man kalder funktionen UpdateData(); denne funktion modtager en parameter i form af en boolean som fortæller om data skal fra program til dialogboks eller omvendt; | I MFC vil man typisk ikke aflæse dataene direkte fra objecterne. I stedet for vil man have en en variabel som man bruger til udveksle data mellem control og programkode. Dataene udveksles mellem program og dialogboks når at man kalder funktionen UpdateData(); denne funktion modtager en parameter i form af en boolean som fortæller om data skal fra program til dialogboks eller omvendt; | ||
Line 44: | Line 44: | ||
[[Image:Mfc1.png|MFC data exchange]] | [[Image:Mfc1.png|MFC data exchange]] | ||
− | + | =Ændre stilen= | |
Hvis du i programmet har brug for at ændre indstillinger for din dialogbox kan det gøres med ModifyStile (kan f.eks. kaldes fra OnInitDialog() ). (Følgende kode System-menuen til dialogboksen) | Hvis du i programmet har brug for at ændre indstillinger for din dialogbox kan det gøres med ModifyStile (kan f.eks. kaldes fra OnInitDialog() ). (Følgende kode System-menuen til dialogboksen) | ||
Line 50: | Line 50: | ||
this->ModifyStyle(0, WS_SYSMENU); | this->ModifyStyle(0, WS_SYSMENU); | ||
− | + | =Ændre control udfra ID= | |
Når at man i VC++ laver programmer med dialogeditoren, kan man i sin kode bruge <code>GetDlgItem()</code> til at hente en reference til et givent control. Læg mærke til at funktionene returnerer en pointer til et CWnd object. | Når at man i VC++ laver programmer med dialogeditoren, kan man i sin kode bruge <code>GetDlgItem()</code> til at hente en reference til et givent control. Læg mærke til at funktionene returnerer en pointer til et CWnd object. | ||
Line 68: | Line 68: | ||
− | + | =Waiting Cursor= | |
Hvis du har brug for at vise timeglasset så længe at en bestemt function kører kan du erklære en variabel af typen <code>CWaitCursor</code> i starten af din funktion. | Hvis du har brug for at vise timeglasset så længe at en bestemt function kører kan du erklære en variabel af typen <code>CWaitCursor</code> i starten af din funktion. | ||
− | + | =Formaterede strenge= | |
Hvis du har brug for at formatere en streng, kan du bruge <code>CString::Format()</code> som virker på nogen lunde samme måde som standart C funktionen <code>sprintf()</code>. | Hvis du har brug for at formatere en streng, kan du bruge <code>CString::Format()</code> som virker på nogen lunde samme måde som standart C funktionen <code>sprintf()</code>. |
Revision as of 09:18, 30 March 2006
Contents
Standart Dialogbokse
En almindelig besked laves med MessageBox("besked" [,"titel"] [,options])
hvor at options feltet bruges til at fastlægge hvilke knapper der skal være og om der skal være et ikon.
Lav en ja/nej boks:
int res = MessageBox("Are you sure", "Question", MB_YESNO); if (res == MB_YES) ...
Af andre standart dialog bokse kan der nævnes:
CFileDialog
CFontDialog
CColorDialog
CPageSetupDialog
CPrintDialog
CFindReplaceDialog
Eksempel:
CString result; CFileDialog file(true); if (file.DoModal() == IDOK) { result = file.GetFileName(); }
Custom Dialogbokse
En ny custom dialogbox laves som en alm. boks og når at du skal kalde den, gøres det som med de indbyggede dialogbokse. Læg mærke til at det er ikke nødvendigt at kalde UpdateData(), det sker nemlig automatisk ved kald af OnOK()
.
Husk at gøre sådan at du kan få fat i din custom dialogs data enten med en getData()
function eller at gøre control variablen public.
Data til og fra dialog-controls
I MFC vil man typisk ikke aflæse dataene direkte fra objecterne. I stedet for vil man have en en variabel som man bruger til udveksle data mellem control og programkode. Dataene udveksles mellem program og dialogboks når at man kalder funktionen UpdateData(); denne funktion modtager en parameter i form af en boolean som fortæller om data skal fra program til dialogboks eller omvendt;
//Sender data fra variablen til dialogboksen UpdateData( false ); //Opdaterer variablen med data fra dialogboksen, dvs. brugerens input UpdateData( true )
Ændre stilen
Hvis du i programmet har brug for at ændre indstillinger for din dialogbox kan det gøres med ModifyStile (kan f.eks. kaldes fra OnInitDialog() ). (Følgende kode System-menuen til dialogboksen)
this->ModifyStyle(0, WS_SYSMENU);
Ændre control udfra ID
Når at man i VC++ laver programmer med dialogeditoren, kan man i sin kode bruge GetDlgItem()
til at hente en reference til et givent control. Læg mærke til at funktionene returnerer en pointer til et CWnd object.
Herefter kan man f.eks. skjule et object med:
GetDlgItem(IDC_HANDLE)->ShowWindow( false );
eller man kan disable det med
GetDlgItem(IDC_HANDLE)->EnableWindow( false );
Hvis at man skal bruge nogle specifikke funktioner for f.eks. en comboboks kan man lave en type cast på pointeren (her fjernes alle elementer fra boksen):
CComboBox *com = (CComboBox*) GetDlgItem(IDC_HANDLE); com->ResetContent();
Waiting Cursor
Hvis du har brug for at vise timeglasset så længe at en bestemt function kører kan du erklære en variabel af typen CWaitCursor
i starten af din funktion.
Formaterede strenge
Hvis du har brug for at formatere en streng, kan du bruge CString::Format()
som virker på nogen lunde samme måde som standart C funktionen sprintf()
.
int time,minut,sekund; CString tid; ... tid.Format("%d:%d:%d", time, minut, sekund);