|

楼主 |
发表于 2019-7-10 20:58:47
|
显示全部楼层
我把其中一个贴出来了,能给看看哪儿不对么?
#include "DIALOG.h"
#define ID_FRAMEWIN_0 (GUI_ID_USER + 0x00)
#define ID_EDIT_0 (GUI_ID_USER + 0x01)
#define ID_EDIT_1 (GUI_ID_USER + 0x02)
#define ID_EDIT_2 (GUI_ID_USER + 0x03)
#define ID_EDIT_3 (GUI_ID_USER + 0x04)
#define ID_EDIT_4 (GUI_ID_USER + 0x05)
#define ID_EDIT_5 (GUI_ID_USER + 0x06)
#define ID_BUTTON_0 (GUI_ID_USER + 0x07)
#define ID_BUTTON_1 (GUI_ID_USER + 0x08)
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
{ FRAMEWIN_CreateIndirect, "Framewin", ID_FRAMEWIN_0, 0, 0, 320, 240, 0, 0x64, 0 },
{ EDIT_CreateIndirect, "Edit", ID_EDIT_0, 20, 20, 180, 20, 0, 0x64, 0 },
{ EDIT_CreateIndirect, "Edit", ID_EDIT_1, 20, 60, 180, 20, 0, 0x64, 0 },
{ EDIT_CreateIndirect, "Edit", ID_EDIT_2, 20, 100, 180, 20, 0, 0x64, 0 },
{ EDIT_CreateIndirect, "Edit", ID_EDIT_3, 20, 140, 180, 20, 0, 0x64, 0 },
{ EDIT_CreateIndirect, "Edit", ID_EDIT_4, 20, 165, 180, 20, 0, 0x64, 0 },
{ EDIT_CreateIndirect, "Edit", ID_EDIT_5, 20, 200, 180, 20, 0, 0x64, 0 },
{ BUTTON_CreateIndirect, "Prev", ID_BUTTON_0, 240, 20, 40, 30, 0, 0x0, 0 },
{ BUTTON_CreateIndirect, "Next", ID_BUTTON_1, 240, 180, 40, 30, 0, 0x0, 0 },
};
extern WM_HWIN hPage[3];
extern GUI_CONST_STORAGE GUI_FONT GBK_16m16;
static void _cbDialog(WM_MESSAGE * pMsg) {
WM_HWIN hItem;
int NCode;
int Id;
char acBuffer[40];
int posiX, posiY, sizeX[2], sizeY[2];
switch (pMsg->MsgId) {
case WM_INIT_DIALOG:
// Initialization of 'Framewin'
hItem = pMsg->hWin;
FRAMEWIN_SetFont(hItem, GUI_FONT_20_1);
FRAMEWIN_SetText(hItem, "Page1 www.in.com");
FRAMEWIN_SetTextColor(hItem, (0x008000FF));
// Initialization of 'Edit'
for(Id = ID_EDIT_0; Id <= ID_EDIT_5; Id++)
{
hItem = WM_GetDialogItem(pMsg->hWin, Id);
EDIT_SetFont(hItem, &GBK_16m16);
EDIT_SetText(hItem, "");
EDIT_SetTextAlign(hItem, GUI_TA_LEFT | GUI_TA_VCENTER);
}
break;
case WM_PAINT:
sprintf(acBuffer, "Memory Used: %03dKBytes Free: %03dKBytes", GUI_ALLOC_GetNumUsedBytes()/1024, GUI_ALLOC_GetNumFreeBytes()/1024);
GUI_SetColor(GUI_BLUE);
GUI_DispStringAt(acBuffer, 4, 4);
break;
case WM_NOTIFY_PARENT:
Id = WM_GetId(pMsg->hWinSrc);
NCode = pMsg->Data.v;
switch(Id) {
case ID_EDIT_0:
case ID_EDIT_1:
case ID_EDIT_2:
case ID_EDIT_3:
case ID_EDIT_4:
case ID_EDIT_5:
switch(NCode) {
case WM_NOTIFICATION_CLICKED://
//determine the keyboard position
sizeX[0] = WM_GetWindowSizeX(WM_GetClientWindow(hPage[0]));////获取并返回窗口的X大小,因hPage[0]是FrameWin所以需要WM_GetClientWindow
sizeY[0] = WM_GetWindowSizeY(WM_GetClientWindow(hPage[0]));
sizeX[1] = WM_GetWindowSizeX(hPage[2]);//hPage[2]是窗口,所以不需要WM_GetClientWindow
sizeY[1] = WM_GetWindowSizeY(hPage[2]);
if(sizeX[0] - WM_GetWindowOrgX(pMsg->hWinSrc) < sizeX[1]) posiX = sizeX[0] - sizeX[1];//WM_GetWindowOrgX返回窗口 X 方向的原点
else posiX = WM_GetWindowOrgX(pMsg->hWinSrc);
if(sizeY[0]-WM_GetWindowOrgY(pMsg->hWinSrc)-WM_GetWindowSizeY(pMsg->hWinSrc) < sizeY[1])
posiY = WM_GetWindowOrgY(pMsg->hWinSrc) - sizeY[1];
else posiY = WM_GetWindowOrgY(pMsg->hWinSrc) + WM_GetWindowSizeY(pMsg->hWinSrc);
//WM_MoveTo(hPage[2], posiX, posiY);
WM_ShowWindow(hPage[2]);
break;
case WM_NOTIFICATION_RELEASED:
break;
case WM_NOTIFICATION_VALUE_CHANGED:
break;
}
break;
case ID_BUTTON_0:
switch(NCode) {
case WM_NOTIFICATION_CLICKED:
break;
case WM_NOTIFICATION_RELEASED:
break;
}
break;
case ID_BUTTON_1:
switch(NCode) {
case WM_NOTIFICATION_CLICKED:
break;
case WM_NOTIFICATION_RELEASED:
WM_AttachWindow(hPage[2], hPage[1]);
WM_HideWindow(hPage[0]);
WM_HideWindow(hPage[2]);
WM_ShowWindow(hPage[1]);
WM_SetFocus(hPage[1]);
break;
}
break;
}
break;
default:
WM_DefaultProc(pMsg);
break;
}
}
static void _cbBackGround(WM_MESSAGE *pMsg)
{
switch(pMsg->MsgId)
{
case WM_PAINT:
GUI_SetBkColor(GUI_BLUE);//此函数主要用来抗锯齿
GUI_Clear();
GUI_SetColor(GUI_WHITE);
break;
default:WM_DefaultProc(pMsg);
break;
}
}
WM_HWIN CreateFramewin1(void);
WM_HWIN CreateFramewin1(void) {
WM_HWIN hWin;
hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
WM_SetCallback(WM_HBKWIN,_cbBackGround);//为窗口设置回调函数
return hWin;
}
|
|