MiniGui 多窗口程序(一)

/*MINIGUi   sample mitwindows*/  
/*gcc -o metext metext.c   -lminigui -lpthread -lpng -ljpeg   -lmgext*/  
#include <stdio.h>  
#include <string.h>  
#include <minigui/common.h>  
#include <minigui/minigui.h>  
#include <minigui/gdi.h>  
#include <minigui/window.h>  
#include <minigui/control.h>  
#define IDC_BUTTON1                102   
#define IDC_BUTTON2                103   
#define IDC_BUTTON3                104   //按钮  
#define IDC_BUTTON4                105   //按钮  
#define IDC_BACK                       106   //按钮  
#define IDC_MAINMENU               107   //菜单  
  
static char *hello_str = "Hello MiniGUI!";  
  
static HWND hMainWnd;
  
static DLGTEMPLATE Dlgweihu= //DLGTEMPLATE 对话框模板  
{  
   WS_BORDER | WS_CAPTION,  
   WS_EX_NONE,  
   0, 0, 320, 240,  
   "系统维护",  
   0, 0,  
   2, NULL,  
   0  
};static CTRLDATA CtrlBack[] = //对话框中的组件数组  
{  
    {  
      "button",  
       WS_VISIBLE | WS_TABSTOP | WS_GROUP,   
       200, 150, 50, 30,  
       IDC_BACK,  
       "返回",  
       0  
   },   {  
      "button",  
       WS_VISIBLE | WS_TABSTOP | WS_GROUP,   
       20, 150, 50, 30,  
       IDC_MAINMENU,  
       "主菜单",  
       0  
   },  
    
};//=====================================================回调函数==DialogBoxProc3  
  
static int DialogBoxProc3 (HWND hDlg, int message, WPARAM wParam, LPARAM lParam)  
{  
     switch (message) {  
      case MSG_INITDIALOG:  
         return 1;  
      case MSG_COMMAND:  
      {  
      int id = LOWORD (wParam);  
      int code = HIWORD (wParam);  
switch (wParam)  
        {  
         case IDC_MAINMENU:  
            // if (id==IDC_MAINMENU && code==BN_CLICKED)  
    //        if (id == IDC_MAINMENU  /*&& code == BN_DBLCLK*/)  
            if (id==IDC_MAINMENU && code==BN_PUSHED)  
    {  
    SetWindowText(hDlg,"Hello world!");  
  }  
    break;  
         case IDC_BACK:  
         case IDOK:  
         case IDCANCEL:  
                     EndDialog (hDlg, wParam);//结束对话框  
           break;  
        }  
        
       break;  
}  
    }    
      return DefaultDialogProc (hDlg, message, wParam, lParam);  
}  


  
static void testDialogBox3 (HWND hWnd)  
{  
    Dlgweihu.controls = CtrlBack; /*dialog   controls */  
     
    DialogBoxIndirectParam (&Dlgweihu, hWnd, DialogBoxProc3, 0L);  
}  

static HWND hMainWnd1 = HWND_INVALID;  
  
static int InitOrderProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam)  
{  
    
   switch (message) {  
       case MSG_CREATE:                   
          CreateWindow (CTRL_BUTTON,  
                         "返回上级窗口",  
                         WS_CHILD | BS_PUSHBUTTON | BS_CHECKED | WS_VISIBLE,  
                         IDC_BUTTON3, /*button 3*/  
                         10, 70, 80, 20, hWnd, 0);               
  
          CreateWindow (CTRL_BUTTON,  
                         "到第三级窗口",  
                         WS_CHILD | BS_PUSHBUTTON | BS_CHECKED | WS_VISIBLE,  
                         IDC_BUTTON4, /*Button 4 */  
                         100, 70, 80, 20, hWnd, 0);    
      break;    
  
    case MSG_COMMAND:  
       {//-----------------Event  
           int id    = LOWORD(wParam);  
           int code = HIWORD(wParam);  
           char buffer [256];  
           sprintf (buffer, "ID: %d, Code: %x", id, code);  
           switch (id)  
           {  
               case (IDC_BUTTON3):               
                 SendMessage (hWnd, MSG_CLOSE, 0, 0);    
               break;                
               case (IDC_BUTTON4):  
      if(code == BN_CLICKED)  
               {   
                   testDialogBox3 (hWnd);                 
      }
               break;      
               default:  
               break;  
           }                        
       }  
       break;  
      
case MSG_DESTROY:  
           DestroyAllControls (hWnd);  
           hMainWnd1 = HWND_INVALID;  
return 0;    
  
case MSG_CLOSE:  
           DestroyMainWindow (hWnd);  
           MainWindowCleanup (hWnd);  
      return 0;  
   }     
   return DefaultMainWinProc (hWnd, message, wParam, lParam);  
}  

static void InitCreateInfoTWO (PMAINWINCREATE pCreateInfo)  
{  
   pCreateInfo->dwStyle = WS_CHILD | WS_BORDER | WS_VISIBLE|WS_CAPTION;  
   pCreateInfo->dwExStyle = WS_EX_NONE;  
   pCreateInfo->spCaption = "第二级窗口";  
   pCreateInfo->hMenu = 0;  
   pCreateInfo->hCursor = GetSystemCursor(1);  
   pCreateInfo->hIcon = 0;  
   pCreateInfo->MainWindowProc = InitOrderProc; 
   pCreateInfo->lx = 0;  
   pCreateInfo->ty = 0;  
   pCreateInfo->rx = 320;  
   pCreateInfo->by = 240;  
   pCreateInfo->iBkColor = COLOR_lightwhite;  
   pCreateInfo->dwAddData = 0;  
   pCreateInfo->hHosting = hMainWnd;  
}  

void orderdesk (HWND hwnd)  
{  
   MAINWINCREATE CreateInfo2; 
  
   InitCreateInfoTWO (&CreateInfo2);  
   hMainWnd1 = CreateMainWindow (&CreateInfo2);
  
   if (hMainWnd1 != HWND_INVALID)   
    {  
       ShowWindow (hMainWnd1, SW_SHOWNORMAL); 
       return;  
   }  
}   


static int HelloWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam)  
{  
    HDC hdc;  
    RECT rc;  
    switch (message) {        
  
  case MSG_CREATE:                                     
       CreateWindow (CTRL_BUTTON,//============CTRL_BUTTON 按钮  
                         "第二级窗口",  
                         WS_CHILD | BS_PUSHBUTTON | WS_VISIBLE,  
                         IDC_BUTTON1,
                         10, 70, 80, 20, hWnd, 0);             
  
       CreateWindow (CTRL_BUTTON,//============CTRL_BUTTON 按钮  
                         "关闭",  
                         WS_CHILD | BS_PUSHBUTTON | WS_VISIBLE,  
                         IDC_BUTTON2,
                         100, 70, 80, 20, hWnd, 0);  
           break;    
  
  case MSG_COMMAND:  
       {  
           int id    = LOWORD(wParam); 
           int code = HIWORD(wParam);  
          //printf ("Notification from buttons: ID: %d, Code: %x\n", id, code);            
      switch (id)  
           {  
                            
               case IDC_BUTTON1:  
                 printf ("opendisk: ID: %d, Code: %x\n", id, code);  
                 orderdesk(hWnd);  
                break;  
                              
               case IDC_BUTTON2:  
                 SendMessage (hWnd, MSG_CLOSE, 0, 0L);
                 break;                
              default:  
                break;  
           }  
           break;  
       }        
       break;          
  
   case MSG_PAINT:
                hdc = BeginPaint (hWnd);  
                GetClientRect (hWnd, &rc);  
                DrawText (hdc, hello_str, -1, &rc, DT_LEFT);  
                EndPaint (hWnd, hdc);  
               
            break;      
  
   case MSG_CLOSE:  
            DestroyMainWindow (hWnd);  
            PostQuitMessage (hWnd);  
            break;  
    }      
  
  
 return DefaultMainWinProc(hWnd, message, wParam, lParam);  
}  


static void InitCreateInfo (PMAINWINCREATE pCreateInfo)  
{  
     
    pCreateInfo->dwStyle = WS_CAPTION|WS_BORDER|WS_SYSMENU;  
    pCreateInfo->dwExStyle = WS_EX_NONE;  
    pCreateInfo->spCaption = "这是第一级窗口";  
    pCreateInfo->hMenu = 0;  
    pCreateInfo->hCursor = GetSystemCursor (0);  
    pCreateInfo->hIcon = 0;  
    pCreateInfo->MainWindowProc = HelloWinProc;
    pCreateInfo->lx = 0;   
    pCreateInfo->ty = 0;  
    pCreateInfo->rx = 320;  
    pCreateInfo->by = 240;  
    pCreateInfo->iBkColor = COLOR_lightwhite;   
    pCreateInfo->dwAddData = 0;  
    pCreateInfo->hHosting = HWND_DESKTOP;   
}


int MiniGUIMain (int argc, const char* argv[])  
{  
    MSG Msg;  
    MAINWINCREATE CreateInfo;  
  
 #ifdef _LITE_VERSION  
    SetDesktopRect(0, 0, 1024, 768);  
#endif  
      
      
    InitCreateInfo (&CreateInfo);    
  
    hMainWnd = CreateMainWindow (&CreateInfo);  
    if (hMainWnd == HWND_INVALID)  
        return -1;  
     
    ShowWindow(hMainWnd, SW_SHOWNORMAL);  
    printf ("The main window showed.\n");  


    while (GetMessage(&Msg, hMainWnd))  
  {  
          TranslateMessage(&Msg);  
          DispatchMessage(&Msg);  
        }      
  
 MainWindowThreadCleanup (hMainWnd);      
  
  
    return 0;  
   }  
#ifndef _LITE_VERSION  
  #include <minigui/dti.c>  
#endif  

你可能感兴趣的:(MiniGui 多窗口程序(一))