TREEVIEW - Custom (Sample)

From SEGGER Wiki
Jump to: navigation, search
TREEVIEW_Custom.c
TREEVIEW Custom.png
File(s) required
  • TREEVIEW_Custom.c
Runs in simulation Yes
Runs on target Yes
Download TREEVIEW_Custom.c

This sample demonstrates custom drawing of a TREEVIEW widget.

Demo

Code

/*********************************************************************
*                    SEGGER Microcontroller GmbH                     *
*        Solutions for real time microcontroller applications        *
**********************************************************************
*                                                                    *
*        (c) 1996 - 2020  SEGGER Microcontroller GmbH                *
*                                                                    *
*        Internet: www.segger.com    Support:  support@segger.com    *
*                                                                    *
**********************************************************************

** emWin V6.10 - Graphical user interface for embedded applications **
emWin is protected by international copyright laws.   Knowledge of the
source code may not be used to write a similar product.  This file may
only  be used  in accordance  with  a license  and should  not be  re-
distributed in any way. We appreciate your understanding and fairness.
----------------------------------------------------------------------
File        : TREEVIEW_Custom.c
Purpose     : Sample that demonstrates how to draw a TREEVIEW widget
              yourself using an OwnerDraw function in emWin.
Requirements: WindowManager - (x)
              MemoryDevices - ( )
              AntiAliasing  - ( )
              VNC-Server    - ( )
              PNG-Library   - ( )
              TrueTypeFonts - ( )
---------------------------END-OF-HEADER------------------------------
*/

#include "DIALOG.h"
#include <stdio.h>

/*********************************************************************
*
*       Defines
*
**********************************************************************
*/
#define PADDING 20

/*********************************************************************
*
*       Static data
*
**********************************************************************
*/
static GUI_CONST_STORAGE U32 _acFile[] = {
  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x43969694, 0x13C0C0BE, 0x25B2B2B1, 0x4F969695, 0x20ADACAB, 0x24ADACAB, 0x47A09F9E, 0x3A989796, 0x0EFFFFFF, 0x00000000, 0x00000000,
  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xA4102D2C, 0xF34A6B6A, 0xFB4D7473, 0xF62F6766, 0xF740605F, 0xFE456564, 0xFF3F7878, 0xFF2D5352, 0xFF405D5D, 0xFF2B6665, 0xB50A0606, 0x00000000,
  0x00000000, 0x00000000, 0x00000000, 0x67000000, 0xFF5ED2D1, 0xFF5BCCCC, 0xFF5FD7D6, 0xFF60D7D6, 0xFF5DD2D1, 0xFF5FD6D5, 0xFF62DEDD, 0xFF5CCFCE, 0xFF5ED5D4, 0xFF367E7D, 0xFFDBDADA, 0x3D000000,
  0x00000000, 0x00000000, 0x00000000, 0xF5306B6B, 0xFF62DEDD, 0xFF3A7272, 0xFF366869, 0xFF366969, 0xFF366868, 0xFF366969, 0xFF336161, 0xFF5BC9C9, 0xFF61DAD9, 0xFF818686, 0xFFF4F4F4, 0x4B000000,
  0x00000000, 0x00000000, 0x70000000, 0xFF60D7D6, 0xFF3E7F7F, 0xFF376A6B, 0xFF376B6B, 0xFF376B6B, 0xFF376B6A, 0xFF366868, 0xFF57BFBE, 0xFF5FD6D5, 0xFF377A7A, 0xFFE9E7E7, 0xFFF0F0F0, 0x49000000,
  0x00000000, 0x00000000, 0xF9337170, 0xFF5FD6D5, 0xFF62DCDB, 0xFF63DEDD, 0xFF63DEDD, 0xFF62DEDD, 0xFF62DEDD, 0xFF62DEDD, 0xFF60D7D6, 0xFF60DAD8, 0xFF585B5B, 0xFFEAEAEA, 0xFFEFEFEF, 0x48000000,
  0x00000000, 0x78020606, 0xFF60D7D6, 0xFF5FD5D4, 0xFF5FD5D4, 0xFF5FD5D4, 0xFF5FD5D4, 0xFF5FD5D4, 0xFF5FD5D4, 0xFF5FD5D4, 0xFF5FD6D5, 0xFF357575, 0xFFE2E1E1, 0xFFFFFFFF, 0xFFEEEEEE, 0x46000000,
  0x00000000, 0xFE357675, 0xFF5FD6D5, 0xFF5FD5D4, 0xFF5FD5D4, 0xFF5FD5D4, 0xFF5FD5D4, 0xFF5FD5D4, 0xFF5FD5D4, 0xFF5FD5D4, 0xFF5FD7D6, 0xFF5E605F, 0xFFCDCDCD, 0xFFEFEFEF, 0xFFEEEEEE, 0x45000000,
  0x7C060D0C, 0xFF61DAD9, 0xFF5FD5D4, 0xFF5FD5D4, 0xFF5FD5D4, 0xFF5FD5D4, 0xFF5FD5D4, 0xFF5FD5D4, 0xFF5FD5D4, 0xFF5FD6D5, 0xFF377473, 0xFF9C9B9B, 0xFFC6C6C6, 0xFFE6E6E6, 0xFFECECEC, 0x43000000,
  0xCB2B6161, 0xFF64E0DF, 0xFF62DCDA, 0xFF62DBDA, 0xFF62DBDA, 0xFF62DBDA, 0xFF62DBDA, 0xFF62DBDA, 0xFF62DBDA, 0xFF5FD8D7, 0xFF4F5151, 0xFFA1A1A1, 0xFFC9C9C9, 0xFFE0E0E0, 0xFFEBEBEB, 0x42000000,
  0x30000000, 0xA81D4141, 0xAB204747, 0xA9224A4A, 0xF1304D4D, 0xFF557170, 0xFF557070, 0xFF557170, 0xFF547171, 0xFF656969, 0xFFC3C3C3, 0xFFDADADA, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFE9E9E9, 0x41000000,
  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xD45A5A5A, 0xFFB9B9B9, 0xFFA3A3A3, 0xFFA4A4A4, 0xFFA5A5A5, 0xFFA2A2A2, 0xFFA1A1A1, 0xFFC3C3C3, 0xFFD2D2D2, 0xFFE4E4E4, 0xFFE9E9E9, 0x41000000,
  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xD8595959, 0xFFB0B0B0, 0xFF999999, 0xFF9A9A9A, 0xFF9A9A9A, 0xFF9A9A9A, 0xFF9D9D9D, 0xFFC4C4C4, 0xFFC6C6C6, 0xFFDEDEDE, 0xFFE7E7E7, 0x40000000,
  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xD6717171, 0xFFE7E7E7, 0xFFBBBBBB, 0xFFBBBBBB, 0xFFBBBBBB, 0xFFBCBCBC, 0xFFC7C7C7, 0xFFC8C8C8, 0xFFC8C8C8, 0xFFDCDCDC, 0xFFE5E5E5, 0x3E000000,
  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x77121212, 0xFFF0F0F0, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF999999, 0x0B000000,
  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x56000000, 0x97444444, 0x9A494949, 0x9A484848, 0x98474747, 0x98454545, 0x97444444, 0x96434343, 0x8C2D2D2D, 0x2A000000, 0x00000000
};

GUI_CONST_STORAGE GUI_BITMAP bmFile = {
  16, // xSize
  16, // ySize
  64, // BytesPerLine
  32, // BitsPerPixel
  (unsigned char *)_acFile,  // Pointer to picture data
  NULL,  // Pointer to palette
  GUI_DRAW_BMPM8888I
};

static GUI_CONST_STORAGE U32 _acFolderOpen[] = {
  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  0x1E6FAACC, 0x4471A9CE, 0x4471A9CE, 0x4471A9CE, 0x4471A9CE, 0x0A66B3CC, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  0x7072A6CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0x5772A7D0, 0x3373A5CD, 0x3373A5CD, 0x3373A5CD, 0x3373A5CD, 0x3373A5CD, 0x3373A5CD, 0x3373A5CD, 0x056699CC, 0x00000000, 0x00000000,
  0x7072A6CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0x1A76A7CE, 0x00000000, 0x00000000,
  0x7072A6CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xE572A7CF, 0xCC72A8D0, 0xCC72A8D0, 0xCC72A8D0, 0xCC72A8D0, 0xCC72A8D0, 0x156DAACE, 0x00000000, 0x00000000,
  0x7072A6CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xCE72A7CF, 0x9672A7CE, 0xD671A7CF, 0xD671A7CF, 0xD671A7CF, 0xD671A7CF, 0xD671A7CF, 0x9F72A7CF, 0x9971A7CF, 0x2575A5CF,
  0x7072A6CF, 0xFF72A7CF, 0x8571A7CF, 0x7772A7D0, 0x7772A7D0, 0x7772A7D0, 0x9872A6D0, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xF672A7CF, 0x0A66B3CC,
  0x7072A6CF, 0xC972A7CF, 0xD871A8CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xB273A8CE, 0x00000000,
  0x7072A6CF, 0x7A73A7CF, 0xFE72A8CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0x6673A8D0, 0x00000000,
  0x6C71A8D0, 0x9C72A7CE, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFE72A7CF, 0x1C76A4D1, 0x00000000,
  0x2873A6CC, 0xE671A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xD171A7CF, 0x00000000, 0x00000000,
  0x2174A2D1, 0xFF72A6CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0x8C73A8D0, 0x00000000, 0x00000000,
  0x25679FC8, 0x7670A9CD, 0x7670A9CD, 0x7670A9CD, 0x7670A9CD, 0x7670A9CD, 0x7670A9CD, 0x7670A9CD, 0x7670A9CD, 0x7670A9CD, 0x7670A9CD, 0x7670A9CD, 0x7670A9CD, 0x1B71B3D9, 0x00000000, 0x00000000,
  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000
};

GUI_CONST_STORAGE GUI_BITMAP bmFolderOpen = {
  16, // xSize
  16, // ySize
  64, // BytesPerLine
  32, // BitsPerPixel
  (unsigned char *)_acFolderOpen,  // Pointer to picture data
  NULL,  // Pointer to palette
  GUI_DRAW_BMPM8888I
};

static GUI_CONST_STORAGE U32 _acFolder[] = {
  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  0xC871A7CF, 0xCC72A8D0, 0xCC72A8D0, 0xCC72A8D0, 0xCC72A8D0, 0xB372A7CF, 0x056699CC, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xCC72A8D0, 0xBB73A6CF, 0xBB73A6CF, 0xBB73A6CF, 0xBB73A6CF, 0xBB73A6CF, 0xBB73A6CF, 0xBB73A6CF, 0xBB73A6CF, 0xB671A7CF,
  0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF,
  0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF,
  0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF,
  0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF,
  0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF,
  0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF,
  0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF,
  0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF,
  0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF, 0xFF72A7CF,
  0xC871A7CF, 0xCC72A8D0, 0xCC72A8D0, 0xCC72A8D0, 0xCC72A8D0, 0xCC72A8D0, 0xCC72A8D0, 0xCC72A8D0, 0xCC72A8D0, 0xCC72A8D0, 0xCC72A8D0, 0xCC72A8D0, 0xCC72A8D0, 0xCC72A8D0, 0xCC72A8D0, 0xC871A7CF,
  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
  0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000
};

GUI_CONST_STORAGE GUI_BITMAP bmFolder = {
  16, // xSize
  16, // ySize
  64, // BytesPerLine
  32, // BitsPerPixel
  (unsigned char *)_acFolder,  // Pointer to picture data
  NULL,  // Pointer to palette
  GUI_DRAW_BMPM8888I
};

/*********************************************************************
*
*       Static code
*
**********************************************************************
*/
/*********************************************************************
*
*       _OwnerDrawTreeview
*/
static int _OwnerDrawTreeview(const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo) {
  TREEVIEW_ITEM_DRAW_INFO * pDrawInfo;
  TREEVIEW_ITEM_INFO        Info;
  TREEVIEW_ITEM_Handle      hTreeItem;
  char                      acBuffer[32];

  switch (pDrawItemInfo->Cmd) {
  case WIDGET_ITEM_GET_XSIZE:
    //
    // Return x-size of item
    //
    return TREEVIEW_OwnerDraw(pDrawItemInfo);
  case WIDGET_ITEM_GET_YSIZE:
    //
    // Return y-size of item
    //
    return TREEVIEW_OwnerDraw(pDrawItemInfo);
  case WIDGET_ITEM_DRAW_BACKGROUND:
    //
    // Draw background
    //
    GUI_SetColor(GUI_WHITE);
    GUI_FillRect(pDrawItemInfo->x0, pDrawItemInfo->y0, pDrawItemInfo->x1, pDrawItemInfo->y1);
    return 0;
  case WIDGET_ITEM_DRAW_BITMAP:
    //
    // Get item handle
    //
    pDrawInfo = pDrawItemInfo->p;
    hTreeItem = pDrawInfo->hItem;
    TREEVIEW_ITEM_GetInfo(hTreeItem, &Info);
    //
    // Draw bitmap
    //
    if (!Info.IsNode) {
      GUI_DrawBitmap(&bmFile, pDrawItemInfo->x0 + ((Info.Level) * PADDING), pDrawItemInfo->y0);
    } else if (Info.IsExpanded) {
      GUI_DrawBitmap(&bmFolderOpen, pDrawItemInfo->x0 + ((Info.Level) * PADDING), pDrawItemInfo->y0);
    } else {
      GUI_DrawBitmap(&bmFolder, pDrawItemInfo->x0 + ((Info.Level) * PADDING), pDrawItemInfo->y0);
    }
    return 0;
  case WIDGET_ITEM_DRAW_TEXT:
    //
    // Get item handle
    //
    pDrawInfo = pDrawItemInfo->p;
    hTreeItem = pDrawInfo->hItem;
    TREEVIEW_ITEM_GetText(hTreeItem, acBuffer, sizeof(acBuffer));
    TREEVIEW_ITEM_GetInfo(hTreeItem, &Info);
    //
    // Draw selection
    //
    if (Info.HasRowSelect) {
      if (TREEVIEW_GetSel(pDrawItemInfo->hWin) == hTreeItem) {
        GUI_SetColor(GUI_BLUE);
        GUI_FillRect(pDrawItemInfo->x0, pDrawItemInfo->y0, pDrawItemInfo->x1, pDrawItemInfo->y1);
        GUI_SetColor(GUI_WHITE);
      } else {
        GUI_SetColor(GUI_BLACK);
      }
    } else {
      GUI_SetColor(GUI_BLACK);
    }
    //
    // Display text
    //
    GUI_SetTextMode(GUI_TM_TRANS);
    GUI_DispStringAt(acBuffer, pDrawItemInfo->x0 + ((Info.Level + 1) * PADDING), pDrawItemInfo->y0);
    return 0;
  case WIDGET_ITEM_DRAW_TICKS:
    //
    // Draw lines
    //
    return TREEVIEW_OwnerDraw(pDrawItemInfo);
  default:
    return TREEVIEW_OwnerDraw(pDrawItemInfo);
  }
}

/*********************************************************************
*
*       Public code
*
**********************************************************************
*/
/*********************************************************************
*
*       MainTask
*/
void MainTask(void) {
  TREEVIEW_Handle      hTree;
  TREEVIEW_ITEM_Handle hItem;
  TREEVIEW_ITEM_Handle hLastNode;
  TREEVIEW_ITEM_Handle hLastChild;
  int                  i;
  char                 acBuffer[32];

  //
  // Init GUI
  //
  GUI_Init();
  WM_SetDesktopColor(GUI_WHITE);
  //
  // Create TREEVIEW handle
  //
  hTree = TREEVIEW_CreateEx(10, 10, 200, 150, WM_HBKWIN, WM_CF_SHOW, TREEVIEW_CF_ROWSELECT | TREEVIEW_CF_AUTOSCROLLBAR_V, GUI_ID_TREEVIEW0);
  //
  // Add some nodes and leafs
  //
  sprintf(acBuffer, "Node 1");
  hItem = TREEVIEW_ITEM_Create(TREEVIEW_ITEM_TYPE_NODE, acBuffer, 0);
  TREEVIEW_AttachItem(hTree, hItem, 0, 0);
  hLastNode = hItem;
  sprintf(acBuffer, "Leaf 1");
  hItem = TREEVIEW_ITEM_Create(TREEVIEW_ITEM_TYPE_LEAF, acBuffer, 0);
  TREEVIEW_AttachItem(hTree, hItem, hLastNode, TREEVIEW_INSERT_FIRST_CHILD);
  for (i = 2; i <= 5; i++) {
    sprintf(acBuffer, "Node %d", i);
    hItem = TREEVIEW_ITEM_Create(TREEVIEW_ITEM_TYPE_NODE, acBuffer, 0);
    TREEVIEW_AttachItem(hTree, hItem, hLastNode, TREEVIEW_INSERT_BELOW);
    hLastNode = hItem;
    //
    sprintf(acBuffer, "Child node");
    hItem = TREEVIEW_ITEM_Create(TREEVIEW_ITEM_TYPE_NODE, acBuffer, 0);
    TREEVIEW_AttachItem(hTree, hItem, hLastNode, TREEVIEW_INSERT_FIRST_CHILD);
    hLastChild = hItem;
    //
    sprintf(acBuffer, "Leaf %d", i);
    hItem = TREEVIEW_ITEM_Create(TREEVIEW_ITEM_TYPE_LEAF, acBuffer, 0);
    TREEVIEW_AttachItem(hTree, hItem, hLastChild, TREEVIEW_INSERT_FIRST_CHILD);
  }
  //
  // Set OwnerDraw function
  //
  TREEVIEW_SetOwnerDraw(hTree, _OwnerDrawTreeview);

  while (1) {
    GUI_Delay(100);
  }
}

/*************************** End of file ****************************/