09. september 2003 - 21:48Der er
17 kommentarer og 1 løsning
VC.NET / MFC - hvordan hulen fungerer dette
Jeg er gået fra BCB 4.0 til VC++.NET og er helt lost, jeg kan stadigvæk lave programmer ved at bruge windows api'en samt ANSI C++ men er der virkelig ingenting i VC++ til at smide f.eks. en knap på sit vindue (som i BCB hvor man lige kan "tegne" en knap) og hvad er MFC samt hvordan bruges det ?
Beklager de få point, men har lige brugt alle de andre, evt. kan besvareren få nogle flere på et senere tidspunkt såfremt vedkommende måtte ønske dette.
Har kun disse: ATL Project ATL Server Project ATL Server Web Service Makefile Project Managed C++ Application Managed C++ Class Library Managed C++ Empty Project Managed C++ Web Service MFC ActiveX Control MFC Application MFC DLL Win32 Project
Du skal lave et nyt projekt af typen "MFC Application". Application Type: - Single document = app med et framework der er forberedt til at håndtere et enkelt dokument ad gangen (fx et tekstbehandlingsprogram som Notepad) - Multiple documents = app med et framework der er forberedt til at håndtere flere dokumenter ad gangen (fx et tekstbehandlingsprogram som Word) - Dialog based = Et program hvor du har en dialog (form) som hovedvindue (fx som Windows Calculator)
MFC tilbyder et framework af typen document/view, hvilket betyder du kan holde dine data og dine views helt adskilt. Det giver muligheden for at tilføje/fjerne/ændre views helt uden indflydelse på din app's generelle struktur!
Hvis du vil hurtig igang, kan du prøve at lave en dialog baseret app, så vil du kunne se hvor let der kan tilføjes kontroller af forskellig salgs vha. drag/drop...
Smid fx en Edit Control på dialogen, højreklik og vælg Properties og giv den et id som fx IDC_MY_EDIT (eller lad det foreslåede id blive). Hold Ctrl nede og dobbeltklik på Edit kontrollen ogt du vil se en dialogboks. Her kan du lave en membervariabel for kontrollen. Vælg Category = Value og Variable type vil automatisk skifte til CString. Hvis du ønsker at bruge feltet til at vise andet end tekst (fx tal), kan du skifte typen til det passende. Indtast et variabelnavn (Variable name) fx m_MyEdit og klik Finish.
Nu kan du bruge denne variabel til at ændre teksten i din edit. Prøv fx at tilføje understående til din dialogs OnInitDialog metode lige efter linien "// TODO: Add extra initialization here"
m_MyEdit = "Hejsa"; UpdateData(false);
funktionen UpdateData sørger for, at alle dine members på dialogen bliver opdateret. Hvis du kalder den med "false" som argument, vil kontrollerne vise de data der er i variablerne. Hvis du derimod kalder den med "true" som argument, vil variablerne få værdierne der er indtastet i kontrollerne.
det smarte ved membervariabler er at du ikke behøver bruge kode som MyEdit->Caption = "Hejsa"; og heller ikke behøver bekymre dig om formatering til tekst. Hvis du fx laver en member af typen double, kan du bare skrive:
m_MyEdit = 123.456;
eller med type COleDateTime, kan du fx:
m_MyEdit = COleDateTime::GetCurrentTime();
Du kan også lave variablen af typen Control, så får du et objekt der repræsenterer, nå ja, kontrollen... Hvis du har laven din egen kontrol, som fx en specialisering af CEdit, kan du bare ændre typen af membervariablen og kontrollen bliver automatisk subclassed! Altså istedet for det genererede:
CEdit m_Edit;
kan du bruge:
CMyEdit m_Edit
Og det er alt hvad du skal gøre for at ændre kontrollens type...
Undskyld jeg ikke har svaret, har haft så pokkers travlt i mit studie. Men tak for svaret alle sammen, da jpk er den eneste der har oprettet et svar får han pointene, er nogen utilfredse med det må i lige skrive så kyler jeg nogle point efter jer også.
Har forresten lige et kort spørgsmål: Kan man ikke tilføje ting til en group box, så når man flytter group box'en så flyttes tingene i den samtidig ? (i en dialog baseret mfc)
Hvordan gør jeg hvis jeg nu vil have et edit felt hvor man kun kan indtaste 1 tegn og det skal kun være tal ? I BCB opsnappede jeg onKeyDown events og rodede med det der, men det kan jeg ik helt få til at virke (ingen onKeyDown event)
Hmm nu har jeg sat den til number, og det duer fint. Men hvis jeg kalder SetLimitText(1); i OnInitDialog, så duer det ikke, hvorfor ? Har prøvet med UpdataData efter SetLimitText, det hjalp ikke :/
// Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here m_NumberEdit.SetLimitText(1);
return TRUE; // return TRUE unless you set the focus to a control }
Ah det duer også nu, jeg havde bare sat den til det forkerte editfelt - ups :) Takker for hjælpen
Synes godt om
Ny brugerNybegynder
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.