C TreeView
-
Hallo zusammen
ich stehe mal wieder auf dem schlauch,
nach den angaben von:
https://msdn.microsoft.com/en-us/library/windows/desktop/bb773409(v=vs.85).aspx
Habe ich versucht TreeView einzubinden soweit läst sich das programm ohne problem starten nur ist das fenster leer.
Ich bin dann davon ausgegangen das einfach keine daten in TreeView eingetragen sind.
Also suchte ich nach einer Möglichkeit daten einzufügen doch leider ohne wirklichen erfolg. Wäre klasse wenn mir da jemand mal ein Beispiel code rein wirft wie man das anstellt oder was sonst noch gehlt um TreeView richtig an zu zeigen.#include <windows.h> #include <CommCtrl.h> #include "resource1.h" #include "macros.h" typedef struct { TCHAR tchHeading[MAX_HEADING_LEN]; int tchLevel; } Heading; // Globale Variablen HINSTANCE hInst; HWND hFensterHaupt = NULL; HWND hFensterLinks = NULL; HWND hFensterRechts = NULL; HWND hFensterTreeViw = NULL; INT g_nOpen; INT g_nClosed; INT g_nDocument; Heading *g_rgDocHeadings; // Vordeklaration derr Funktionen ATOM RegisterKlasse(HINSTANCE); BOOL InitInstance(HINSTANCE, int); HWND CreateATreeView(HWND); BOOL InitTreeViewImageLists(HWND); BOOL InitTreeViewItems(HWND); HTREEITEM AddItemToTree(HWND, LPTSTR, int); LRESULT CALLBACK FensterHaupt(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK FensterLinks(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK FensterRechts(HWND, UINT, WPARAM, LPARAM); // Farben static INT iFensterHauptFarbe[3] = { 236, 233, 216 }; INT iFensterLinksFarbe[3] = { 255, 255, 255 }; INT iFensterRechtsFarbe[3] = { 255, 255, 255 }; // Zeichensätze LPCSTR szFensterHauptName = "AppName"; LPCSTR szFensterHauptTitel = "Meine erste Applikation"; int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { MSG msg; HWND hWnd; // Fenster Registrieren RegisterKlasse(hInstance); /* Datenstrucktur Initalisieren */ // Fenster Inizialisieren if (!InitInstance(hInstance, iCmdShow)) { return FALSE; } while (GetMessage(&msg, NULL, 0, 0) > 0) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } ATOM RegisterKlasse(HINSTANCE hInstance) { WNDCLASSEX wc; UINT ret_val; HBRUSH hBrush = NULL; // Hauptfenster hBrush = CreateSolidBrush(RGB(iFensterHauptFarbe[0], iFensterHauptFarbe[1], iFensterHauptFarbe[2])); wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = FensterHaupt; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hbrBackground = (HBRUSH)hBrush; wc.lpszClassName = szFensterHauptName; wc.lpszMenuName = szFensterHauptName; wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); ret_val = RegisterClassEx(&wc); if (ret_val == 0) { return 0; } // Linkes Fenster hBrush = CreateSolidBrush(RGB(iFensterLinksFarbe[0], iFensterLinksFarbe[1], iFensterLinksFarbe[2])); wc.lpfnWndProc = FensterLinks; wc.hbrBackground = (HBRUSH)hBrush; wc.lpszClassName = FENSTER_LINKS_KLASSE; ret_val = RegisterClassEx(&wc); if (ret_val == 0) { return 0; } // Rechtes Fenster hBrush = CreateSolidBrush(RGB(iFensterRechtsFarbe[0], iFensterRechtsFarbe[1], iFensterRechtsFarbe[2])); wc.lpfnWndProc = FensterRechts; wc.hbrBackground = (HBRUSH)hBrush; wc.lpszClassName = FENSTER_RECHTS_KLASSE; ret_val = RegisterClassEx(&wc); if (ret_val == 0) { return 0; } return ret_val; } BOOL InitInstance(HINSTANCE hInstance, int iCmdShow) { hInst = hInstance; // Store instance handle in our global variable // Mitte des Bildschirms berechnen UINT nx_size = GetSystemMetrics(SM_CXSCREEN); UINT ny_size = GetSystemMetrics(SM_CYSCREEN); UINT nx_pos = (nx_size - FENSTER_BREITE) / 2; UINT ny_pos = (ny_size - FENSTER_HOEHE) / 2; hFensterHaupt = CreateWindowEx(NULL, szFensterHauptName, szFensterHauptTitel, WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX, nx_pos, ny_pos, FENSTER_BREITE, FENSTER_HOEHE, NULL, NULL, hInstance, NULL); if (hFensterHaupt == NULL) { UINT ret_val; ret_val = GetLastError(); return FALSE; } ShowWindow(hFensterHaupt, iCmdShow); UpdateWindow(hFensterHaupt); return TRUE; } LRESULT CALLBACK FensterHaupt(HWND hWnd, UINT umsg, WPARAM wParam, LPARAM lParam) { RECT rect; PAINTSTRUCT ps; HDC hdc; static HBRUSH hFensterHauptBrush = NULL; static HCURSOR hcSizeEW = NULL; static int iFensterLinksBreite = 0; // Benutzt um die Breite des Linken fensters zu berechnen switch (umsg) { case WM_CREATE: { hcSizeEW = LoadCursor(NULL, IDC_SIZEWE); iFensterLinksBreite = FENSTER_LINKS_BREITE; GetClientRect(hWnd, &rect); // Linkes Fenster erstellen hFensterLinks = CreateWindowEx(WS_EX_CLIENTEDGE, FENSTER_LINKS_KLASSE, "", WS_CHILD | WS_VISIBLE | SS_SUNKEN, rect.left, rect.top + TOP_POS, FENSTER_LINKS_BREITE, (rect.bottom - rect.top) - (TOP_POS + BOTTOM_POS), hWnd, NULL, // Menu hInst, NULL); if (NULL != hFensterLinks) { ShowWindow(hFensterLinks, SW_SHOW); UpdateWindow(hFensterLinks); } // Rechtes Fenster erstellen hFensterRechts = CreateWindowEx(WS_EX_CLIENTEDGE, FENSTER_RECHTS_KLASSE, "", WS_CHILD | WS_VISIBLE | SS_SUNKEN, rect.left + FENSTER_LINKS_BREITE + TRENNER_BREITE, rect.top + TOP_POS, rect.right - (rect.left + FENSTER_LINKS_BREITE + TRENNER_BREITE), (rect.bottom - rect.top) - (TOP_POS + BOTTOM_POS), hWnd, NULL, hInst, NULL); if (NULL != hFensterRechts) { ShowWindow(hFensterRechts, SW_SHOW); UpdateWindow(hFensterRechts); } return 0; } case WM_PAINT: { hdc = BeginPaint(hWnd, &ps); GetClientRect(hWnd, &rect); hFensterHauptBrush = CreateSolidBrush(RGB(236, 233, 216)); // eigentlich iFensterHauptFarbe[0],iFensterHauptFarbe[1], iFensterHauptFarbe[2] FillRect(hdc, &rect, hFensterHauptBrush); DeleteObject(hFensterHauptBrush); EndPaint(hWnd, &ps); return 0; } case WM_DESTROY: { if (NULL != hFensterHauptBrush) { DeleteObject(hFensterHauptBrush); } PostQuitMessage(0); return 0; } // Wird Aufgerufen wenn sich am hauptfenster etwas an der grösse ändert case WM_SIZE: { GetClientRect(hWnd, &rect); // Linkes Fenster anpassen MoveWindow(hFensterLinks, rect.left, rect.top + TOP_POS, rect.left + (iFensterLinksBreite - BREITEN_JUSTIERUNG), (rect.bottom - (TOP_POS + BOTTOM_POS)), FALSE); // Rechtes Fenster Anpassen MoveWindow(hFensterRechts, rect.left + iFensterLinksBreite + BREITEN_JUSTIERUNG, rect.top + TOP_POS, rect.right - (iFensterLinksBreite + BREITEN_JUSTIERUNG), rect.bottom - (TOP_POS + BOTTOM_POS), FALSE); InvalidateRect(hWnd, &rect, TRUE); return 0; } default: { return DefWindowProc(hWnd, umsg, wParam, lParam); } } return DefWindowProc(hWnd, umsg, wParam, lParam); } LRESULT CALLBACK FensterLinks(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; RECT rect; static HBRUSH hFensterLinksBrush = NULL; switch (message) { case WM_CREATE: { CreateATreeView(hFensterLinks); ShowWindow(hFensterTreeViw, SW_SHOW); AddItemToTree(hFensterTreeViw, "hello tree", 1); UpdateWindow(hFensterLinks); UpdateWindow(hFensterTreeViw); break; } case WM_PAINT: { hdc = BeginPaint(hWnd, &ps); GetClientRect(hWnd, &rect); hFensterLinksBrush = CreateSolidBrush(RGB(255, 255, 255)); FillRect(hdc, &rect, hFensterLinksBrush); DeleteObject(hFensterLinksBrush); EndPaint(hWnd, &ps); break; } default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; } LRESULT CALLBACK FensterRechts(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; RECT rect; static HBRUSH hFensterRechtsBrush = NULL; switch (message) { case WM_CREATE: break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); GetClientRect(hWnd, &rect); hFensterRechtsBrush = CreateSolidBrush(RGB(255, 255, 255)); FillRect(hdc, &rect, hFensterRechtsBrush); DeleteObject(hFensterRechtsBrush); EndPaint(hWnd, &ps); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; } HWND CreateATreeView(HWND hwndParent) { RECT rcClient; HWND hwndTV; INITCOMMONCONTROLSEX commonCtrls; commonCtrls.dwSize = sizeof(commonCtrls); commonCtrls.dwICC = ICC_TREEVIEW_CLASSES; InitCommonControlsEx(&commonCtrls); GetClientRect(hwndParent, &rcClient); hwndTV = CreateWindowEx(0, WC_TREEVIEW, TEXT("Tree View"), WS_VISIBLE | WS_CHILD | WS_BORDER | TVS_HASLINES, 0, 0, rcClient.right, rcClient.bottom, hwndParent, (HMENU)ID_TREEVIEW, hInst, NULL); if (!InitTreeViewImageLists(hwndTV) || !InitTreeViewItem(hwndTV)) { DestroyWindow(hwndTV); return FALSE; } return hwndTV; } BOOL InitTreeViewImageLists(HWND hwndTV) { HIMAGELIST himl; // handle to image list HBITMAP hbmp; // handle to bitmap int CX_BITMAP = 16; int CY_BITMAP = 16; int NUM_BITMAPS = 3; // Create the image list. if ((himl = ImageList_Create(CX_BITMAP, CY_BITMAP, FALSE, NUM_BITMAPS, 0)) == NULL) { return FALSE; } // Add the open file, closed file, and document bitmaps. hbmp = LoadBitmap(hInst, MAKEINTRESOURCE(IDI_ICON3)); g_nOpen = ImageList_Add(himl, hbmp, (HBITMAP)NULL); DeleteObject(hbmp); hbmp = LoadBitmap(hInst, MAKEINTRESOURCE(IDI_ICON2)); g_nClosed = ImageList_Add(himl, hbmp, (HBITMAP)NULL); DeleteObject(hbmp); hbmp = LoadBitmap(hInst, MAKEINTRESOURCE(IDI_ICON1)); g_nDocument = ImageList_Add(himl, hbmp, (HBITMAP)NULL); DeleteObject(hbmp); // Fail if not all of the images were added. if (ImageList_GetImageCount(himl) < 3) { return FALSE; } // Associate the image list with the tree-view control. TreeView_SetImageList(hwndTV, himl, TVSIL_NORMAL); return TRUE; } HTREEITEM AddItemToTree(HWND hwndTV, LPTSTR lpszItem, int nLevel) { TVITEM tvi; TVINSERTSTRUCT tvins; static HTREEITEM hPrev = (HTREEITEM)TVI_FIRST; static HTREEITEM hPrevRootItem = NULL; static HTREEITEM hPrevLev2Item = NULL; HTREEITEM hti; tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM; // Set the text of the item tvi.iImage = lpszItem; tvi.iSelectedImage = sizeof(tvi.pszText) / sizeof(tvi.pszText[0]); // Assume the item is not a parent item, so give it a // document image. tvi.iImage = g_nDocument; tvi.iSelectedImage = g_nDocument; // Save the heading level in the item's application-defined // data area. tvi.lParam = (LPARAM)nLevel; tvins.item = tvi; tvins.hInsertAfter = hPrev; // Set the parent item based on the specified level. if (nLevel == 1) { tvins.hParent = TVI_ROOT; } else if (nLevel == 2) { tvins.hParent = hPrevRootItem; } else { tvins.hParent = hPrevLev2Item; } // Add the item to the tree-view control. hPrev = (HTREEITEM)SendMessage(hwndTV, TVM_INSERTITEM, 0, (LPARAM)(LPTVINSERTSTRUCT)&tvins); if (hPrev == NULL) { return NULL; } // Save the handle to the item if (nLevel == 1) { hPrevRootItem = hPrev; } else if (nLevel == 2) { hPrevLev2Item = hPrev; } // The new item is a child item. Give the parent item a // closed folder bitmap to indicate it now has child items. if (nLevel > 1) { hti = TreeView_GetParent(hwndTV, hPrev); tvi.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE; tvi.hItem = hti; tvi.iImage = g_nClosed; tvi.iSelectedImage = g_nClosed; TreeView_SetItem(hwndTV, &tvi); } return hPrev; } BOOL InitTreeViewItem(HWND hwndTV) { HTREEITEM hti; for (int i = 0; i < ARRAYSIZE(g_rgDocHeadings); i++) { // Add the item to the tree-view control. hti = AddItemToTree(hwndTV, g_rgDocHeadings[i].tchHeading, g_rgDocHeadings[i].tchLevel); if (hti == NULL) { return FALSE; } } return TRUE; }
-
- Falsches Forum
- nicht minimal reduziertes, kompilierbares Beispiel.
- einfach mal 400 Zeilen LOC ohne "Hier muss der Fehler sein".Du glaubst doch wohl nicht ernsthaft, dass sich das jemand auch nur länger als drei Sekunden ansieht.
-
Odin1985 schrieb:
Also suchte ich nach einer Möglichkeit daten einzufügen doch leider ohne wirklichen erfolg.
Was meinst du damit? In deinem geposteten Code werden Daten eingefügt. War das ein Versuch von dir und es funktioniert nicht (kenne die API nicht auswendig), oder verstehst du den Code einfach nicht?
Und wozu das ganze? Das ist schon recht komplex und die Win API ist sehr eingeschränkt, vor allem auch was TreeViews angeht. Wenn du GUI machen willst, nimm Qt oder GTK.
-
dachschaden schrieb:
- Falsches Forum
- nicht minimal reduziertes, kompilierbares Beispiel.
- einfach mal 400 Zeilen LOC ohne "Hier muss der Fehler sein".Du glaubst doch wohl nicht ernsthaft, dass sich das jemand auch nur länger als drei Sekunden ansieht.
warum ist ein in c geschriebenes programm in einem c forum falsch?
warum nicht kompikierbar? ich kann es ganz normal so ausführen... ah sehe grade die macros.h fehlt die kann ich aber nachreichen aber wenn das so schon zu viel ist....
ein "hier muss der fehler sein" tag kann ich schlecht einfügen da ich nicht weis wo der fehler liegt.
ich kann ja schlecht sagen welche komponenten ihr braucht um mir auf die sprünge zu helfen. nach der oben gelinkten seite müsste TreeView richtig eingebunden sein. Nur hab ich keinen plan wie ich daten einfügen soll.
Kann hier auch onch mal einzelne teile des obrigen codes posten nur welche?
WM_CREATE vom linken fenster teil?
oder die AddItemToTree funktion?
oder die CreateATreeView?
oder doch das InitTreeView?
muss ich eine bestimmte funktion auf bestimmte weise aufrufen und wenn wann???
-
Was meinst du damit? In deinem geposteten Code werden Daten eingefügt. War das ein Versuch von dir und es funktioniert nicht (kenne die API nicht auswendig), oder verstehst du den Code einfach nicht?
Und wozu das ganze? Das ist schon recht komplex und die Win API ist sehr eingeschränkt, vor allem auch was TreeViews angeht. Wenn du GUI machen willst, nimm Qt oder GTK.Ja es war ein versuch aber es wird nichts angezeigt beim ausführen aber es kommt auch kein fehler...
ach mir wurde mal irgendwann gesagt versuch dich an win API,
Qt ider GTK hmmm okay kann ich mir auch mal ansehen wenn mann das mittels c schreiben kann....
-
Odin1985 schrieb:
warum ist ein in c geschriebenes programm in einem c forum falsch?
Weil das hier das C-Subforum ist. Nicht das WinAPI-Forum. Meine Fresse, schauen sich die Leute heutzutage nicht mal um, bevor sie irgendwas posten?
Odin1985 schrieb:
ein "hier muss der fehler sein" tag kann ich schlecht einfügen da ich nicht weis wo der fehler liegt.
Dann finde es heraus. Das ist deine gottverdammte Aufgabe. Du willst Daten einfügen, das funktioniert nicht. Also finde heraus, wo es nicht funktioniert. Und wenn du das gefunden hast, dann schaust du dir die Dokumentation der Funktion an, die du verwenden willst, und wenn du die immer noch nicht verstehst, dann frag nach.
Aber einfach so einen "Funktioniert nicht, bitte helft mir!"-Post abzusetzen ... seit wann ist diese "Bitte putzt mir den Arsch ab"-Mentalität salonfähig? Ich erwarte, dass die Leute sich mit ihren Problemen befassen. Wenn du darauf keinen Bock hast und/oder du deinen eigenen Code nicht verstehst, dann hast du definitiv nichts beim Programmieren verloren.
-
Weil das hier das C-Subforum ist. Nicht das WinAPI-Forum. Meine Fresse, schauen sich die Leute heutzutage nicht mal um, bevor sie irgendwas posten?
Es tut mir leid wenn ich das C-Subforum falsch interpretiert habe dacht vom namen her kann hier alle fragen stellen die programmierungen in c betreffen egal ob jetzt gtk, win api oder sonst was verwendet wird.
Dann finde es heraus. Das ist deine gottverdammte Aufgabe. Du willst Daten einfügen, das funktioniert nicht. Also finde heraus, wo es nicht funktioniert. Und wenn du das gefunden hast, dann schaust du dir die Dokumentation der Funktion an, die du verwenden willst, und wenn du die immer noch nicht verstehst, dann frag nach.
laut dem was ich so im internet gefunden habe sollte es ja funktionieren. das tut es aber nicht. da ich aber weder fehler angaben bekomme noch eine visuelle ausgabe könnte das probelm beim aneigen des TreeView liegen oder auch beim einfügen der Daten, beides würde ja auf das gleiche hinaus laufen.
Laut doku soll man ja den oben beschriebenen code verwenden oder ne message senden. So und nun damit du dich wohler fühlst meine fragen:
Wiso wird meine Daten übergabe nicht übernommen oder warum wird mein TreeView nicht angezeigt?
Hoffe du fühlst dich jetzt wohler. Weiter bin ich jetzt aber immernoch nicht.Aber einfach so einen "Funktioniert nicht, bitte helft mir!"-Post abzusetzen ... seit wann ist diese "Bitte putzt mir den Arsch ab"-Mentalität salonfähig? Ich erwarte, dass die Leute sich mit ihren Problemen befassen. Wenn du darauf keinen Bock hast und/oder du deinen eigenen Code nicht verstehst, dann hast du definitiv nichts beim Programmieren verloren.
Wenn ich mich nicht damit befast hätte und schon mehrere tuts probiert hätte (von dennen das obrige mehr oder weniger das ist was am problemlosesten geklappt hatte) dann würde ich mich ja garnicht ans forum wenden.
-
Odin1985 schrieb:
Es tut mir leid wenn ich das C-Subforum falsch interpretiert habe dacht vom namen her kann hier alle fragen stellen die programmierungen in c betreffen egal ob jetzt gtk, win api oder sonst was verwendet wird.
Bevor du postest lies dir mal "Wohin mit meiner Frage?" durch! Denn hier bitte nur Fragen die Standard C betreffen posten. Wenn du Source Code postest, dann bitte mit Code-Tags versehen. Fragen zur Seriellen-Schnittstelle oder ähnliches haben nichts mit C zu tun. Bitte dies in den entsprechenden Foren (Linux, WinAPI, Rund Um Die Programmierung) posten. Danke!
Quelle. Schwarz auf Gelb.
Odin1985 schrieb:
laut dem was ich so im internet gefunden habe sollte es ja funktionieren. das tut es aber nicht. da ich aber weder fehler angaben bekomme noch eine visuelle ausgabe könnte das probelm beim aneigen des TreeView liegen oder auch beim einfügen der Daten, beides würde ja auf das gleiche hinaus laufen.
Ich versuche mal deinen Gedankengang nachzuvollziehen.
"Mann, ich habe überhaupt keine Debugging-Ausgaben oder irgendeine Möglichkeit, herauszufinden, wann was schief läuft. Und trotzdem bekommen ich keine Debugging-Ausgaben und habe keine Möglichkeit, herauszufinden, wann was schief läuft. Hey, lass mal Leute fragen, die mir sagen werden, dass ich Debugging-Ausgaben hinzufügen soll und Möglichkeiten, herausfinden, wann was schief läuft, damit ich dann Debugging-Ausgaben hinzufügen kann, und Möglichkeiten, herauszufinden, wann was schief läuft! Weil vorher hätte ich das nicht hinbekommen, ohne dass die mir das sagen!"
Mal ehrlich. Du hast keine einzige Ausgabe. Du erstellst da ein paar Fenster, die im Grunde nichts mit dem Füllen eines TreeViews zu tun haben. Warum ist der Code da? Ja, weil er zum Programm gehört, aber warum sehe ich das? Hat das was mit deinem Problem zu tun? Nein, hat es nicht. Den Problem ist, dass du Inhalt hast und den nicht in ein TreeView bekommst, und da wäre dann der allererste Schritt, ein kleines Nebenprojekt zu bauen, dessen einziger Lebenszweck ist, das Füllen eines TreeViews nachzustellen, wie du's in deinem Programm machst. Und wenn das funktioniert, dann prüfst du, was du im Hauptprogramm anders machst - mit Debugging-Ausgaben. Und wenn das nicht funktioniert, dann frag bitte nach.
Einfach zu sagen "Laut Internet sollte das funktionieren" bringt dich nur dann weiter, wenn du verifiziert hast, dass dein übriger Code auch richtig ist. Dafür sind wir nicht da. Woanders ist das eine verdammt gut bezahlte Dienstleistung, Code auf Richtigkeit zu überprüfen.
Odin1985 schrieb:
Hoffe du fühlst dich jetzt wohler. Weiter bin ich jetzt aber immernoch nicht.
Du willst, dass wir dir helfen. OK. Dann mach es einfach, uns dir zu helfen. Mit einem 400-LOC-Schlachtschiff und dieser verdammten Diskussion, dass du den Fehler nicht finden kannst, obwohl du dem Code nach nicht mal versucht hast, den Fehler zu suchen, machst du es uns nicht einfacher. Im Gegenteil.
-
Warum reagierst du eigentlich immer so ??? wenn dir fragen aus dem forum auf den senkel gehen lass es doch sie zu lesen.
Du versuchst mir scheinbar mitzuteilen das ich den code überprüfen soll, dann sag doch auch am besten wie...
da ja keine negative rückmeldung kommt, und ich den code von der msdn seite habe gehe ich davon aus das er wohl weitestgehend richtig seien sollte. das erstellen des fensters und der childs mittels winapi klappt ja ohne problem und es passiert auch genau was passieren soll. Lediglich der TreeView Teil läuft nicht rund, und nun da ja scheinbar die bisherige frage die falsche zu sein scheind eine neue:
Wie suche ich am besten den fehler?
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C (alle ISO-Standards) in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Ich finde dachschadens Reaktion ganz ok. Odin, wenn du ein wenig durch dieses Forum gelesen hättest, würdest du sehen, dass viele Frischlinge sehr oft dieselben dummen Fragen stellen und sich vorher auch nicht mit dem Forum befassen um zumindest dann die Frage richtig zu stellen.
Diesen Fehler hast du auch gemacht und damit nicht unbedingt gezeigt, dass du bereit warst, zunächst etwas Eigeninitiative in dein Projekt zu investieren.
Zur Fehlersuche: Ich hatte erst gehofft, du verarscht uns mit dieser Frage. Wofür kann man denn Rückgabewerte von einer Funktion bekommen? Und du hast print Funktionen. Was könnte man mit diesen beiden Bausteinen bloss machen, um eine simple Diagnose durch zu führen?
Ich geb dir mal einen Tipp. Du prüfst nirgends in deinem Code, ob CreateATreeView überhaupt den richtigen Rückgabewert ausgibt. Ich hab mir deinen Code nicht genau angesehen, aber die Suchfunktion vom Browser hat mir zumindest das gezeigt.
-
Bierkorken schrieb:
Ich finde dachschadens Reaktion ganz ok. Odin, wenn du ein wenig durch dieses Forum gelesen hättest, würdest du sehen, dass viele Frischlinge sehr oft dieselben dummen Fragen stellen und sich vorher auch nicht mit dem Forum befassen um zumindest dann die Frage richtig zu stellen.
Hm mag ja sein das das so ist, wobei ich finde das es keine dummen fragen gibt, klar wenn ich in meinem beruf von lehrlingen manche fragen höre (welche ich auch immer wieder aufs neue zu hören bekomme) denke ich mir dann auch oh man bei dem was du machst solltest du das eigentlich wissen aber denoch begegne ich denen dann mit verständis und klare sie einfach erneut auf. machmal steht man halt einfach auf dem schlauch und die eigentlich einfachsten aufgaben scheinen warum auch immer unpberwindbar.
Diesen Fehler hast du auch gemacht und damit nicht unbedingt gezeigt, dass du bereit warst, zunächst etwas Eigeninitiative in dein Projekt zu investieren.
Nur weil man sich vielleicht nicht die mühe gemacht hat zu ermitteln ob man wirklich im rictigen forum ist heist das ja nicht das man nicht vorher schon nach sachen gegoogelt oder in foren gesucht hat nach dem problem. Im gegenteil ich hab nach sachen gesucht wo ich dachte daran könnte es liegen bzw nach anleitungen wie es funktioniert jedoch ohne ein erfolgreiches ergebnis. Okay ich geb zu es war vielleicht nicht das richtige wonach ich suchte aber da sich diese idee im kopf halt festgesetzt hat wendete ich mich ja an euch, um entweder eine antwort drauf zu bekommen wonach ich suchte oder einen anderen ansatz zu bekommen.
Zur Fehlersuche: Ich hatte erst gehofft, du verarscht uns mit dieser Frage. Wofür kann man denn Rückgabewerte von einer Funktion bekommen? Und du hast print Funktionen. Was könnte man mit diesen beiden Bausteinen bloss machen, um eine simple Diagnose durch zu führen?
Ich geb dir mal einen Tipp. Du prüfst nirgends in deinem Code, ob CreateATreeView überhaupt den richtigen Rückgabewert ausgibt. Ich hab mir deinen Code nicht genau angesehen, aber die Suchfunktion vom Browser hat mir zumindest das gezeigt.
Danke warum auch immer wollte mir das nicht einfallen das zu überprüfen hab jetzt halt mal geschaut ob es null zurück gibt oder etwas anderes und siehe da es ist null also wird wohl da was im argen liegen.
Werde nun mal kontrollieren was da so schief läuft und danach bei den anderen functionen auch.
-
hmmmm gibts genügend Beispiele im Netz, für anfang sollte reichen:
http://www.codeproject.com/Articles/3448/Using-TreeControl-TreeView-under-Win-API
http://www.songho.ca/misc/treeview/treeview.html
http://www.dsource.org/projects/tutorials/wiki/TreeViewExample
http://chgi.developpez.com/windows/treeview/
-
Odin1985 schrieb:
Hm mag ja sein das das so ist
Wenn man da den Takt rausfiltert, kommt raus: "Mir egal, was du sagst, ich halte meine Meinung für richtig!". Kurz, du bist unbelehrbar.
Odin1985 schrieb:
wobei ich finde das es keine dummen fragen gibt
Stimmt, es gibt aber auch himmelschreiende Faulheit.
Odin1985 schrieb:
oh man bei dem was du machst solltest du das eigentlich wissen aber denoch begegne ich denen dann mit verständis und klare sie einfach erneut auf.
Falsches Verhalten, damit ermutigst du sie nur dazu, dir auch künftig auf den Zeiger zu gehen.
Du willst, dass sie lernen, sich den Scheiß selbstständig anzueignen. Früher hat man sich das in Studien teuer erkauft, jetzt haben wir Suchmaschinen, Foren, FAQs, Wikipedia, mit der sich auch der letzte Hilfsarbeiter schlau machen kann, und das einzige, was man noch mitbringen muss, ist die Initiative, sein Gehirn für 5 Minuten zu bemühen.Ist den meisten aber viel zu viel Arbeit. Stattdessen postet man dann lieber 400 LOC und hofft einfach mal, dass es einen Penner gibt, der blöd genug ist, einem den Job zu machen. Und dann finden sich auch genug blöde Penner, die meinen, man solle nett zu Neulingen sein. Nein. Soll man nicht. Sonst wird der Leidensdruck nie hoch genug. Daraus gibt es dann zwei Ausgänge:
1. Der Neuling merkt, dass das Feld nichts für ihn ist, und gibt auf - damit ist allen geholfen, er muss sich das Feld nicht mehr antun, und ich habe meine Ruh'.
2. Der Neuling merkt, dass seine Zeit nicht wertvoller ist als die Zeit anderer, lernt zu lernen, und postet in der Zukunft interessantere Fragen, an der auch andere Leute lernen können. Und wieder hab' ich meine Ruh'.Odin1985 schrieb:
machmal steht man halt einfach auf dem schlauch und die eigentlich einfachsten aufgaben scheinen warum auch immer unpberwindbar.
Und genau das ist bei dir nicht der Fall. Versuch nicht mal, dich zu verteidigen. Es ist evident.
Du hast dir nicht mal die Mühe gemacht, zu versuchen zu verstehen, was der Code tut. Klar, du hast nach "Tutorials" gesucht, aber sobald was falsch lief, hast du nicht versucht, rauszufinden, woran es harkt, sondern hast einfach nach einer anderen Lösung geschaut. Nein, dein Code kann ja nicht fehlerhaft sein, das ist vollkommen ausgeschlossen, du hast ihn ja schließlich nur modifiziert, damit er auf deinen Verwendungszweck passt.
Und dann bin ich der Arsch.
Odin1985 schrieb:
Nur weil man sich vielleicht nicht die mühe gemacht hat zu ermitteln ob man wirklich im rictigen forum ist heist das ja nicht das man nicht vorher schon nach sachen gegoogelt oder in foren gesucht hat nach dem problem.
So, jetzt denkt mal ein bisschen nach. Ich sehe jemanden, der:
- erst mal Massen von mitunter nicht kompilierbarem, nichts mit dem grundlegenden Problem zu tun habenden Code postet.
- kein Indiz hinterlässt, dass er sich das Problem für 5 Minuten anschaut (vollkommen unabhängig davon, ob du das auch wirklich getan hast - und in der Regel erkennt man mit ein bisschen Erfahrung sehr gut, ob jemand überhaupt nicht gesucht hat oder nur mit den falschen Schlüsselwörtern gesucht hat. Ersteres ist Faulheit, letzteres kann man einfach korrigieren, indem man die Schlüsselwörter ändert).Ich seh nicht, was du bereits gemacht hast. Ich kann nur aus deinem Post darauf schließen. Und wenn dein Post nicht zeigst, dass du Eigeninitiative zeigst, dann wird dir gesagt, dass du das tun sollst. Und wenn du dich weigerst, bekommst du entsprechende Reaktionen. Lern mal, außerhalb deines Horizonts zu denken.
-
Odin1985 in Zukunft genauere Fehlerbeschreibubg und in welche Zeile tritt fehler auf, sonst bekommst immer wieder "liebes romane" entgegen geschmiesen.
-
Debuggen schon mal versucht?