minigui 多级窗口例子

http://blog.csdn.net/jia0511/article/details/8197897

  1302人阅读  评论(0)  收藏  举报
  分类:
 
[cpp]  view plain  copy
  1. /*MINIGUi   sample mitwindows*/  
  2. /*gcc -o metext metext.c   -lminigui -lpthread -lpng -ljpeg   -lmgext*/  
  3. #include <stdio.h>  
  4. #include <string.h>  
  5. #include <minigui/common.h>  
  6. #include <minigui/minigui.h>  
  7. #include <minigui/gdi.h>  
  8. #include <minigui/window.h>  
  9. #include <minigui/control.h>  
  10. #define IDC_BUTTON1                102   //按钮  
  11. #define IDC_BUTTON2                103   //按钮  
  12. #define IDC_BUTTON3                104   //按钮  
  13. #define IDC_BUTTON4                105   //按钮  
  14. #define IDC_FANHUI                 106   //按钮  
  15. #define IDC_MAINMENU               107   //菜单  
  16.   
  17. static char *hello_str = "Hello MiniGUI!";  
  18.   
  19. static HWND hMainWnd; //窗口句柄  
  20.   
  21. static DLGTEMPLATE Dlgweihu= //DLGTEMPLATE 对话框模板  
  22. {  
  23.    WS_BORDER | WS_CAPTION,  
  24.    WS_EX_NONE,  
  25.    0, 0, 320, 240,  
  26.    "系统维护",  
  27.    0, 0,  
  28.    2, NULL,  
  29.    0  
  30. };static CTRLDATA Ctrlweihu[] = //对话框中的组件数组  
  31. {  
  32.     {  
  33.       "button",  
  34.        WS_VISIBLE | WS_TABSTOP | WS_GROUP,   
  35.        200, 150, 50, 30,  
  36.        IDC_FANHUI,  
  37.        "返回",  
  38.        0  
  39.    },   {  
  40.       "button",  
  41.        WS_VISIBLE | WS_TABSTOP | WS_GROUP,   
  42.        20, 150, 50, 30,  
  43.        IDC_MAINMENU,  
  44.        "主菜单",  
  45.        0  
  46.    },  
  47.     
  48. };//=====================================================回调函数==DialogBoxProc3  
  49.   
  50. static int DialogBoxProc3 (HWND hDlg, int message, WPARAM wParam, LPARAM lParam)  
  51. {  
  52.      switch (message) {  
  53.       case MSG_INITDIALOG:  
  54.          return 1;  
  55.       case MSG_COMMAND:  
  56.       {  
  57.      int id = LOWORD (wParam);  
  58.      int code = HIWORD (wParam);  
  59. switch (wParam)  
  60.         {  
  61.          case IDC_MAINMENU:  
  62.             // if (id==IDC_MAINMENU && code==BN_CLICKED)  
  63.             if (id == IDC_MAINMENU && code == BN_DBLCLK)  
  64.             // if (id==IDC_MAINMENU && code==BN_PUSHED)  
  65.     {  
  66.      SetWindowText(hDlg,"Hello world!");  
  67.     }  
  68.    break;  
  69.          case IDC_FANHUI:  
  70.          case IDOK:  
  71.          case IDCANCEL:  
  72.                      EndDialog (hDlg, wParam);//结束对话框  
  73.            break;  
  74.         }  
  75.         
  76.        break;  
  77. }  
  78.     }    
  79.       return DefaultDialogProc (hDlg, message, wParam, lParam);  
  80. }  
  81. //=====================================================================  
  82.   
  83. static void testDialogBox3 (HWND hWnd)  
  84. {  
  85.     Dlgweihu.controls = Ctrlweihu; /*dialog   controls */  
  86.      
  87.     DialogBoxIndirectParam (&Dlgweihu, hWnd, DialogBoxProc3, 0L);  
  88. }  
  89. //下边是第二级窗口的代码******************************************************************  
  90.   
  91. static HWND hMainWnd1 = HWND_INVALID;  
  92.   
  93. static int InitOrderProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam)   //第二及处理消息  
  94. {  
  95.     
  96.    switch (message) {  
  97.        case MSG_CREATE:                   
  98.           CreateWindow (CTRL_BUTTON,  
  99.                          "返回上级窗口",  
  100.                          WS_CHILD | BS_PUSHBUTTON | BS_CHECKED | WS_VISIBLE,  
  101.                          IDC_BUTTON3, /*button 3*/  
  102.                          10, 70, 80, 20, hWnd, 0);               
  103.   
  104.     CreateWindow (CTRL_BUTTON,  
  105.                          "到第三级窗口",  
  106.                          WS_CHILD | BS_PUSHBUTTON | BS_CHECKED | WS_VISIBLE,  
  107.                          IDC_BUTTON4, /*Button 4 */  
  108.                          100, 70, 80, 20, hWnd, 0);    
  109.        break;    
  110.   
  111.     case MSG_COMMAND:  
  112.        {//-----------------Event  
  113.            int id    = LOWORD(wParam);  
  114.            int code = HIWORD(wParam);  
  115.            char buffer [256];  
  116.            sprintf (buffer, "ID: %d, Code: %x", id, code);  
  117.            switch (id)  
  118.            {  
  119.                case (IDC_BUTTON3):               
  120.                  SendMessage (hWnd, MSG_CLOSE, 0, 0);    
  121.                break;                
  122.                case (IDC_BUTTON4):  
  123.     if(code == BN_CLICKED)  
  124.   
  125.  {   
  126.                    testDialogBox3 (hWnd);                 
  127.      }  
  128.                break;      
  129.                default:  
  130.                break;  
  131.            }                        
  132.        }  
  133.        break;  
  134.       
  135. case MSG_DESTROY:  
  136.            DestroyAllControls (hWnd);  
  137.            hMainWnd1 = HWND_INVALID;  
  138. return 0;    
  139.   
  140. case MSG_CLOSE:  
  141.            DestroyMainWindow (hWnd);  
  142.            MainWindowCleanup (hWnd);  
  143.       return 0;  
  144.    }     
  145.    return DefaultMainWinProc (hWnd, message, wParam, lParam);  
  146. }  
  147. //=============================================================================  
  148.   
  149. static void InitCreateInfoTWO (PMAINWINCREATE pCreateInfo)  
  150. {  
  151.    pCreateInfo->dwStyle = WS_CHILD | WS_BORDER | WS_VISIBLE|WS_CAPTION;  
  152.    pCreateInfo->dwExStyle = WS_EX_NONE;  
  153.    pCreateInfo->spCaption = "第二级窗口";  
  154.    pCreateInfo->hMenu = 0;  
  155.    pCreateInfo->hCursor = GetSystemCursor(1);  
  156.    pCreateInfo->hIcon = 0;  
  157.    pCreateInfo->MainWindowProc = InitOrderProc; //窗体回调函数  
  158.    pCreateInfo->lx = 0;  
  159.    pCreateInfo->ty = 0;  
  160.    pCreateInfo->rx = 320;  
  161.    pCreateInfo->by = 240;  
  162.    pCreateInfo->iBkColor = COLOR_lightwhite;  
  163.    pCreateInfo->dwAddData = 0;  
  164.    pCreateInfo->hHosting = hMainWnd;  
  165. }  
  166. //=============================================================================  
  167. void orderdesk (HWND hwnd)  
  168. {  
  169.    MAINWINCREATE CreateInfo2; //新建一个窗口  
  170.   
  171.    InitCreateInfoTWO (&CreateInfo2);  
  172.    hMainWnd1 = CreateMainWindow (&CreateInfo2);//建立窗口    
  173.   
  174.    if (hMainWnd1 != HWND_INVALID)   
  175.     {  
  176.        ShowWindow (hMainWnd1, SW_SHOWNORMAL); //显示窗口  
  177.        return;  
  178.    }  
  179. }   
  180. //=====================================================================================  
  181. //************************************************************************主窗口回调函数  
  182. static int HelloWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam)  
  183. {  
  184.     HDC hdc;  
  185.     RECT rc;  
  186.     switch (message) {        
  187.   
  188.   case MSG_CREATE:                                     
  189.            CreateWindow (CTRL_BUTTON,//============CTRL_BUTTON 按钮  
  190.                          "第二级窗口",  
  191.                          WS_CHILD | BS_PUSHBUTTON | WS_VISIBLE,  
  192.                          IDC_BUTTON1,//=========================按钮ID=IDC_BUTTON1  
  193.                          10, 70, 80, 20, hWnd, 0);             
  194.   
  195.      CreateWindow (CTRL_BUTTON,//============CTRL_BUTTON 按钮  
  196.                          "关闭",  
  197.                          WS_CHILD | BS_PUSHBUTTON | WS_VISIBLE,  
  198.                          IDC_BUTTON2,//=========================按钮ID=IDC_BUTTON2  
  199.                          100, 70, 80, 20, hWnd, 0);  
  200.            break;    
  201.   
  202.   case MSG_COMMAND:  
  203.        {  
  204.            int id    = LOWORD(wParam);//低  
  205.            int code = HIWORD(wParam);//高  
  206.           //printf ("Notification from buttons: ID: %d, Code: %x\n", id, code);            
  207.       switch (id)  
  208.            {  
  209.                             
  210.                case IDC_BUTTON1:  
  211.                  printf ("opendisk: ID: %d, Code: %x\n", id, code);  
  212.                  orderdesk(hWnd);   //======================================函数调用  
  213.                 break;  
  214.                               
  215.                case IDC_BUTTON2:  
  216.                  SendMessage (hWnd, MSG_CLOSE, 0, 0L);//发送消息  
  217.                  break;                
  218.               default:  
  219.                 break;  
  220.            }  
  221.            break;  
  222.        }        
  223.        break;          
  224.   
  225.    
  226.   
  227.     case MSG_PAINT://绘  
  228.             hdc = BeginPaint (hWnd);  
  229.                 GetClientRect (hWnd, &rc);  
  230.                 DrawText (hdc, hello_str, -1, &rc, DT_LEFT);  
  231.                 EndPaint (hWnd, hdc);  
  232.                
  233.             break;      
  234.   
  235.    case MSG_CLOSE:  
  236.             DestroyMainWindow (hWnd);  
  237.             PostQuitMessage (hWnd);  
  238.             break;  
  239.     }      
  240.   
  241.   
  242.  return DefaultMainWinProc(hWnd, message, wParam, lParam);  
  243. }  
  244. //===========================================================================主窗口  
  245.   
  246.   
  247. static void InitCreateInfo (PMAINWINCREATE pCreateInfo)  
  248. {  
  249.      
  250.     pCreateInfo->dwStyle = WS_CAPTION|WS_BORDER|WS_SYSMENU;  
  251.     pCreateInfo->dwExStyle = WS_EX_NONE;  
  252.     pCreateInfo->spCaption = "这是第一级窗口";  
  253.     pCreateInfo->hMenu = 0;  
  254.     pCreateInfo->hCursor = GetSystemCursor (0);  
  255.     pCreateInfo->hIcon = 0;  
  256.     pCreateInfo->MainWindowProc = HelloWinProc;//窗口回调函数  
  257.     pCreateInfo->lx = 0;   
  258.     pCreateInfo->ty = 0;  
  259.     pCreateInfo->rx = 320;  
  260.     pCreateInfo->by = 240;  
  261.     pCreateInfo->iBkColor = COLOR_lightwhite;   
  262.     pCreateInfo->dwAddData = 0;  
  263.     pCreateInfo->hHosting = HWND_DESKTOP;//======1     
  264. }//========================================================================  
  265.   
  266. int MiniGUIMain (int argc, const char* argv[])  
  267. {  
  268.     MSG Msg;  
  269.     MAINWINCREATE CreateInfo;  
  270.   
  271.  #ifdef _LITE_VERSION  
  272.     SetDesktopRect(0, 0, 1024, 768);  
  273. #endif  
  274.       
  275.       
  276.     InitCreateInfo (&CreateInfo);    
  277.   
  278.     hMainWnd = CreateMainWindow (&CreateInfo);  
  279.     if (hMainWnd == HWND_INVALID)  
  280.         return -1;  
  281.      
  282.     ShowWindow(hMainWnd, SW_SHOWNORMAL);  
  283.     printf ("The main window showed.\n");  
  284. //==================================================================  
  285.     while (GetMessage(&Msg, hMainWnd))  
  286.   {  
  287.           TranslateMessage(&Msg);  
  288.           DispatchMessage(&Msg);  
  289.         }      
  290.   
  291.  MainWindowThreadCleanup (hMainWnd);      
  292.   
  293.   
  294.     return 0;  
  295.    }  
  296. #ifndef _LITE_VERSION  
  297.   #include <minigui/dti.c>  
  298. #endif  

0
0
 
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值