Click to See Complete Forum and Search --> : Tree-View Control


dit6a9
August 15th, 2004, 03:45 AM
I'm developing a simple Window application which tries to use TreeView Control (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/treeview/treeview.asp).

The main routines are (I don't write the full code because it would make the post a little bit unreadable):

hwndDialog = CreateDialog(GetModuleHandle(NULL), "DIALOG_0", hwnd, dialogProc);
CreateATreeView(hwndDialog, "");
...
...
HWND CreateATreeView(HWND hwndParent, LPSTR lpszFileName)
{
RECT rcClient;
HWND hwndTreeView;

InitCommonControls();
GetClientRect(hwndParent, &rcClient);

hwndTreeView = CreateWindowEx(
0,
WC_TREEVIEW,
"Tree View",
WS_VISIBLE | WS_CHILD | WS_BORDER | TVS_HASLINES,
0,
0,
rcClient.right,
rcClient.bottom,
hwndParent,
(HMENU)ID_TREEVIEW,
hInstance,
NULL);

return hwndTreeView;
}

BOOL InitTreeViewImageLists(HWND hwndTreeView)
{
HIMAGELIST himl;
HICON hIcon;

if ((himl = ImageList_Create(32, 32, FALSE, 2, 0)) == NULL)
return FALSE;

hIcon = LoadIcon(NULL, "folder.ico");
if (hIcon==NULL) return FALSE;
ImageList_AddIcon(himl, hIcon);

hIcon = LoadIcon(NULL, "folder_closed.ico");
if (hIcon==NULL) return FALSE;
ImageList_AddIcon(himl, hIcon);

TreeView_SetImageList(hwndTreeView, himl, TVSIL_NORMAL);

return TRUE;
}


I'm using Dev-C++ 5.0 beta 9 (4.9.9.0) with Mingw/GCC 3.3.1.

After including commctrl.h I tried to build de proyect and I got the following error:

Compilador: Default compiler
Building Makefile: "C:\Mis C\treeviewcontrol01\Makefile.win"
Ejecutando make clean
rm -f treeviewcontrol01.o wutil.o treeviewcontrol01_private.res treeviewcontrol01.exe
gcc.exe -c treeviewcontrol01.c -o treeviewcontrol01.o -I"C:/Dev-Cpp/include" -fexceptions -O3
gcc.exe -c wutil.c -o wutil.o -I"C:/Dev-Cpp/include" -fexceptions -O3
windres.exe -i treeviewcontrol01_private.rc -I rc -o treeviewcontrol01_private.res -O coff
gcc.exe treeviewcontrol01.o wutil.o treeviewcontrol01_private.res -o "treeviewcontrol01.exe" -L"C:/Dev-Cpp/lib" -mwindows
treeviewcontrol01.o(.text+0x261):treeviewcontrol01.c: undefined reference to `InitCommonControls@0'
treeviewcontrol01.o(.text+0x30d):treeviewcontrol01.c: undefined reference to `InitCommonControls@0'
treeviewcontrol01.o(.text+0x3e1):treeviewcontrol01.c: undefined reference to `ImageList_Create@20'
treeviewcontrol01.o(.text+0x421):treeviewcontrol01.c: undefined reference to `ImageList_ReplaceIcon@12'
treeviewcontrol01.o(.text+0x455):treeviewcontrol01.c: undefined reference to `ImageList_ReplaceIcon@12'
make.exe: *** [treeviewcontrol01.exe] Error 1
Ejecución Terminada


Somehow I concluded (I don't remember why, because I spent a lot of time trying and trying different things and reading tutorials and articles) that I had to add the comctl32.lib to the proyect. Was I right? I don't know. The first problem was that I had no idea about where I could find comctl32.lib. I searched my PC, just for trying, and since I got installed Microsoft Platform SDK (http://www.microsoft.com/msdownload/platformsdk/sdkupdate/), I found out that comctl32.lib was in the "\Microsoft SDK\Lib" folder.

After including comctl32.lib to my proyect I got the following errors:

Compilador: Default compiler
Building Makefile: "C:\Mis C\treeviewcontrol01\Makefile.win"
Ejecutando make clean
rm -f treeviewcontrol01.o wutil.o treeviewcontrol01_private.res treeviewcontrol01.exe
gcc.exe -c treeviewcontrol01.c -o treeviewcontrol01.o -I"C:/Dev-Cpp/include" -fexceptions -O3
gcc.exe -c wutil.c -o wutil.o -I"C:/Dev-Cpp/include" -fexceptions -O3
windres.exe -i treeviewcontrol01_private.rc -I rc -o treeviewcontrol01_private.res -O coff
gcc.exe treeviewcontrol01.o wutil.o treeviewcontrol01_private.res -o "treeviewcontrol01.exe" -L"C:/Dev-Cpp/lib" -mwindows "../../Archivos de programa/Microsoft SDK/Lib/ComCtl32.Lib"
treeviewcontrol01.o(.text+0x3e1):treeviewcontrol01.c: undefined reference to `ImageList_Create@20'
treeviewcontrol01.o(.text+0x421):treeviewcontrol01.c: undefined reference to `ImageList_ReplaceIcon@12'
treeviewcontrol01.o(.text+0x455):treeviewcontrol01.c: undefined reference to `ImageList_ReplaceIcon@12'
make.exe: *** [treeviewcontrol01.exe] Error 1
Ejecución Terminada


Then I said to myself that maybe I had to use the CommCtrl.h within the Platform SDK so I changed:

#include <commctrl.h>

and I wrote:

#include "..\..\Archivos de programa\Microsoft SDK\include\CommCtrl.h"

...and I got more and more errors:

Compilador: Default compiler
Building Makefile: "C:\Mis C\treeviewcontrol01\Makefile.win"
Ejecutando make clean
rm -f treeviewcontrol01.o wutil.o treeviewcontrol01_private.res treeviewcontrol01.exe
gcc.exe -c treeviewcontrol01.c -o treeviewcontrol01.o -I"C:/Dev-Cpp/include" -I"C:/Archivos de programa/Microsoft SDK/include" -fexceptions -O3
In file included from treeviewcontrol01.h:6,
from treeviewcontrol01.c:1:
../../Archivos de programa/Microsoft SDK/include/CommCtrl.h:352:1: warning: "CDN_FIRST" redefined
In file included from C:/Dev-Cpp/include/windows.h:86,
from treeviewcontrol01.h:4,
from treeviewcontrol01.c:1:
C:/Dev-Cpp/include/commdlg.h:27:1: warning: this is the location of the previous definition
In file included from treeviewcontrol01.h:6,
from treeviewcontrol01.c:1:
../../Archivos de programa/Microsoft SDK/include/CommCtrl.h:353:1: warning: "CDN_LAST" redefined
In file included from C:/Dev-Cpp/include/windows.h:86,
from treeviewcontrol01.h:4,
from treeviewcontrol01.c:1:
C:/Dev-Cpp/include/commdlg.h:28:1: warning: this is the location of the previous definition
In file included from treeviewcontrol01.h:6,
from treeviewcontrol01.c:1:
../../Archivos de programa/Microsoft SDK/include/CommCtrl.h:477:1: warning: "CLR_NONE" redefined
In file included from C:/Dev-Cpp/include/windows.h:52,
from treeviewcontrol01.h:4,
from treeviewcontrol01.c:1:
C:/Dev-Cpp/include/wingdi.h:772:1: warning: this is the location of the previous definition
In file included from treeviewcontrol01.h:6,
from treeviewcontrol01.c:1:
../../Archivos de programa/Microsoft SDK/include/CommCtrl.h:478:1: warning: "CLR_DEFAULT" redefined
In file included from C:/Dev-Cpp/include/windows.h:52,
from treeviewcontrol01.h:4,
from treeviewcontrol01.c:1:
C:/Dev-Cpp/include/wingdi.h:774:1: warning: this is the location of the previous definition
gcc.exe -c wutil.c -o wutil.o -I"C:/Dev-Cpp/include" -I"C:/Archivos de programa/Microsoft SDK/include" -fexceptions -O3
windres.exe -i treeviewcontrol01_private.rc -I rc -o treeviewcontrol01_private.res -O coff
gcc.exe treeviewcontrol01.o wutil.o treeviewcontrol01_private.res -o "treeviewcontrol01.exe" -L"C:/Dev-Cpp/lib" -mwindows "../../Archivos de programa/Microsoft SDK/Lib/ComCtl32.Lib"
treeviewcontrol01.o(.text+0x3e2):treeviewcontrol01.c: undefined reference to `_imp__ImageList_Create@20'
treeviewcontrol01.o(.text+0x427):treeviewcontrol01.c: undefined reference to `_imp__ImageList_ReplaceIcon@12'
treeviewcontrol01.o(.text+0x45c):treeviewcontrol01.c: undefined reference to `_imp__ImageList_ReplaceIcon@12'
make.exe: *** [treeviewcontrol01.exe] Error 1
Ejecución Terminada


What am I missing? Can't Tree-View control be used?

As you can see by the length of my post, I'm going a little bit crazy. Any help would be wellcomed. Thanks in advance.

pinzo
August 17th, 2004, 06:41 AM
If I remember well, gcc recomends not to link the *.lib files for DLLs but link to the DLLs directly. That is include the comctl32.dll into the project instead of comctl32.lib and see what happens...

JohnCz
August 18th, 2004, 03:31 PM
The main routines are (I don't write the full code because it would make the post a little bit unreadable):
It is unreadable already. I think you would be better off posting your project.

AlexL
August 19th, 2004, 11:44 AM
You can also use code tags. This makes it alot more readable.