Listing 7: WinMain code for this example


int WINAPI WinMain (HINSTANCE hInstance,
    HINSTANCE hPrevInstance,LPSTR, int nCmdShow) {
    HACCEL   hAccel = 0; // Accelerator table
    HWND     hwndFrame, hwndClient ;
    MSG      msg ;
    tmdi_type_list_struct *child_list,*child_type;
    tmdi_frame_window *mdi_frame_window;
    ttest1_window_manager *test1_manager;
    ttest2_window_manager *test2_manager;

    child_list = new tmdi_type_list_struct;
    child_type = child_list;
    child_type->type_id = MDI_OPEN_1;
    child_type->the_class = szTest1Class;
    child_type->the_title = test1_title;
    child_type->next = new tmdi_type_list_struct;

    child_type = child_type->next;
    child_type->type_id = MDI_OPEN_2;
    child_type->the_class = szTest2Class;
    child_type->the_title = test2_title;
    child_type->next = 0;

    hInst = hInstance ;

    mdi_frame_window = new tmdi_frame_window (hInstance,
       (LRESULT CALLBACK)FrameWndProc,0,"","Test MDI",
       szFrameClass,0,child_list,SHOW_ABOUT);
    test1_manager = new ttest1_window_manager
    (hInstance,mdi_frame_window,0,szTest1Class);
    test2_manager = new ttest2_window_manager
    (hInstance,mdi_frame_window,0,szTest2Class);

    if (!hPrevInstance) {
       mdi_frame_window->register_window_class();
       test1_manager->register_window_class();
       test2_manager->register_window_class(); }

     mdi_frame_window->init_menu (hInst,"MainMenu",
     INIT_MENU_POS);
     test1_manager->init_menu(hInst,"Test1Menu",
     TEST1_MENU_CHILD_POS);
     test1_manager->set_frame_menu
     (mdi_frame_window->frame_menu,
           mdi_frame_window->frame_submenu);
     test2_manager->init_menu(hInst,"Test2Menu",
     TEST2_MENU_CHILD_POS);
     test2_manager->set_frame_menu
     (mdi_frame_window->frame_menu,
           mdi_frame_window->frame_submenu);

     // Create the frame window
     int width = GetSystemMetrics (SM_CXSCREEN);
     int height = GetSystemMetrics (SM_CYSCREEN);

     hwndFrame = CreateWindow (szFrameClass,
     "Test MDI System",
     WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN,
     0, 0,width, height,
     NULL,mdi_frame_window->frame_menu,
     hInstance, NULL) ;

     hwndClient = GetWindow (hwndFrame, GW_CHILD) ;

     ShowWindow (hwndFrame, nCmdShow) ;
     UpdateWindow (hwndFrame) ;

     while (GetMessage (&msg, NULL, 0, 0)) {
       if (!TranslateMDISysAccel (hwndClient,&msg)&&
       !TranslateAccelerator (hwndFrame,hAccel,
          &msg)){ TranslateMessage (&msg);
              DispatchMessage (&msg);}
      }
     delete test1_manager;
     delete test2_manager;
     delete mdi_frame_window;
     free_mdi_type_list_struct (child_list);
     return msg.wParam;}

//End of File