SendMessage und ListCtrl



  • Hallihallo!

    Um euch nicht lange rumzunerven und gerade zur Sache zu kommen: 😃

    Was ist der SendMessage-Parameter den ich übergeben muss damit ich ein Item in ein ListCtrl einfügen kann? Ich mache das von einem Thread aus und möchte auf meine Dialogelemente zugreifen. Bisher siehts so aus:

    UINT CFilterlistGeneratorDlg::ProcessThread(LPVOID pParam)
    {
    ...
    	CFilterlistGeneratorDlg*	pDlg   = (CFilterlistGeneratorDlg*) pParam;
    	HWND						hPS    = ::GetDlgItem(pDlg->m_hWnd, IDC_PROGRESS_STATUS);
    	HWND						hPSCO  = ::GetDlgItem(pDlg->m_hWnd, IDC_PROGRESS_STATUS_CO);
    	HWND						hSTA   = ::GetDlgItem(pDlg->m_hWnd, IDC_STATIC_STATUS);
    	HWND						hSTACA = ::GetDlgItem(pDlg->m_hWnd, IDC_STATIC_STATUS_CAPTION);
    	HWND						hLBX   = ::GetDlgItem(pDlg->m_hWnd, IDC_LISTCONTROL_OUTPUT);
    
        //Hier werden die Ranges meiner ProgressBars festgelegt, der SendMessage-Parameter ist PBM_SETRANGE
        ::SendMessage(hPS,	 PBM_SETRANGE, (WPARAM)0, (LPARAM) MAKELPARAM(0, maximalRecords));
    	::SendMessage(hPSCO, PBM_SETRANGE, (WPARAM)0, (LPARAM) MAKELPARAM(0, recordCount + 1));
    
    	currentFilename = AF.CStringFormat("%s\\UM_deb_Cells.txt", pDlg->m_strEditOutputLocation));
    
        //Hier werden die Statics beschrieben mittels SetWindowText
    	::SetWindowText(hSTACA, " UM_deb_Cells:");
    	::SetWindowText(hSTA,	currentFilename);
    
    ...
    
    	listString = listString.Format("Cells:      %s / %s", AF.AddApostrophe(outputCount), AF.AddApostrophe(foundCount));
        //Und hier hätte ich jetzt gerne statt dem normalen LB_ADDSTRING was ja für eine ListBox ist einen Parameter mit dem ich mein CListCtrl füllen kann
    	::SendMessage(hLBX, LB_ADDSTRING, 0, (LPARAM)listString);
    

    Ich frage mich sowieso wie man sowas findet. In der MSDN wird man nur fündig wenn man weiss dass LB_* für ListBoxes ist. Schnell LB im index eingeben und sich alles anschauen was man braucht. Wenn man hingegen keine Ahnung hat was für ein Parameter übergeben werden muss sucht man da irgendwie vergebens (zumindest ich) 😞

    Vielen Dank für die Aufmerksamkeit 🙂



  • Da schreibt man einen Thread und eine Minute später hat man genau das gefunden wonach man gesucht hat 🙄

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wceui/html/_wcesdk_receiving_and_dispatching_messages.asp

    Da ist eine Liste der Typen die man dem SendMessage geben kann, soweit ich das sehe brauche ich ::SendMessage(hLBX, LVM_INSERTITEM, 1, (LPARAM)listString);
    Das Problem ist aber, dass er mir folgenden Fehler beim kompilieren ausgibt: error C2440: 'type cast' : cannot convert from 'class CString' to 'long'

    Ich versteh schon was er meint aber wie soll ich denn einen Wert vom typ long eintragen? Ausserdem weiss ich nicht wo ich angeben soll in welches Column er das reinschreiben soll, ich glaub das hat was damit zu tun. Wie wäre es denn korrekt?

    PS: Warum ist das Forum eigentlich so viel oft? Ich hab manchmal das gefühl es ist fast so lange offline wie es online ist...


Anmelden zum Antworten