C winapi TreeView knoten einfügen



  • hallo,

    mach gerde meine ersten gehversuche mit der winapi. kann aber der treeview keine neuen knoten anhängen, verwende code::blocks mit mingw

    #include <stdio.h>
    #include <windows.h>
    #include <commctrl.h>
    
    /*  Declare Windows procedure  */
    LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
    
    /*  Make the class name into a global variable  */
    char szClassName[ ] = "CodeBlocksWindowsApp";
    
    HTREEITEM AddItemToTree(HWND hwndTV, LPSTR lpszItem, HTREEITEM parent
    	, HTREEITEM brother
    ){
    TVITEM tvi;
    TVINSERTSTRUCT tvins;
    HTREEITEM hItem;
    
      tvi.mask = TVIF_TEXT;
      tvi.pszText = lpszItem;
      tvi.cchTextMax = lstrlen(lpszItem);
    
      // die Insert-Struktur wird vorbereitet
      tvins.item = tvi;
      if (brother) {
        tvins.hInsertAfter = brother;
      } else {
        tvins.hInsertAfter = TVI_FIRST;
      }
      if (parent==0) {
        tvins.hParent = TVI_ROOT;
      } else {
        tvins.hParent = parent;
      }
    
      // Nachricht zum Einbinden an das Kontrollelement versenden
      hItem = (HTREEITEM)SendMessage(hwndTV, TVM_INSERTITEM, 0, (LPARAM)&tvins);
      if(!hItem)
        printf("last error:%d",GetLastError());
      return hItem;
    }
    
    int WINAPI WinMain (HINSTANCE hThisInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR lpszArgument,
                         int nCmdShow)
    {
        HWND hwnd;               /* This is the handle for our window */
        MSG messages;            /* Here messages to the application are saved */
        WNDCLASSEX wincl;        /* Data structure for the windowclass */
    
        /* The Window structure */
        wincl.hInstance = hThisInstance;
        wincl.lpszClassName = szClassName;
        wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
        wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
        wincl.cbSize = sizeof (WNDCLASSEX);
    
        /* Use default icon and mouse-pointer */
        wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
        wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
        wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
        wincl.lpszMenuName = NULL;                 /* No menu */
        wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
        wincl.cbWndExtra = 0;                      /* structure or the window instance */
        /* Use Windows's default colour as the background of the window */
        wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
    
        /* Register the window class, and if it fails quit the program */
        if (!RegisterClassEx (&wincl))
            return 0;
    
        /* The class is registered, let's create the program*/
        hwnd = CreateWindowEx (
               0,                   /* Extended possibilites for variation */
               szClassName,         /* Classname */
               "Code::Blocks Template Windows App",       /* Title Text */
               WS_OVERLAPPEDWINDOW, /* default window */
               CW_USEDEFAULT,       /* Windows decides the position */
               CW_USEDEFAULT,       /* where the window ends up on the screen */
               544,                 /* The programs width */
               375,                 /* and height in pixels */
               HWND_DESKTOP,        /* The window is a child-window to desktop */
               NULL,                /* No menu */
               hThisInstance,       /* Program Instance handler */
               NULL                 /* No Window Creation data */
               );
    
        /* Make the window visible on the screen */
        ShowWindow(hwnd, nCmdShow);
    	//InitCommonControls();
    	HWND hTree = CreateWindowEx(0, szClassName , "Tree",
              WS_VISIBLE|WS_CHILD|WS_BORDER| TVS_HASLINES
              |TVS_LINESATROOT|TVS_HASBUTTONS,
              CW_USEDEFAULT, CW_USEDEFAULT, 100, 100,
              hwnd, 0, hThisInstance, 0
    	);
    
    	//SendMessage(hTree, TVM_DELETEITEM, 0, (LPARAM)TVI_ROOT);
    
    	AddItemToTree(hTree, "hello tree", 0,0);
    
        /* Run the message loop. It will run until GetMessage() returns 0 */
        while(GetMessage (&messages, NULL, 0, 0))
        {
            /* Translate virtual-key messages into character messages */
            TranslateMessage(&messages);
            /* Send message to WindowProcedure */
            DispatchMessage(&messages);
        }
    
        /* The program return-value is 0 - The value that PostQuitMessage() gave */
        return messages.wParam;
    }
    
    /*  This function is called by the Windows function DispatchMessage()  */
    
    LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        switch (message)                  /* handle the messages */
        {
            case WM_DESTROY:
                PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
                break;
            default:                      /* for messages that we don't deal with */
                return DefWindowProc (hwnd, message, wParam, lParam);
        }
    
        return 0;
    }
    

    hat jemand eine idee woran das liegen könnte bzw. ein gutes tut für winapi mit ansi c 😕

    hab das mal gefunden http://www.willemer.de/informatik/windows/wintree.htm#top aber das will iwie nicht so wie ich 😞

    lg winapiNoob



  • HINSTANCE hinstDll;
        hinstDll = LoadLibrary("comctl32.dll");
    
        HWND hTree = CreateWindowEx(0, WC_TREEVIEW , "Tree",
              WS_VISIBLE|WS_CHILD|WS_BORDER| TVS_HASLINES
              |TVS_LINESATROOT|TVS_HASBUTTONS,
              CW_USEDEFAULT, CW_USEDEFAULT, 100, 100,
              hwnd, 0, hThisInstance, 0
        );
    

    so sollts klappen 🙄


Anmelden zum Antworten