Avatar billede joeb Nybegynder
30. april 2003 - 20:49 Der er 17 kommentarer og
1 løsning

CIPAddressCtrl - hvordan bruger jeg den? (MFC)

Hvordan bruger jeg denne smarte control til ip-adresser? Det drejer sig nok om, at jeg behøver noget info om brugen af en sådan control, der skal benyttes i en modal dialog-box.

Jeg har forsøgt først at indsætte en IP-address editbox via resource-editor og tildelt den en handler via CIPAddressCtrl. Men der må mangle noget.
Avatar billede arne_v Ekspert
30. april 2003 - 20:55 #1
Det er en control som bruges til at lade brugeren indtaste en valid
IP adresse.

Se:
  http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmfc98/html/_mfc_cipaddressctrl.asp
Avatar billede joeb Nybegynder
30. april 2003 - 21:05 #2
jo - det var dér jeg i sin tid fandt den, men kan som sagt ikke få den til at virke!
Avatar billede arne_v Ekspert
30. april 2003 - 21:06 #3
Og der ikke til at opdrive ret meget om den på netttet.

Jeg har kun kunnet finde:
  http://www.tvdsb.on.ca/saunders/courses/ICS4M/windows/CommonControls/IPaddress.htm
Avatar billede joeb Nybegynder
30. april 2003 - 21:12 #4
Det er nemlig rigtigt! Der er ikke en disse at finde om den på nettet. Det forekommer lidt sært.
Avatar billede arne_v Ekspert
30. april 2003 - 21:20 #5
Der er en side om den i Jeff Prosises bog om MFC.
Avatar billede jpk Nybegynder
01. maj 2003 - 08:26 #6
Forudsat at du har defineret en membervariabel:
CIPAddressCtrl    m_IP;
kan du hente IP-adressen ud i en streng fx, således:

BYTE nField0, nField1, nField2, nField3;
m_IP.GetAddress(nField0, nField1, nField2, nField3);
CString strIP;
strIP.Format("%d.%d.%d.%d", nField0, nField1, nField2, nField3);
Avatar billede joeb Nybegynder
01. maj 2003 - 10:38 #7
Så er vi på vej :)
Jeg har forsøgt dette (uden held):
- oprettet dialogen i editoren
- Tildeler en controlvariabel (value-variabel var ikke mulig)
- Jeg prøver at indsætte en ip således inden jeg åbner boksen:
  dialog.m_dialogControl.SetAddress(nField0, nField1, nField2, nField3)
- i View-klassen åbner jeg boksen, men det virker ikke.

Jeg må have misforstået brugen af control-variablen.

Hvordan kan jeg bruge den?
Avatar billede jpk Nybegynder
01. maj 2003 - 10:42 #8
Du kan jo ikke indsætte noget i en kontrol der ikke er der!
Din m_dialogControl bliver ikke initialiseret før dialogen vises...
Avatar billede joeb Nybegynder
01. maj 2003 - 10:53 #9
Jamen er det her da ikke rigtigt? Hvordan kan jeg eller initialisere ipboksen med en addresse?

CMyDialog dialog;
int nRet = -1;
BYTE first=22, second=22, third=22, forth=22;
nRet = dialog.DoModal();
dialog.m_dialogControl.SetAddress(first, second, third, forth);

switch (nRet)
{
//udeladt her
};
Avatar billede jpk Nybegynder
01. maj 2003 - 11:37 #10
Når du kalder DoModal, vises dialogen og koden derefter udføres først når dialogen er lukket igen!

Du kan fx lave members på dialogen:
BYTE m_first, m_second, m_third, m_fourth;
og så:

CMyDialog dialog;
dialog.m_first = 22;
osv...
nRet = dialog.DoModal();


I din dialogs InitDialog funktion initialiserer du så kontrollens værdier:
m_dialogControl.SetAddress(m_first, m_second, m_third, m_fourth);
Avatar billede joeb Nybegynder
01. maj 2003 - 12:04 #11
Jeg er med på det du siger. Flg. er afprøvet uden succes:
De 4 membervariable i Dialog-klassen sættes før dialogen åbnes. OnInitDialog er sat ind og flg. indsat:
m_dialogControl.SetAddress(m_first, m_second, m_third, m_fourth);

Dernæst åbnes boksen med:
if (dialog.DoModal() == IDOK)
{
}

...bare for at teste om ip blev sat ind, men programmet går ned.
Avatar billede joeb Nybegynder
01. maj 2003 - 12:13 #12
Når jeg sætter breakpoint ved
m_dialogControl.SetAddress(m_first, m_second, m_third, m_fourth);

Får jeg følgende fejl:
ASSERT(::IsWindow(m_hWnd)); ::SendMessage(m_hWnd, IPM_SETADDRESS, 0, (LPARAM) MAKEIPADDRESS(nField0, nField1, nField2, nField3));

Og at m_hWnd fejler. (value 0, Expression cannot be evaluated)
Avatar billede jpk Nybegynder
01. maj 2003 - 12:27 #13
Kalder du m_dialogControl.SetAddress sidst i OnInitDialog?
(umiddelbart før return)
Avatar billede joeb Nybegynder
01. maj 2003 - 12:36 #14
:) Nej jeg gjorde ikke. Tak for hjælpen. Point givet.

Men hvorfor var det væsentligt?
Avatar billede jpk Nybegynder
01. maj 2003 - 12:42 #15
Indsatte du koden før CDialog::OnInitDialog();?
Avatar billede joeb Nybegynder
01. maj 2003 - 12:48 #16
ja jeg gjorde
Avatar billede jpk Nybegynder
01. maj 2003 - 12:55 #17
CDialog::OnInitDialog() kalder baseklassens (CDialog) OnInitDialog-metode, der initialiserer membervariabler. Derfor var m_dialogControl ikke initialiseret...
Avatar billede the_collector Novice
05. maj 2003 - 16:26 #18
Hvordan gik det forresten med http://www.eksperten.dk/spm/201007. Er der ikke snart lukketid?
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