FlexGrid?
-
Servus,
kennt von Euch jmd das Buch VC++ in 21 Tagen?
und dort das Kapitel 9?
Hier geht es um ActiveX-Steuerelemente, insbesondere um ein FlexGrid.Ich wollte das jetzt mal (in einem Dialog) ausprobieren und habe folgendes gemacht:
1. Dialog erstellt, nach Anleitung ein MSFlexGrid eingepflanzt und Variable zugewiesen
2. Versucht die Werte mit setTextArray zu füllenDa ich hier schreibe, hat das natürlich nicht geklappt:
Ich bekomme bei der Abfrageindex = dialog.m_FlexGrid.GetCols();
schon die Fehlermeldung:
Debug Assertion Failed, winocc.cpp, Zeile 345
Dort findet man:
void AFX_CDECL CWnd::InvokeHelper(DISPID dwDispID, WORD wFlags, VARTYPE vtRet, void* pvRet, const BYTE* pbParamInfo, ...) { ASSERT(m_pCtrlSite != NULL); // not an OLE control (not yet, at least) ........
Ich habe in dem Buch nix weiter gefunden, warum das nicht klappen könnte!
Ich hoffe sehr, dass mit jmd. von Euch bei diesem (eigentlich trivialem!) Problem helfen kann!!!
...Zumindest war FlexGrid ja schon öfters hier Thema! (auch wenn noch keiner mein Problem hatte!)Vielen Dank!!!
Gruss, Tobias
-
Hat nix mit Flexgrid zu tun.
index = dialog.m_FlexGrid.GetCols();
funzt nunmal nicht, da es sich bei deinem Dialog höchstwahrscheinlich um einen modalen Dialog ausserhalb der Modal-Loop oder einen nicht erstellten nichtmodalen Dialog handelt.
-
ja, es ist ein Modaler Dialog, den ich mitdialog.DoModal() anzeigen lassen.
Aber was ist denn ein "Modal-Loop"? Bzw. wie bekomme ich da ein Dialog rein oder raus?
Sorry, wenn das sich "naiv" von mir anhört, aber ich hab davon noch nie was gehört...
Gruss, Tobias
-
Mach einfach mal so:
HWND hWnd = dialog.m_hWnd;Hier wirst Du sehen, dass NULL zurückgegeben wird. Das heisst also, jede Funktion ausserhalb des Dialoges, welche auf Fensterhandle innerhalb des Dialogs zugreift, schlägt fehl!
Modal-Loop ist die Schleife, die bei DoModal ausgeführt wird, und das Programm veranlasst, nichts zu tun, solange diese Loop nicht beendet ist.
-
schlägt dieser Aufruf auch fehl, wenn DoModal() noch nicht aufgerufen wurde?
Ich hab bei mir diesen Fall:CDialogInfo* dialog = new CDialogInfo();; int index = dialog->m_FlexGrid.GetCols(); dialog->m_Name = CString( "test" ); dialog->m_n = 13; dialog->m_Nummer= -1; dialog->DoModal();
und bis auf m_FlexGrid.GetCols(); funktioniert alles.
Was hab ich denn dann für eine Möglichkeit, Daten in das FlexGrid zu schreiben?
(Irgendwie muss das doch gehen...)
Gruss, Tobias[ Dieser Beitrag wurde am 26.03.2003 um 12:35 Uhr von tobis79211 editiert. ]
-
man übergebe dem dialog die daten nach der konstruktion mir verschiedenen SetWert() funktionen. Innerhalb von MeinDialog::OnInitDialog() initialisiere man die (hier endlich erstellten) Steuerelemente mit diesen Werten.
grüsse
-
ich test das heut abend mal!
Ich sag dann Bescheid, ob es geklappt hat!
Vielen Dank auch!
Gruss, Tobias
-
hm, also wenn du folgendes gemeint hast:
BOOL CDialogInfo::OnInitDialog() { m_FlexGrid.SetTextArray(3,"hallo"); // irgendwas schreiben... return CDialog::OnInitDialog(); }
dann klappt das immer noch nicht...
Oder hab ich was falsch verstanden?
-
so ähnlich,
BOOL CDialogInfo::OnInitDialog() { CDialog::OnInitDialog(); m_FlexGrid.SetTextArray(3,"hallo"); // irgendwas schreiben... return TRUE; }
lass dir die funktion am besten vom klassenassi machen.
grüsse
[ Dieser Beitrag wurde am 26.03.2003 um 22:19 Uhr von soUrcerer editiert. ]