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_FANHUI                 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 Ctrlweihu[] = //对话框中的组件数组
{
    {
      "button",
       WS_VISIBLE | WS_TABSTOP | WS_GROUP, 
       200, 150, 50, 30,
       IDC_FANHUI,
       "返回",
       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_FANHUI:
         case IDOK:
         case IDCANCEL:
                     EndDialog (hDlg, wParam);//结束对话框
           break;
        }
      
       break;
}
    }  
      return DefaultDialogProc (hDlg, message, wParam, lParam);
}
//=====================================================================

static void testDialogBox3 (HWND hWnd)
{
    Dlgweihu.controls = Ctrlweihu; /*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,//=========================按钮ID=IDC_BUTTON1
                         10, 70, 80, 20, hWnd, 0);           

     CreateWindow (CTRL_BUTTON,//============CTRL_BUTTON 按钮
                         "关闭",
                         WS_CHILD | BS_PUSHBUTTON | WS_VISIBLE,
                         IDC_BUTTON2,//=========================按钮ID=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;//======1   
}//========================================================================

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 多级窗口例子)