Click here to Skip to main content
Rate this: bad
good
Please Sign up or sign in to vote.
See more: WinXP Win2003 Vista C++ VB Windows , +
I want to create Tree view in client window of MDI application.
How to do so.

This is how my code look like.

Please Give in detail example as i am new to win32 programming.
 
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
     HACCEL   hAccel ;
     HWND     hwndFrame, hwndClient ;
     MSG      msg ;
     WNDCLASS wndclass ;
 
<pre>
 hInst = hInstance ;
 
      // Register the frame window class

 wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
 wndclass.lpfnWndProc   = FrameWndProc ;
 wndclass.cbClsExtra    = 0 ;
 wndclass.cbWndExtra    = 0 ;
 wndclass.hInstance     = hInstance ;
 wndclass.hIcon         = LoadIcon (hInstance, MAKEINTRESOURCE(IDI_ICON1)) ;
 wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
 wndclass.hbrBackground = (HBRUSH) (COLOR_APPWORKSPACE + 1) ;
 wndclass.lpszMenuName  = NULL ;
 wndclass.lpszClassName = szFrameClass ;
 
 if (!RegisterClass (&wndclass))
 {
      MessageBox (NULL, TEXT ("This program requires Windows NT!"),
                  szAppName, MB_ICONERROR) ;
      return 0 ;
 }
 
      // Register the Hello child window class

 wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
 wndclass.lpfnWndProc   = HelloWndProc ;
 wndclass.cbClsExtra    = 0 ;
 wndclass.cbWndExtra    = sizeof (HANDLE) ;
 wndclass.hInstance     = hInstance ;
 wndclass.hIcon         = LoadIcon (hInstance, MAKEINTRESOURCE(IDI_ICON2)) ;
 wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
 wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
 wndclass.lpszMenuName  = NULL ;
 wndclass.lpszClassName = szHelloClass ;
 
 RegisterClass (&wndclass) ;
 
      // Register the Rect child window class

 wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
 wndclass.lpfnWndProc   = RectWndProc ;
 wndclass.cbClsExtra    = 0 ;
 wndclass.cbWndExtra    = sizeof (HANDLE) ;
 wndclass.hInstance     = hInstance ;
 wndclass.hIcon         = LoadIcon (hInstance, MAKEINTRESOURCE(IDI_ICON3)) ;
 wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
 wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
 wndclass.lpszMenuName  = NULL ;
 wndclass.lpszClassName = szRectClass ;
 
 RegisterClass (&wndclass) ;
 
      // Obtain handles to three possible menus & submenus

 hMenuInit  = LoadMenu (hInstance, TEXT ("MdiMenuInit")) ;
 hMenuHello = LoadMenu (hInstance, TEXT ("MdiMenuHello")) ;
 
 hMenuInitWindow  = GetSubMenu (hMenuInit,   INIT_MENU_POS) ;
 hMenuHelloWindow = GetSubMenu (hMenuHello, HELLO_MENU_POS) ;
 
      // Load accelerator table

 hAccel = LoadAccelerators (hInstance, szAppName) ;
 
      // Create the frame window

 hwndFrame = CreateWindow (szFrameClass, TEXT ("Utility Application"),
                           WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN,
                           CW_USEDEFAULT, CW_USEDEFAULT,
                           CW_USEDEFAULT, CW_USEDEFAULT,
                           NULL, hMenuInit, hInstance, NULL) ;
 
 hwndClient = GetWindow (hwndFrame, GW_CHILD) ;
 
 ShowWindow (hwndFrame, iCmdShow) ;
 UpdateWindow (hwndFrame) ;
 
      // Enter the modified message loop

 while (GetMessage (&msg, NULL, 0, 0))
 {
      if (!TranslateMDISysAccel (hwndClient, &msg) &&
          !TranslateAccelerator (hwndFrame, hAccel, &msg))
      {
           TranslateMessage (&msg) ;
           DispatchMessage (&msg) ;
      }
 }
      // Clean up by deleting unattached menus

 DestroyMenu (hMenuHello) ;
 
 return msg.wParam ;
 }

LRESULT CALLBACK FrameWndProc (HWND hwnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
static HWND hwndClient ;
CLIENTCREATESTRUCT clientcreate ;
HWND hwndChild ;
MDICREATESTRUCT mdicreate ;
static HINSTANCE hInstance;
 
 switch (message)
 {
 case WM_CREATE:
 
      hInstance = ((LPCREATESTRUCT) lParam)-&gt;hInstance ;
        // Create the client window
      clientcreate.hWindowMenu  = hMenuInitWindow ;
      clientcreate.idFirstChild = IDM_FIRSTCHILD ;
 
      hwndClient = CreateWindow (TEXT ("MDICLIENT"), NULL,
                                 WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE,
 
                                 0, 0, 0, 0, hwnd, (HMENU) 1, hInst,
                                 (PSTR) &clientcreate) ;
      return 0 ;
 
 case WM_COMMAND:
      switch (LOWORD (wParam))
      {
      case IDM_FILE_NEWHELLO:       // Create a Hello child window

           mdicreate.szClass = szHelloClass ;
           mdicreate.szTitle = TEXT ("System Information") ;
           mdicreate.hOwner  = hInst ;
           mdicreate.x       = CW_USEDEFAULT ;
           mdicreate.y       = CW_USEDEFAULT ;
           mdicreate.cx      = CW_USEDEFAULT ;
           mdicreate.cy      = CW_USEDEFAULT ;
           mdicreate.style   = 0 ;
           mdicreate.lParam  = 0 ;
 
           hwndChild = (HWND) SendMessage (hwndClient,
                               WM_MDICREATE, 0,
                               (LPARAM) (LPMDICREATESTRUCT) &mdicreate) ;
           return 0 ;
 
      case IDM_FILE_CLOSE:          // Close the active window

           hwndChild = (HWND) SendMessage (hwndClient,
                                           WM_MDIGETACTIVE, 0, 0) ;
 
           if (SendMessage (hwndChild, WM_QUERYENDSESSION, 0, 0))
                SendMessage (hwndClient, WM_MDIDESTROY,
                             (WPARAM) hwndChild, 0) ;
           return 0 ;
 
      case IDM_APP_EXIT:            // Exit the program

           SendMessage (hwnd, WM_CLOSE, 0, 0) ;
           return 0 ;
 
           // messages for arranging windows

      case IDM_WINDOW_TILE:
           SendMessage (hwndClient, WM_MDITILE, 0, 0) ;
           return 0 ;
 
      case IDM_WINDOW_CASCADE:
           SendMessage (hwndClient, WM_MDICASCADE, 0, 0) ;
           return 0 ;
 
      case IDM_WINDOW_ARRANGE:
           SendMessage (hwndClient, WM_MDIICONARRANGE, 0, 0) ;
           return 0 ;
 
      case IDM_WINDOW_CLOSEALL:     // Attempt to close all children

           EnumChildWindows (hwndClient, CloseEnumProc, 0) ;
           return 0 ;
 
      default:             // Pass to active child...

           hwndChild = (HWND) SendMessage (hwndClient,
                                           WM_MDIGETACTIVE, 0, 0) ;
 
           if (IsWindow (hwndChild))
                SendMessage (hwndChild, WM_COMMAND, wParam, lParam) ;
 
           break ;        // ...and then to DefFrameProc
      }
      break ;
 
 case WM_QUERYENDSESSION:
 case WM_CLOSE:                      // Attempt to close all children

      SendMessage (hwnd, WM_COMMAND, IDM_WINDOW_CLOSEALL, 0) ;
 
      if (NULL != GetWindow (hwndClient, GW_CHILD))
           return 0 ;
 
      break ;   // i.e., call DefFrameProc 

 case WM_DESTROY:
      PostQuitMessage (0) ;
      return 0 ;
 }
      // Pass unprocessed messages to DefFrameProc (not DefWindowProc)

 return DefFrameProc (hwnd, hwndClient, message, wParam, lParam) ;

}

BOOL CALLBACK CloseEnumProc (HWND hwnd, LPARAM lParam)
{
if (GetWindow (hwnd, GW_OWNER)) // Check for icon title
return TRUE ;
 
 SendMessage (GetParent (hwnd), WM_MDIRESTORE, (WPARAM) hwnd, 0) ;
 
 if (!SendMessage (hwnd, WM_QUERYENDSESSION, 0, 0))
      return TRUE ;
 
 SendMessage (GetParent (hwnd), WM_MDIDESTROY, (WPARAM) hwnd, 0) ;
 return TRUE ;

}

LRESULT CALLBACK HelloWndProc (HWND hwnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
 
 static HWND     hwndClient, hwndFrame ;
 HDC             hdc ;
 HMENU           hMenu ;
 PHELLODATA      pHelloData ;
 PAINTSTRUCT     ps ;
 RECT            rect ;
 HWND            hwndTV;    // handle to tree-view control 

 switch (message)
 {
 case WM_CREATE:
      RECT            rect ;
      hwndTV = CreateWindowEx(0,
                        WC_TREEVIEW,
                        TEXT("Tree View"),
                        WS_VISIBLE | WS_CHILD | WS_BORDER | TVS_HASLINES, 
                        0, 
                        0, 
                        rect.right, 
                        rect.bottom,
                        hwnd, 
                        NULL,
                        (HINSTANCE) GetWindowLong (hwnd, GWL_HINSTANCE),
                        NULL);
           // Allocate memory for window private data

      pHelloData = (PHELLODATA) HeapAlloc (GetProcessHeap (),
                          HEAP_ZERO_MEMORY, sizeof (HELLODATA)) ;
 
           // Save some window handles

      hwndClient = GetParent (hwnd) ;
      hwndFrame  = GetParent (hwndClient) ;
 
      return 0 ;
 
 case WM_PAINT: // Paint the window

      hdc = BeginPaint (hwnd, &ps) ;
 
      GetClientRect (hwnd, &rect) ;
 
      DrawText (hdc, TEXT ("System information!"), -1, &rect,
                DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;
 
      EndPaint (hwnd, &ps) ;
      return 0 ;
 
 case WM_MDIACTIVATE:
      // Set the Init menu if losing focus

      if (lParam != (LPARAM) hwnd)
           SendMessage (hwndClient, WM_MDISETMENU, (WPARAM) hMenuInit,
                        (LPARAM) hMenuInitWindow) ;
 
      DrawMenuBar (hwndFrame) ;
      return 0 ;
 
 case WM_QUERYENDSESSION:
 case WM_CLOSE:
      if (IDOK != MessageBox (hwnd, TEXT ("OK to close window?"),
                              TEXT ("Hello"), 
                              MB_ICONQUESTION | MB_OKCANCEL))
           return 0 ;
 
      break ;   // i.e., call DefMDIChildProc

 case WM_DESTROY:
      pHelloData = (PHELLODATA) GetWindowLong (hwnd, 0) ;
      HeapFree (GetProcessHeap (), 0, pHelloData) ;
      return 0 ;
 }
      // Pass unprocessed message to DefMDIChildProc

 return DefMDIChildProc (hwnd, message, wParam, lParam) ;

}
Posted 10-Apr-12 4:28am
Rate this: bad
good
Please Sign up or sign in to vote.

Solution 1

You're making things difficult.

Use the Visual Studio Application Wizard to build a project with a CFormView or a CTreeView.

If you use the CFormview then you can drop a TreeControl into the dialog template associated with the view.

You can change the view type in a new project using the tab, 'Generated Classes'.

If you want to add this view to an existing project, then make a test project to get the wizard to create the appropriate source files and copy them over.
  Permalink  
Rate this: bad
good
Please Sign up or sign in to vote.

Solution 2

follow the code part:
switch(msg)
{
 case WM_CREATE:
  CreateWindowEx(0,L"MDICLIENT", L"", 
  WS_CHILD|WS_VISIBLE, 0,0,0,0, hWnd, (HMENU) ID_CLIENT_AREA, hInstance, NULL);
 CreateWindowEx(0,L"SysTreeView32", L"", 
  WS_CHILD|WS_VISIBLE, 0,0,0,0, hWnd, (HMENU) ID_GLOBALTREE, hInstance, NULL);
)
 break;
case WM_SIZE:
RECT rc;
GetClientRect(hWnd, &rc);
SetWindowPos(GetDlgItem(hWnd,ID_GLOBALTREE),0,0, 100, rc.bottom,SWP_SHOWWINDOW);
 
SetWindowPos(GetDlgItem(hWnd,ID_CLIENT_AREA),101,0, rc.right-100, rc.bottom,SWP_SHOWWINDOW);
break;
...
}

you can do lots of other tricks on re-sizing....
  Permalink  

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
0 OriginalGriff 490
1 Sergey Alexandrovich Kryukov 395
2 Maciej Los 285
3 ProgramFOX 265
4 CHill60 200
0 OriginalGriff 490
1 Sergey Alexandrovich Kryukov 395
2 Maciej Los 285
3 ProgramFOX 265
4 CHill60 200


Advertise | Privacy | Mobile
Web04 | 2.8.150331.1 | Last Updated 11 Apr 2012
Copyright © CodeProject, 1999-2015
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100