📄 skindemo.c
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <minigui/common.h>
#include <minigui/minigui.h>
#include <minigui/gdi.h>
#include <minigui/window.h>
#include <minigui/control.h>
#include <minigui/mgext.h>
#include <minigui/skin.h>
#include "DVRCommon.h"
#include "gFunction.h"
#include "skindemo.h"
#ifdef _EXT_SKIN
//定义可以聚焦的皮肤控件ID,依次从1~n,顺序定义
#define IDC_SERVERADR_EDT 1
#define IDC_USERNAME_EDT 2
#define IDC_PASSWORD_EDT 3
#define BTN_PLAY 4
#define BTN_STOP 5
#define BTN_CLOSE 6
#define BMP_COUNT 4 //图片个数
static MAX_FOCUS_OBJECT = 3; //最大可聚焦的控件对象
static CURRENT_FOCUSOBJECT_ID = 1; //当前聚焦对象ID
/*编辑框数组*/
static CTRLDATA EditArray[] =
{
{CTRL_SLEDIT,
WS_CHILD|WS_VISIBLE|WS_BORDER |ES_LEFT|ES_AUTOSELECT | ES_BASELINE,
200, 100, 150, 30,
IDC_SERVERADR_EDT,
NULL,
0
},
{CTRL_COMBOBOX,
WS_CHILD | WS_VISIBLE | WS_BORDER| CBS_AUTOSPIN,
200, 150, 150, 30,
IDC_USERNAME_EDT,
NULL,
0
},
{CTRL_SLEDIT,
WS_CHILD | WS_VISIBLE | WS_BORDER|ES_PASSWORD|ES_LEFT|ES_AUTOSELECT,
200, 200, 150, 30,
IDC_PASSWORD_EDT,
NULL,
0
}
};
/*定义标签*/
static si_nrmlabel_t si_livelabel_items[] =
{
{"服务器地址:",0xDD0000, 0x00FF00, 0xFF0000, 0 },
{"用 户 名:",0xDD0000, 0x00FF00, 0xFF0000, 0 },
{"密 码:",0xDD0000, 0x00FF00, 0xFF0000, 0 }
};
/* 定义皮肤元素数组 */
static skin_item_t skin_control_items [] =
{
{BTN_PLAY, SI_TYPE_CMDBUTTON | SI_TEST_SHAPE_RECT | SI_STATUS_VISIBLE , 10, 300, {},1},
{BTN_STOP, SI_TYPE_CMDBUTTON | SI_TEST_SHAPE_RECT | SI_STATUS_VISIBLE , 150, 300, {},2},
{BTN_CLOSE, SI_TYPE_CMDBUTTON | SI_TEST_SHAPE_RECT | SI_STATUS_VISIBLE , 350, 300, {},3},
//编辑控件 服务器地址输入框
{0, SI_TYPE_CONTROL | SI_TEST_SHAPE_RECT | SI_STATUS_VISIBLE,
200, 100, {}, -1, "c",0,EditArray},
//用户名输入框
{0, SI_TYPE_CONTROL | SI_TEST_SHAPE_RECT | SI_STATUS_VISIBLE,
200, 160, {}, -1, "c",0,EditArray+1},
//密码输入框
{0, SI_TYPE_CONTROL | SI_TEST_SHAPE_RECT | SI_STATUS_VISIBLE,
200, 220, {}, -1, "c",0,EditArray+2},
{0, SI_TYPE_NRMLABEL | SI_TEST_SHAPE_RECT | SI_STATUS_VISIBLE,
100, 102, {}, -1, "b",0,si_livelabel_items},
//用户名
{0, SI_TYPE_NRMLABEL | SI_TEST_SHAPE_RECT | SI_STATUS_VISIBLE,
100, 152, {}, -1, "c",0,si_livelabel_items+1},
//密码
{0, SI_TYPE_NRMLABEL | SI_TEST_SHAPE_RECT | SI_STATUS_VISIBLE,
100, 202, {}, -1, "c",0,si_livelabel_items+2}
};
/* 定义皮肤,主窗口使用的皮肤控件 */
skin_head_t MyWinForm_skin =
{
"测试皮肤窗口",
SKIN_STYLE_TOOLTIP, NULL, NULL,
0, 9, skin_control_items, TRUE
};
/* 位图文件名数组 */
const char *bmp_name[BMP_COUNT] =
{
"./image/main.png",
"./image/msn.png",
"./image/xray.png",
"./image/aol.png"
};
/* 皮肤事件回调函数 */
static int DVRForm_Event_Cb(HWND hwnd, skin_item_t* item, int event, void* data)
{
PDVRWndClass pSkinFormObject = NULL;
//点击按钮回调事件
if (event == SIE_BUTTON_CLICKED)
{
switch (item->id)
{
case BTN_PLAY: /* 皮肤元素SIID_PLAY的SIE_BUTTON_CLICKED事件在这里进行处理 */
//这里添加按钮点击事件处理代码
MessageBox (hwnd, "点击播放按钮", "提示", MB_OK | MB_ICONINFORMATION);
break;
case BTN_STOP:
break;
case BTN_CLOSE:
MessageBox (hwnd, "关闭窗体事件", "提示", MB_OK | MB_ICONINFORMATION);
//DVRDestroyWindow(hwnd);
break;
}
}
return MSG_CB_DEF_GOON;
}
PDVRWndClass DVRRegWindowClassBySkinForm(PDVRWndClass pParentWnd)
{
PDVRWndClass pWndObject;
pWndObject = (PDVRWndClass)malloc(sizeof(tagDVRWndClass));
memset(pWndObject,0,sizeof(tagDVRWndClass));
pWndObject->pParent = pParentWnd;
pWndObject->DVRCreateAndInitWindow = DVRCreateAndInitWindow;
pWndObject->DVRDestroyWindow = DVRDestroyWindow;
pWndObject->DVRHideWindow = DVRHideWindow;
pWndObject->DVRLoadLanguageToWindow = DVRLoadLanguageToWindow;
pWndObject->DVRShowWindow = DVRShowWindow;
return pWndObject;
}
static HWND DVRCreateAndInitWindow(PDVRWndClass pWndObject)
{
MSG msg;
g_Load_Skin_Bmps(&MyWinForm_skin, TRUE , bmp_name,BMP_COUNT); /* 装载位图资源 */
g_load_skin_fonts(&MyWinForm_skin,TRUE);/*装载字体*/
if (MyWinForm_skin.bmps == NULL) {
printf ("Could not load skin bitmaps!\n");
return 0;
}
if ( !skin_init (&MyWinForm_skin, DVRForm_Event_Cb, DVRProccessMessage) ){ /* 初始化皮肤 */
printf ("skin init fail!\n");
}
else
{
if (pWndObject->pParent)
{
pWndObject->hWnd = create_skin_main_window (&MyWinForm_skin,
pWndObject->pParent->hWnd, WINDOWLEFT, WINDOWTOP,
WINDOWWIDTH + WINDOWLEFT, WINDOWHEIGHT + WINDOWTOP,
TRUE);
}
else
{
pWndObject->hWnd = create_skin_main_window (&MyWinForm_skin,
HWND_DESKTOP, WINDOWLEFT, WINDOWTOP,
WINDOWWIDTH + WINDOWLEFT, WINDOWHEIGHT + WINDOWTOP,
TRUE);
}
//进入窗体消息循环
while (GetMessage (&msg, pWndObject->hWnd))
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
}
}
static void DVRShowWindow(HWND hWnd,int iShowType)
{
}
static void DVRHideWindow(HWND hWnd)
{
}
static void DVRDestroyWindow(HWND hWnd)
{
MainWindowCleanup (hWnd);
skin_deinit(&MyWinForm_skin); /* 撤销皮肤 */
g_Load_Skin_Bmps(&MyWinForm_skin, FALSE , bmp_name,BMP_COUNT); /* 卸载位图资源 */
g_load_skin_fonts(&MyWinForm_skin,FALSE);/*装载字体*/
}
static void DVRLoadLanguageToWindow(PDVRWndClass pWndObject)
{
}
/* 皮肤窗口消息回调函数 */
static int DVRProccessMessage(HWND hwnd, int message, WPARAM wparam, LPARAM lparam, int* result)
{
switch (message)
{
case MSG_KEYDOWN: //键盘按下消息
switch(wparam)
{
case 103://向上按键
CURRENT_FOCUSOBJECT_ID = SetPreFocusObject(hwnd,CURRENT_FOCUSOBJECT_ID);
break;
case 108://向下按键
CURRENT_FOCUSOBJECT_ID = SetNextFocusObject(hwnd,CURRENT_FOCUSOBJECT_ID);
break;
case 105://向右按键
break;
case 106://向左按键
break;
}
break;
case MSG_CLOSE:
MessageBox (hwnd, "关闭窗体消息执行!", "提示", MB_OK | MB_ICONINFORMATION);
break;
}
return 1;
}
//设置下一个聚焦对象
static int SetNextFocusObject(HWND hParent,int iCurObjectID)
{
int iCurID = iCurObjectID;
HWND hCtrObject;
hCtrObject = GetDlgItem(hParent,iCurID);
SetWindowBkColor(hCtrObject,PIXEL_lightwhite);
UpdateWindow(hCtrObject,TRUE);
if (iCurID == MAX_FOCUS_OBJECT)
{
iCurID = 1;
}
else
{
iCurID++;
}
hCtrObject = GetDlgItem(hParent,iCurID);
SetWindowBkColor(hCtrObject,PIXEL_blue);
UpdateWindow(hCtrObject,TRUE);
return iCurID;
}
//设置前一个聚焦对象
static int SetPreFocusObject(HWND hParent,int iCurObjectID)
{
int iCurID = iCurObjectID;
HWND hCtrObject;
hCtrObject = GetDlgItem(hParent,iCurID);
SetWindowBkColor(hCtrObject,PIXEL_lightwhite);
UpdateWindow(hCtrObject,TRUE);
if (iCurID == 1)
{
iCurID = MAX_FOCUS_OBJECT;
}
else
{
iCurID--;
}
hCtrObject = GetDlgItem(hParent,iCurID);
SetWindowBkColor(hCtrObject,PIXEL_blue);
UpdateWindow(hCtrObject,TRUE);
return iCurID;
}
//确定当前对象的编辑
static int SetStatusOfFocusObject(HWND hParent,int iCurObjectID)
{
return 0;
}
#else
#error "Lack of SKIN support in MiniGUIExt library."
#endif /* _EXT_SKIN */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -