thread-Funktion / Zugriff auf Members
-
Hi,
irgendwie komme ich hier nicht weiter. Hab soviel gelesen, dreht sich alles.
Folgendes: Hab ne statische Thread-Memberfunktion in meiner Viewklasse deklariert und mochte nur in der Definition dieser Funktion auf Membervariablen und auch auf Controls der Klasse zugreifen. Auf CEdits kann ich zugreifen, aber an das CListCtrl komm ich nicht ran. Soweit bin ich gekommen:UINT CsqalView::ThreadProc(LPVOID param) { int nItemCount; CString str = _T(""); CString find = _T(""); CsqalView* pView = (CsqalView*) param; //param = this pView->GetDlgItemText(IDC_EDIT2, find); //funzt //ab hier ist was falsch, denk ich pView->GetDlgItem(IDC_LIST1); CListCtrl* pListCtrl = (CListCtrl*) pView; nItemCount = pListCtrl->GetItemCount(); //Testausgaben ... CString test; test.Format("%s", nItemCount); pView->SetDlgItemText(IDC_EDIT1, test); //(NULL) pView->SetDlgItemText(IDC_EDIT1, "TEST"); //funzt
Hab auch keine Fehlermeldung nur in IDC_EDIT1 wird kein iItemCount ausgegeben, nur (null)
Was mach ich falsch? Rückgabe von GetDlgItem ist CWnd. Wie bring ich das ins Spiel. Hab schon soviel ausprobiert. Das Aufrufen des Threads und seine Beendigung klappt auch super - nur der Zugriff auf nicht statische Klassenelemente will nicht richtig, besonders die komplexeren Controlls wie CListCtrl.Hoffentlich kann mir jemand weiterhelfen
Danke
Gruss
koreson
-
koreson schrieb:
pView->GetDlgItem(IDC_LIST1);
Du lässt dir einen Zeiger auf dein List Control (Rückgabewert von GetDlgItem) geben, machst aber nichts damit.
CListCtrl* pListCtrl = (CListCtrl*) pView;
Und dann castest du deinen View-Zeiger auf einen CListCtrl-Zeiger. Deine View ist aber kein List Control.
Überdenk das nochmal.
-
'nabend,
danke für den pädagogischen Ansatz.
Jetzt bin ich hier angekommen:UINT CsqalView::ThreadProc(LPVOID param) { int nItemCount; CString str = _T(""); CString find = _T(""); CsqalView* pView = (CsqalView*) param; pView->GetDlgItemText(IDC_EDIT2, find); CListCtrl* pListCtrl; pListCtrl = (CListCtrl*) pView->GetDlgItem(IDC_LIST1); nItemCount = pListCtrl->GetItemCount(); CString test; test.Format("%s", nItemCount); pView->SetDlgItemText(IDC_EDIT1, test);
Lässt sich auch kompilieren. Stürzt aber mit Assertions fail wincore line 1000
ab.?????????????????????????
??????????????
Bitte noch einen Tipp
gruss
koreson
-
Alles klar, funzt jetzt.
Der letze Fehler, war intest.Format("%s", nItemCount);
zu finden. Natürlich %d - hat man ja auch schon oft gemacht.
Danke und Gute Nachtkoreson
-
Und jetzt kommt ein Thread und möchte die gleichen Steuerelemente benutzen. Was machst du dann?
Weiters hast du eine Workerthread. Für sowas gibt es Benutzeroberflächenthread. Sidn Klassen welche von CWinThread abgeleitet sind.