stemwin 实现显示屏幕滑动

5 篇文章 0 订阅

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值