Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » [vc++6]dialog-objekten Felder eines Arrays zuordnen?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
15.02.2004, 12:29 Uhr
Luke



Hi all,
ist es möglich meinen Dialog-Objekten (Checkboxes) Felder eines Arrays zuzuordnen so das MS VC++ damit klar kommt?
Rein technisch geht das:

C++:
...
/* Deklarieren */
BOOL m_bchk[20];
...
/* zuordnen */
DDX_Check(pDX, IDC_CHECK0, m_bchk[0]);
DDX_Check(pDX, IDC_CHECK1, m_bchk[1]);
DDX_Check(pDX, IDC_CHECK2, m_bchk[2]);
DDX_Check(pDX, IDC_CHECK3, m_bchk[3]);
DDX_Check(pDX, IDC_CHECK4, m_bchk[4]);
DDX_Check(pDX, IDC_CHECK5, m_bchk[5]);
DDX_Check(pDX, IDC_CHECK6, m_bchk[6]);
...


Das funktioniert so ganz gut, nur leider kann ich den Klassen-Assistenden nicht mehr benutzen, weil der beim Öffnen sagt

Code:
Parser Fehler: ";" erwartet.
Eingabezeile: "BOOL m_bchk[20];"


Ich könnte das zwar alles per Hand machen, aber wozu hab ich denn diese schöne Hilfe?

Thx 4 help

Luke

Dieser Post wurde am 15.02.2004 um 12:30 Uhr von Luke editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
15.02.2004, 13:22 Uhr
mike
Pinguinhüpfer
(Operator)


Hi!
Leider weiß ich nicht, wie man das Problem genau löst.
Da die CheckBoxes eine fortlaufende Nummerierung haben, würde ich einfach das ganze durch eine Schleife schicken und ganz auf Membervariablen verzichten:

C++:
for(int i=FIRSTID; i < LASTID; i++)
{
   int sel = ((CButton*)GetDlgItem(i))->GetCheck();
}



mfg
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
15.02.2004, 16:09 Uhr
Luke



Gute Idee... nur leider wird mein Programm aufgrund eines Speicherfehlers geschlossen wenn ich das so mache

/€: Liegt wahrscheinlich daran, das die Werte der CheckBox-IDs nicht mit den Nummern übereinstimmen (nicht fortlaufend, beginnend bei 1001)

Dieser Post wurde am 15.02.2004 um 16:13 Uhr von Luke editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
15.02.2004, 16:18 Uhr
mike
Pinguinhüpfer
(Operator)


Auch nicht so schlimm. Dann erstell ein Array UINT myChecks[7] oder so. Das sollte dann funtzen.

mfg
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
15.02.2004, 17:15 Uhr
Luke



Und da soll ich die Werte reinspeichern?

Könnte Arbeit werden, ich habe 128 Checkboxes...
Wo finde ich denn die Werte außer in den Resource-Eigenschaften? (Copy&Paste?)

Dieser Post wurde am 15.02.2004 um 17:15 Uhr von Luke editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
15.02.2004, 20:33 Uhr
mike
Pinguinhüpfer
(Operator)


Ja. Die sind in der rc Datei. Wenn du unter "Suchen in Dateien" einen deiner Komboboxes eingibts, gelangst du dort hin - imho müsste aber das Öffnen der rc Datei auch gehen. Bei soviel Checkboxes würde es sich möglicherweise anbieten, die checkboxes händisch per Create zu erzeugen - oder du erstellst sie nacheinander mit dem Ressourceeditor, damit du eine lückenlose,fortlaufende ID erhälst.

mfg
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
15.02.2004, 21:43 Uhr
Luke



Hmm... da stehen nur die ID-Namen, die Werte finde ich nicht.
Die ID-Namen gehen von IDC_CHECK0 bis IDC_CHECK127. Das hat er auch automatisch gemacht. Die Werte dazu finde ich nur wenn ich mit Rechtsklick auf die Resourcen meines Dialogs --> Resourcensymbole auswählem, und die sind nicht fortlaufend.
In der RC-Datei steht nur sowas:

C++:
CONTROL         "",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | BS_FLAT |
                    WS_TABSTOP,110,9,8,8


Der Wert soll laut Resourcensymbol-Editor 1001 sein... ?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
16.02.2004, 12:27 Uhr
mike
Pinguinhüpfer
(Operator)


Hi!
Probier folgendes:

C++:
HWND hwnd = GetSafeHwnd();
CWnd* mywnd = CWnd::FromHandle(hwnd);
CWnd* pCtrl = NULL;
CWnd* pFirst = NULL;
CString str;

pFirst = mywnd->GetNextDlgTabItem(pCtrl,FALSE);
pCtrl = pFirst;
while(1)
{    
  if(pCtrl->GetStyle() & BS_AUTOCHECKBOX){
     pCtrl->GetWindowText(str);
     AfxMessageBox(str);
  }
  pCtrl = mywnd->GetNextDlgTabItem(pCtrl,FALSE);        
  if(pFirst == pCtrl) break;
}


Der Code ist noch nicht ganz dicht *g* Ich muss erst herausfinden, warum IsKindOf(RUNTIME_CLASS(CButton)) net funtzt - aber prinzipiell egal, weil kein anderes Control den Style BS_AUTOCHECKBOX hat
Es sollte also zu keinen Problemen kommen

mfg
--

Dieser Post wurde am 16.02.2004 um 12:28 Uhr von mike editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: