初级会员

- 积分
- 105
- 金钱
- 105
- 注册时间
- 2017-8-4
- 在线时间
- 48 小时
|
10金钱
本帖最后由 守望者2481632 于 2020-3-6 09:54 编辑
我用guibuilder化了一个dialog,里面只包含了一个framewin,我想在framewin的客户区显示图片,但是图片太大了,没有足够的ram空间存放图片信息,所以我想分段显示,比如图片10k,我分10次显示,每次显示1k。
于是我对dialog的回调函数进行了测试。
发现如果触发了WM_PAINT,那么整个客户区都会重新绘制,那就不符合我的期望了。
如果不触发WM_PAINT,触发自定义的通知消息,我调用画点(GUI_DrawPoint)或者画线(GUI_DrawLine)函数,都无法在framewin的客户区显示。
还望大神们指点一二
这是emwin任务函数
void emwindemo_task(void *p_arg)
{
WM_HWIN hwin1;
WM_MESSAGE Msg;
BUTTON_SetDefaultSkin(BUTTON_SKIN_FLEX);
CHECKBOX_SetDefaultSkin(CHECKBOX_SKIN_FLEX);
DROPDOWN_SetDefaultSkin(DROPDOWN_SKIN_FLEX);
FRAMEWIN_SetDefaultSkin(FRAMEWIN_SKIN_FLEX);
HEADER_SetDefaultSkin(HEADER_SKIN_FLEX);
MENU_SetDefaultSkin(MENU_SKIN_FLEX);
MULTIPAGE_SetDefaultSkin(MULTIPAGE_SKIN_FLEX);
PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);
RADIO_SetDefaultSkin(RADIO_SKIN_FLEX);
SCROLLBAR_SetDefaultSkin(SCROLLBAR_SKIN_FLEX);
SLIDER_SetDefaultSkin(SLIDER_SKIN_FLEX);
SPINBOX_SetDefaultSkin(SPINBOX_SKIN_FLEX);
hwin1 = CreateFramewin1();
while(1)
{
GUI_Delay(100);
Msg.MsgId=WM_APP_SHOW_TEXT;
Msg.hWinSrc = WM_HBKWIN;
WM_SendMessage(WM_GetClientWindow(hwin1),&Msg);
}
}
这是dialog的回调函数
static void _cbDialog(WM_MESSAGE * pMsg)
{
WM_HWIN hItem;
static u16 x = 200;
static u16 y = 100;
switch (pMsg->MsgId)
{
case WM_INIT_DIALOG:
hItem = pMsg->hWin;
FRAMEWIN_SetTitleHeight(hItem, 30);
FRAMEWIN_SetFont(hItem, GUI_FONT_20_ASCII);
FRAMEWIN_SetText(hItem, "photo display area");
FRAMEWIN_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
FRAMEWIN_SetTextColor(hItem, 0x000000FF);
break;
case WM_APP_SHOW_TEXT:
GUI_SetColor(GUI_RED);
GUI_DrawPoint(x,y);
x++;
if(x >= 400)
{
x = 200;
y++;
}
if(y>=300)
{
y = 100;
}
break;
default:
WM_DefaultProc(pMsg);
break;
}
}
|
最佳答案
查看完整内容[请看2#楼]
打个广告算了,,关注我的github
https://github.com/WZTENG
里面的TSysMcu里面的图片显示,,就是在fragment中加个window直接显示图片的
|