|

楼主 |
发表于 2020-12-14 09:43:03
|
显示全部楼层
#include "DIALOG.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
extern void _cbCollectPage(WM_MESSAGE* pMsg);
char * _acBuffer;
GUI_HMEM hMem;
GUI_MEMDEV_Handle hMemBMP;
GUI_BITMAP Bitmap0;
GUI_LOGPALETTE Palette0;
GUI_HMEM hMemButtonBitmap0;
WM_HWIN _hLastFrame;
#define BUTTON_CLICK_SPEED 600
#define BUTTON_CLICK_DELAY 750
#define DEFAULT_WIDGET_EFFECT (&WIDGET_Effect_None)
#define MAIN_BKCOLOR GUI_WHITE
#define MAIN_TEXTCOLOR 0x000000
//#define MAIN_FONT (&GUI_FontYahei)
#define MAIN_BORDER 0
#define MAIN_TITLE_HEIGHT 0
//#define MAIN_LOGO_BITMAP (&bmLogo_armflySmall)
#define MAIN_LOGO_OFFSET_X 0
#define MAIN_LOGO_OFFSET_Y 0
#define FRAME_BKCOLOR GUI_WHITE
#define FRAME_TEXTCOLOR 0x000000
//#define FRAME_FONT (&GUI_FontYahei)
#define FRAME_EFFECT (&WIDGET_Effect_None)
#define FRAME_BORDER FRAME_EFFECT->EffectSize
#define FRAME_WIDTH (LCD_GetXSize() - (FRAME_BORDER * 2) - (MAIN_BORDER * 2))
#define FRAME_HEIGHT (LCD_GetYSize() - (FRAME_BORDER * 2) - (MAIN_BORDER + MAIN_TITLE_HEIGHT))
#define FRAME_BUTTON_BKCOLOR0 0xB8B8B8 /* Unpressed */
#define FRAME_BUTTON_BKCOLOR1 0xE0E0E0 /* Pressed */
#define FRAME_BUTTON_BKCOLOR2 0xC0C0C0 /* Disabled */
#define FRAME_BUTTON_COLOR0 0x000000 /* Unpressed */
#define FRAME_BUTTON_COLOR1 0x000000 /* Pressed */
//#define FRAME_BUTTON_FONT (&GUI_FontYahei)
#define FRAME_BUTTON_EFFECT (&WIDGET_Effect_None)
#define MENU_ID_WINDOW_0 (GUI_ID_USER + 0x00)
#define MENU_ID_BUTTON_0 (GUI_ID_USER + 0x01)
static const GUI_WIDGET_CREATE_INFO _aDialogMenuPageCreate[] = {
{ WINDOW_CreateIndirect, "Window", MENU_ID_WINDOW_0, 0, 0, 1024, 600, 0, 0x0, 0 },
{ BUTTON_CreateIndirect, "Button", MENU_ID_BUTTON_0, 200, 100, 80, 80, 0, 0x0, 0 },
};
void _DrawDownRectEx(const WIDGET_EFFECT* pEffect, const GUI_RECT* pRect)
{
WM_LOCK();
pEffect->pfDrawDownRect(pRect);
WM_UNLOCK();
}
void _DrawDownRect(const WIDGET_EFFECT* pEffect, int x0, int y0, int x1, int y1)
{
GUI_RECT r;
r.x0 = x0;
r.y0 = y0;
r.x1 = x1;
r.y1 = y1;
_DrawDownRectEx(pEffect, &r);
}
void _PaintFrame(void)
{
GUI_RECT r;
WM_GetClientRect(&r);
GUI_SetBkColor(FRAME_BKCOLOR);
GUI_SetColor(FRAME_TEXTCOLOR);
//GUI_SetFont(FRAME_FONT);
GUI_SetTextMode(GUI_TM_TRANS);
GUI_ClearRectEx(&r);
}
WM_HWIN _CreateFrame(WM_CALLBACK* cb)
{
int x = 0;
int y = 0;
x = FRAME_BORDER + MAIN_BORDER;
y = FRAME_BORDER + MAIN_TITLE_HEIGHT;
_hLastFrame = WM_CreateWindowAsChild(x, y, FRAME_WIDTH, FRAME_HEIGHT, WM_HBKWIN, WM_CF_SHOW, cb, 0);
return _hLastFrame;
}
void _DeleteFrame(void)
{
WM_DeleteWindow(_hLastFrame);
_hLastFrame = 0;
}
WM_HWIN _CreateButton(WM_HWIN hParent, const char* pText, int Id, int x, int y, int w, int h, unsigned TextId)
{
WM_HWIN hButton;
hButton = BUTTON_CreateEx(x, y, w, h, hParent, WM_CF_SHOW, 0, Id);
BUTTON_SetText(hButton, pText);
//BUTTON_SetFont (hButton, FRAME_BUTTON_FONT);
BUTTON_SetBkColor(hButton, 0, FRAME_BUTTON_BKCOLOR0);
BUTTON_SetBkColor(hButton, 1, FRAME_BUTTON_BKCOLOR1);
BUTTON_SetBkColor(hButton, 2, FRAME_BUTTON_BKCOLOR2);
BUTTON_SetTextColor(hButton, 0, FRAME_BUTTON_COLOR0);
BUTTON_SetTextColor(hButton, 1, FRAME_BUTTON_COLOR1);
BUTTON_SetTextColor(hButton, 2, FRAME_BUTTON_COLOR0);
WIDGET_SetEffect(hButton, FRAME_BUTTON_EFFECT);
/* 设置接收输入焦点的能力 */
BUTTON_SetFocussable(hButton, 1);
return hButton;
}
void _cbBkWindow(WM_MESSAGE* pMsg)
{
switch (pMsg->MsgId)
{
case WM_PAINT:
{
int x, y, w, h;
GUI_SetBkColor(MAIN_BKCOLOR);
GUI_SetColor(MAIN_TEXTCOLOR);
//GUI_SetFont(MAIN_FONT);
GUI_Clear();
//x = MAIN_LOGO_OFFSET_X + MAIN_BORDER;
//y = MAIN_LOGO_OFFSET_Y + ((MAIN_TITLE_HEIGHT - MAIN_LOGO_BITMAP->YSize) >> 1);
//GUI_DrawBitmap(MAIN_LOGO_BITMAP, x, y);
x = 0;
y = 0;
w = LCD_GetXSize();
h = LCD_GetYSize();
_DrawDownRect(FRAME_EFFECT, x, y, w, h);
}
break;
default:
WM_DefaultProc(pMsg);
}
}
void _cbMenuPage(WM_MESSAGE* pMsg)
{
WM_HWIN hWin = pMsg->hWin;
WM_HWIN hItem;
switch (pMsg->MsgId)
{
case WM_CREATE:
/* 设置聚焦 */
WM_SetFocus(hWin);
_CreateButton(hWin, "button", MENU_ID_BUTTON_0 ,
_aDialogMenuPageCreate[1].x0,
_aDialogMenuPageCreate[1].y0,
_aDialogMenuPageCreate[1].xSize,
_aDialogMenuPageCreate[1].ySize,
0);
hMemBMP = ShowBmp("pic\\1.bmp", 0, 0);
GUI_MEMDEV_WriteAt(hMemBMP, 0, 0);
break;
case WM_KEY:
switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key)
{
case GUI_KEY_ESCAPE:
GUI_EndDialog(hWin, 1);
break;
case GUI_KEY_TAB:
WM_SetFocusOnNextChild(hWin);
break;
}
break;
case WM_PAINT:
_PaintFrame();
break;
case WM_NOTIFY_PARENT:
if (pMsg->Data.v == WM_NOTIFICATION_RELEASED)
{
int Id = WM_GetId(pMsg->hWinSrc);
switch (Id)
{
case MENU_ID_BUTTON_0:
_DeleteFrame();
GUI_ALLOC_Free(hMemButtonBitmap0);
_CreateFrame(&_cbCollectPage);
break;
}
}
break;
default:
WM_DefaultProc(pMsg);
}
}
void MainTask(void)
{
GUI_Init();
WM_SetCreateFlags(WM_CF_MEMDEV);
GUI_SelectLayer(0);
GUI_SetBkColor(GUI_WHITE);
GUI_Clear();
hMemBMP = ShowBmp("pic\\1.bmp", 0, 0);
GUI_MEMDEV_WriteAt(hMemBMP, 100, 100);
GUI_Delay(5000);
WM_SetCallback(WM_HBKWIN, &_cbBkWindow);
_CreateFrame(&_cbMenuPage);
while (1)
{
GUI_Delay(10);
}
}
GUI_HMEM ShowBmp(const char *filename, int x, int y)
{
FILE * fp = NULL;
int filesize = 0;
int cnt = 0;
int xSize = 0, ySize = 0;
fp = fopen(filename, "rb");
char *_acBuffer;
if (fp == NULL)
{
printf("%sbmp文件不存在\n", filename);
return -1;
}
else
{
fseek(fp, 0, SEEK_END);
filesize = ftell(fp);
fseek(fp, 0, SEEK_SET);
hMem = GUI_ALLOC_AllocZero(filesize);
_acBuffer = GUI_ALLOC_h2p(hMem);
cnt = fread(_acBuffer, sizeof(char), filesize, fp);
if (cnt != filesize)
{
printf("读取%sbmp文件失败\n", filename);
GUI_ALLOC_Free(hMem);
fclose(fp);
return -2;
}
else
{
xSize = GUI_BMP_GetXSize(_acBuffer);
ySize = GUI_BMP_GetYSize(_acBuffer);
hMemBMP = GUI_MEMDEV_CreateEx(0, 0, xSize, ySize, GUI_MEMDEV_NOTRANS);
GUI_MEMDEV_Select(hMemBMP);
GUI_BMP_Draw(_acBuffer, x, y);
GUI_MEMDEV_Select(0);
GUI_ALLOC_Free(hMem);
fclose(fp);
return hMemBMP;
//return hMem;
}
}
}
|
|