×
单片机 > 单片机程序设计 > 详情

stemwin 实现显示屏幕滑动

发布时间:2020-05-18 发布时间:
|

最近在借助一个项目学习使用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消息,并执行清屏





『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
C51 特殊功能寄存器SFR的名称和地址