Zu blöd für CListCtrl?
-
Besitzerdaten steht auf FALSE;
Und der Absturz scheint durch InsertItem zu entstehen.
-
Stell mal dein Project online.
-
Unix-Tom schrieb:
Stell mal dein Project online.
Ich schätze mal, wenn ich das mach, kann ich mir meine Papiere abholen.

Na ja, O.K. Das eine ist ja nur ein kleines Dialogfeld welches eingeführt wird.
Also die Header-Dateiclass CZeitschrift : public CDialog { DECLARE_DYNAMIC(CZeitschrift) public: CZeitschrift(CWnd* pParent = NULL); // Standardkonstruktor virtual ~CZeitschrift(); // Dialogfelddaten enum { IDD = IDD_PROGRDLG }; protected: CBrush m_Brush; virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV-Unterstützung virtual BOOL OnInitDialog(void); afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); DECLARE_MESSAGE_MAP() public: CBrush dialog_brush; CBrush list_brush; afx_msg void OnBnClickedClose(); afx_msg void OnBnClickedTestbutton(); CString Datum; CStringArray strAEvent; CStringArray m_strTime; CStringArray m_strEvent; CStringArray m_strSender; CStringArray m_strStart; CStringArray m_strChannel; void FirstEintrag(void); CListCtrl m_lcProgramm; };Und die .cpp
// Zeitschrift.cpp : Implementierungsdatei // #include "stdafx.h" #include "Hauptprogramm.h" #include "HauptprogrammDlg.h" #include "Zeitschrift.h" #include ".\zeitschrift.h" #include <afxinet.h> // CZeitschrift-Dialogfeld IMPLEMENT_DYNAMIC(CZeitschrift, CDialog) CZeitschrift::CZeitschrift(CWnd* pParent /*=NULL*/) : CDialog(CZeitschrift::IDD, pParent) , Datum(_T("")) { dialog_brush.CreateSolidBrush(0x00E5E6E6); list_brush.CreateSolidBrush(RGB(255,255,255)); } CZeitschrift::~CZeitschrift() { } void CZeitschrift::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //DDX_Control(pDX, IDC_LPROG, m_lcProgramm); } BEGIN_MESSAGE_MAP(CZeitschrift, CDialog) ON_BN_CLICKED(IDC_CLOSE, OnBnClickedClose) ON_BN_CLICKED(IDC_TESTBUTTON, OnBnClickedTestbutton) ON_WM_CTLCOLOR() END_MESSAGE_MAP() // CZeitschrift-Meldungshandler void CZeitschrift::OnBnClickedClose() { OnOK(); } BOOL CZeitschrift::OnInitDialog(void) { CDialog::OnInitDialog(); // Hinzufügen des Menübefehls "Info..." zum Systemmenü. // IDM_ABOUTBOX muss sich im Bereich der Systembefehle befinden. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } m_lcProgramm.Create(WS_CHILD|WS_VISIBLE|LVS_REPORT|WS_BORDER, CRect(0,0,0,0), this, 0xff); m_lcProgramm.SetWindowPos(NULL, 10, 50, 502, 200, SWP_NOZORDER); m_lcProgramm.InsertColumn(0,"Uhrzeit",LVCFMT_LEFT,50,0); m_lcProgramm.InsertColumn(1,"Event",LVCFMT_LEFT,200,0); m_lcProgramm.InsertColumn(2,"Streamer",LVCFMT_LEFT,200,0); m_lcProgramm.InsertColumn(3,"ON AIR",LVCFMT_LEFT,50,0); m_Brush.CreateSolidBrush(0x00E5E6E6); return 0; } HBRUSH CZeitschrift::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); switch (nCtlColor) { case CTLCOLOR_EDIT: pDC->SetBkMode(TRANSPARENT); hbr = (HBRUSH)list_brush; // Setzt die Farbe für den Hintergrund break; case CTLCOLOR_LISTBOX: pDC->SetBkMode(TRANSPARENT); //pDC->SetDCBrushColor(0x00E5E6E6); hbr = (HBRUSH) list_brush; // Setzt die Farbe für den Hintergrund break; case CTLCOLOR_STATIC: pDC->SetBkMode(TRANSPARENT); hbr = (HBRUSH) TRANSPARENT; break; case CTLCOLOR_DLG: pDC->SetBkMode(TRANSPARENT); hbr = (HBRUSH) dialog_brush; break; default: pDC->SetBkMode(TRANSPARENT); hbr = (HBRUSH) dialog_brush; break; } return hbr; } void CZeitschrift::OnBnClickedTestbutton() { // Programm von Webseite holen CString Url = "http://irgendwas.com/auth.php"; Url += Datum; CString ReadTagesprog; ReadTagesprog = ((CHauptprogrammDlgnDlg*)GetParent())->GetHttpSource(Url); ReadTagesprog = "2015;EVENT1;Streamer1;112;Ja;|2015;EVENT2;Streamer2;0;Nein;|"; // String zerlegen CStringArray strATagesprogramm; int nAnzahlEvent = 0; int nAnzahlStreamer = 0; int i, j, old = 0,pos = 0; // String trennen while(-1 != (pos = ReadTagesprog.Find('|',pos))) { strAEvent.Add(ReadTagesprog.Mid(old,pos - old)); old = ++pos; nAnzahlEvent++; } int n_Trenner = 0; // Zeilenanzahl festlegen i = 0, j = 0; old = 0,pos = 0; while(j < strAEvent.GetSize()) { while( -1 != (pos = strAEvent[j].Find(';',pos))) { switch (n_Trenner) { case 0: m_strTime.Add(strAEvent[j].Mid(old, pos - old)); break; case 1: m_strEvent.Add(strAEvent[j].Mid(old, pos - old)); break; case 2: m_strSender.Add(strAEvent[j].Mid(old, pos - old)); break; case 3: m_strChannel.Add(strAEvent[j].Mid(old, pos - old)); break; case 4: m_strStart.Add(strAEvent[j].Mid(old, pos - old)); break; } old = ++pos; n_Trenner++; } j++; old = 0; pos = 0; n_Trenner = 0; } FirstEintrag(); } void CZeitschrift::FirstEintrag(void) { UpdateData(TRUE); int nItem; int nAnzahlEintraege = m_strTime.GetSize(); if( nAnzahlEintraege > 11) m_lcProgramm.SetWindowPos(NULL, 10, 50, 518, 200, SWP_NOZORDER); for(int i = 0; i < nAnzahlEintraege; i++) { nItem = m_lcProgramm.GetItemCount(); nItem = m_lcProgramm.InsertItem(nItem, m_strTime[i] ,-1); m_lcProgramm.SetItemText(nItem, 1, m_strEvent[i]); m_lcProgramm.SetItemText(nItem, 2, m_strSender[i]); m_lcProgramm.SetItemText(nItem, 3, m_strStart[i]); } }
-
Schon mal in letzter Zeit ein
Erstellen -> Bereinigen
Erstellen -> Alles neu erstellen
gemacht ?
-
isabeau schrieb:
Schon mal in letzter Zeit ein
Erstellen -> Bereinigen
Erstellen -> Alles neu erstellen
gemacht ?Aber sicher doch. War das erste!
-
Das mit dem Create scheint wohl doch nicht ganz übergekommen zu sein...
Bei dir braucht es kein create in der InitDialog, da bei Dialogen ja das control schon erzeugt wird.Du verwendest bei InsertItem CStringArrays. Vielleicht liegt da der Fehler.
CStrinArray operator[] liefert CObject* zurück und nicht LPCSTR!Versuch mal einen Cast auf das CObject nach CString.
-
nItem = m_lcProgramm.GetItemCount(); nItem = m_lcProgramm.InsertItem(nItem, LPCSTR(m_strTime[i]) ,-1); m_lcProgramm.SetItemText(nItem, 1, LPCSTR(m_strEvent[i])); m_lcProgramm.SetItemText(nItem, 2, LPCSTR(m_strSender[i])); m_lcProgramm.SetItemText(nItem, 3, LPCSTR(m_strStart[i]));Selber fehler

LPCTSTR klappt auch nicht.
-
Frank++ schrieb:
Das mit dem Create scheint wohl doch nicht ganz übergekommen zu sein...
Bei dir braucht es kein create in der InitDialog, da bei Dialogen ja das control schon erzeugt wird.Das ist ja das merkwürdige. Wenn ich die member-Variable von entferne und über Create ein ListCtrl erzeuge funktioniert InsertItem. Sogar ohne zu casten.
Mach ich ne Member-Varialble auf ein ListCtrl, dann schäppert es.Normal ist das nicht.
-
Versuche es mal mit
ElementAt(i)
-
Unix-Tom schrieb:
Versuche es mal mit
ElementAt(i)Leider auch nicht.

-
So, ich habe jetzt mal alles gelöscht, was irgendwie mit CListCtrl zu tun hat.
Alles von Anfang an eingefügt und Ihr glaubt es kaum es funktioniert.Aber fragt mich bitte nicht, warum es vorher nicht lief.

Keine Ahnung.Trotzdem DANKE an alle, die mir helfen wollten.
