Owner Draw List Box
-
Hi,
ich habe eine Owner Draw Listbox erstellt. Jetzt hab ich das Problem das Problem das der folgende Code nicht mehr funktioniert obwohl er das tut wenn es sich um kein Owner Draw Element handelt. Er Crasht immer Bei ReleaseBuffer aber ich vermute das es eher am GetText liegt.
if(m_strCategory.Compare("Allgemein") == 0) { theApp.m_cfgMgr.m_arrGenernalPaths.RemoveAll(); for(int nItem = 0; nItem < nCount; nItem++) { m_listPaths.GetText(nItem,strItem.GetBuffer(MAX_PATH)); strItem.ReleaseBuffer(); theApp.m_cfgMgr.m_arrGenernalPaths.Add(strItem); } }
Weiß jemand ne Lösung ?
-
Habe leider keine Lösung aber dafür eine Frage
:
Warum rufen alle nach GetBuffer() ReleaseBuffer() auf?
In der MSDN steht doch, dass es nur notwendig ist, wenn man den Buffer verändert??!Ach ja, geht das bei dir überhaupt? Du released den Buffer und fügst den String dann deiner Box hinzu?
MfG,
Paul.
-
ReleaseBuffer wird benötigt den GetText verändert den Buffer ja. Afaik gibt Releasebuffer nur den Teil frei der nicht belegt ist und der rest bleibt als normaler CString zurück.
Release Buffer hat auch einen Parameter der die Länge angibt aufwelchen der String gekürtzt werden soll.
-
GetText verändert den String? Ich dachte der kopiert nur?
-
Paul_C. schrieb:
GetText verändert den String? Ich dachte der kopiert nur?
Ja, macht er doch auch - aus einem internen Speicher in den bereitgestellten Pufferbereich.
@XeXeS: Laut MSDN (CListBox::GetText()) gibt es davon auch eine Version, die einen CString für die Ausgabe nutzt.
-
Ich machs so weils so in der MSDN steht:
// Dump all of the items in the list box. #ifdef _DEBUG CString str, str2; int n; for (int i=0;i < pmyListBox->GetCount();i++) { n = pmyListBox->GetTextLen( i ); pmyListBox->GetText( i, str.GetBuffer(n) ); str.ReleaseBuffer(); str2.Format(_T("item %d: %s\r\n"), i, str.GetBuffer(0)); afxDump << str2; } #endif
-
Zählt denn ein Kopiervorgang schon als Veränderung, was die Benutzung von ReleaseBuffer() erfordert? Denn das mache ich normalerweise nie. Und mir ist nichts 'Komisches' aufgefallen.
-
Ich weiß wenn ich diese Version von GetText verwende gibt es keinen Crash aber dafür steht nur schwachsinn in dem String. ( wenn überhaupt ). Der Witz ist das alles Funktioniert wenn ich eine standard Listbox verwende und nicht die ownerdraw. Dabei hab ich nur visuelle aspekte verändert.
-
Hat keiner eine Lösung ? Das ganze funktioniert immer dann nicht wenn ich Owner Draw aktiviert habe ansonsten geht es. Ich hab schon den ganzen eigenen Quelltext für das Owner Draw auskommentiert aber nichts geht.
-
Gibt er denn eine spezielle Fehlermeldung aus? Wenn nicht, dann hatte ich mal das Problem, dass ich den Style nicht richtig angegeben hab.
Kannst du vielleicht mit dem Debugger herausfinden, an welcher Stelle der abstürzt?