1. 程式人生 > >minigui對話方塊+按鍵列表demo(加註釋)

minigui對話方塊+按鍵列表demo(加註釋)

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#include <minigui/common.h>
#include <minigui/minigui.h>
#include <minigui/gdi.h>
#include <minigui/window.h>
#include <minigui/control.h>

#define IDC_1              100
#define IDC_2             101
#define IDC_3             102
#define IDC_4             103

static DLGTEMPLATE DlgFistWin =
{
    WS_BORDER | WS_CAPTION |WS_MINIMIZEBOX  | WS_MAXIMIZEBOX,   //WS_CAPTION有題欄  WS_BORDER有邊框  WS_MINIMIZEBOX最小化
    WS_EX_AUTOSECONDARYDC,
    0, 0, 800, 480,         //x y w h
    "this is static demo",  //標題
    0, 0,
    5,                       //視窗個數
	NULL,  
    0
};

static CTRLDATA SetDialogArr[] =
{ 
    {
        "button",
        WS_VISIBLE | BS_AUTORADIOBUTTON | BS_CHECKED | WS_TABSTOP | WS_GROUP,  //BS_CHECKED 初始選中
        20, 28, 200, 20, 
        IDC_1, 
        "1",
        0
    },
    {
        "button",
        WS_VISIBLE | BS_AUTORADIOBUTTON,   //WS_VISIBLE 初始化可見  BS_AUTORADIOBUTTON顯示使用者的選擇
        20, 48, 200, 20,
        IDC_2,
        "2",
        0
    },
    {
        "button",
        WS_VISIBLE | BS_AUTORADIOBUTTON, 
        20, 68, 200, 20, 
        IDC_3, 
        "3",
        0
    },
    {
        "button",
        WS_VISIBLE | BS_AUTORADIOBUTTON,  
        20, 88, 200, 20, 
        IDC_4 ,
        "4",
        0
    },
    {
        "button",
        WS_VISIBLE | BS_PUSHBUTTON | WS_TABSTOP,  //BS_PUSHBUTTON 按下   WS_TABSTOP tab停止
        120, 230, 100, 30,
        IDCANCEL,
        "Exit",
        0
    },
};


static int DialogBlackProc(HWND hDlg, int message, WPARAM wParam, LPARAM lParam)
{
	struct _DepInfo *info;
    switch (message) {	
	//定義自己的對話方塊回撥函式時,需要處理 MSG_INITDIALOG 訊息
    case MSG_INITDIALOG:
        info = (struct _DepInfo*)lParam;
		//資料初始化對話方塊 
		SetWindowAdditionalData (hDlg, (DWORD)lParam);
		break;
	//視窗空閒無事件發生的時候,會一直不停的傳送該訊息給主視窗
    case MSG_IDLE:
       
        break;

	//監控修改
    case MSG_COMMAND:
        switch (wParam) {
		case IDOK:
				// 使用 info 結構中的資料 
        case IDCANCEL:
            EndDialog (hDlg, wParam);
            break;
        }
        break;
    }

    return DefaultDialogProc (hDlg, message, wParam, lParam);
}

int MiniGUIMain (int argc, const char* argv[])
{
#ifdef _MGRM_PROCESSES
	// MiniGUI-Processes  模式下加入層
    JoinLayer(NAME_DEF_LAYER , "hello" , 0 , 0);
#endif
	//設定為預設渲染器 一共四種渲染器classic、flat、fashion、skin
    SetDefaultWindowElementRenderer ("skin");

	//對話方塊 controls指向定義控制元件的陣列
    DlgFistWin.controls = SetDialogArr;
	
	//建立託管視窗為桌面視窗的對話方塊
    DialogBoxIndirectParam (&DlgFistWin, HWND_DESKTOP, DialogBlackProc, 0L);

    return 0;
}

效果圖
在這裡插入圖片描述