Zu blöd für CListCtrl?



  • 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-Datei

    class 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. 👍


Anmelden zum Antworten