最近在借助一个项目学习使用emwin的使用,xia显示屏用的19264,显示的数据有限,无法shix实现一页全部显示出来,想着可以通过聚焦的控件判断是否需要翻页。zhuy主要思路是:创建父窗口(父窗口尺寸192*64),然后创建子窗口(子窗口尺寸192*120)。这样youy有一部小工具会超出物理显示尺寸,在qieh切换焦点时判断当前聚焦的小工具,然后实现翻页。
一。创建父窗口和子窗口,设置窗口资源列表和回调
/*********************************************************************
*
* _cbDialog
*/
static void _cbDialog(WM_MESSAGE * pMsg)
{
...... ;
}
/*********************************************************************
*
* _cbWindow
*
* Function description
* The callback moves the edit-fiels when a notification message was send.
*/
static void _cbWindow(WM_MESSAGE * pMsg) {
WM_SCROLL_STATE stScrollState;
int x;
int y;
switch (pMsg->MsgId) {
case WM_NOTIFY_PARENT:
break;
case WM_PAINT:
GUI_SetBkColor(GUI_WHITE);
GUI_Clear();
break;
default:
WM_DefaultProc(pMsg);
}
}
/*********************************************************************
*
* Public code
*
**********************************************************************
*/
/*********************************************************************
*
* CreateWindow
*/
WM_HWIN CreateWindow(void);
WM_HWIN CreateWindow(void) {
WM_HWIN hWindow;
//
// Create the window
//
g_stNetSetPageHWin = WM_CreateWindow(0, 0, 192, 64, WM_CF_SHOW, _cbWindow, 0);
g_stNetSetPageHWinChild = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, g_stNetSetPageHWin, 0, 0);
//g_stScrollbarHWin = SCROLLBAR_CreateAttached(hWindow, GUI_ID_VSCROLL);
//SCROLLBAR_SetNumItems(g_stScrollbarHWin, 32 * 4);
//SCROLLBAR_SetPageSize(g_stScrollbarHWin, 32);
return g_stNetSetPageHWin;
}
父窗口的回调里面主要实现了屏幕的清屏,原因是在子窗口翻页后如果设置的窗口Y尺寸不是物理窗口的整数倍,会出现液晶屏显示出之前页面的内容,所以需要子窗口发送消息通知父窗口清屏。
父窗口的显示尺寸设置为192*64,
二。子窗口资源列表
/*********************************************************************
*
* _aDialogCreate
*/
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
{ WINDOW_CreateIndirect, "Window", ID_WINDOW_0, 0, 0, 192, 120, 0, 0x0, 0 },
{ TEXT_CreateIndirect, "MAC", ID_TEXT_0, 0, 1, 48, 10, 0, 0x64, 0 },
//......
};
子窗口资源列表内主要是需要用到的一些小工具,注意子窗口的显示尺寸,这里设置为192*120,
三。屏幕移动
WM_MoveWindow(g_stNetSetPageHWinChild, 0, m_nWinMove_y);
使用该函数实现屏幕X和Y方向移动,这里主要shix实现上下翻页,所以只需要修改m_nWinMove_y的值就可以shix实现子窗口的Y方向移动。
四。子窗口像父窗口发送消息
WM_SendMessageNoPara(g_stNetSetPageHWin,WM_PAINT);
g_stNetSetPageHWin:父窗口句柄
WM_PAINT:发送的消息
这样在父窗口的回调函数内就会接受到子窗口发送的WM_PAINT消息,并执行清屏