Heiteres Abstürzen mit CCheckListBox :: OnGetCheckPosition
-
Hi Leute,
ich hab da folgendes Problem:
Ich habe ein Checklistbox gebastelt abgeleitet con CCheckListBox. Klappt alles tatdellos bis auf den Schönheitsfehler, daß das Kästchen zum anhacken ganz am Rand klebt und dem Text kein Abstand gegönnt wird. Nach einigem lesen in der MSDN kam ich zu dem Schluss OnGetCheckPosition müsste das ganze lösen können. Ich bekomms aber nicht hin. Sobald ich irgendeins der beiden CRect's verändere schmiert das teil ab. Microsoft bietet als Hilfe folgendes an:CRect rectMyCheckBox; rectMyCheckBox.top = rectItem.top -1; rectMyCheckBox.bottom = rectItem.bottom -1; rectMyCheckBox.right = rectItem.right -1; rectMyCheckBox.left = rectItem.right -1 - rectCheckBox.Width(); return rectMyCheckBox;
Schön ist, daß auch dieses Beispiel zu einem Absturz führt.
Bis jetzt habe ich nur den Abstand zwischen Checkbox und Text geschafft in dem ich DrawItem überschrieben habe.
void CUTCheckListBox::DrawItem(LPDRAWITEMSTRUCT lpDIS) { // TODO: Fügen Sie hier Ihren Meldungsbehandlungscode ein, und/oder benutzen Sie den Standard. lpDIS->rcItem.left+=5; CCheckListBox::DrawItem(lpDIS); }
Wäre toll wenn da jemand von Euch etwas wüsste und mir helfen kann. Ich habe recht wenig Lust die ganze Listbox von Hand zu zeichnen.
DingsBums
-
CRect rectMyCheckBox; CRect* change_size() { rectMyCheckBox.top = rectItem.top -1; rectMyCheckBox.bottom = rectItem.bottom -1; rectMyCheckBox.right = rectItem.right -1; rectMyCheckBox.left = rectItem.right -1 - rectCheckBox.Width(); return &rectMyCheckBox; }
Das Problem in den Beispiel ist wahrscheinlich das du das CRect in der funktion Erzeugst und beim zurückgeben das CRect zerstört ist!
-
Besten Dank für die prompte Hilfe. Aber hat leider nichts geholfen.
In der MFC_Datei winctrl3.cpp bei dieser Zeile
ASSERT((rectCheck == rectCheckBox) && (rectCheckBox.Size() == pChecklistState->m_sizeCheck));
ist die rectCheckBox.size unterschiedlich zu pChecklistState->m_sizeCheck
und dann gibts einen Assertfehler(was auch sonst)Irgendwo anders liegt da der Fehler. Die grosse Frage lautet nach wie vor: Wo? und was?
Sonst noch Ideen?