硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1368|回复: 4
收起左侧

[GUI] 如何去掉framewin中的”锯齿“

[复制链接]

4

主题

9

回帖

21

积分

新手上路

积分
21
发表于 2019-7-8 20:40:53 | 显示全部楼层 |阅读模式
codeblock下仿真没什么问题,但是移植后出现锯齿,怎么解决?下面是代码:


GUI_Init();
WM_MULTIBUF_Enable(1);
WM_SetCreateFlags(WM_CF_MEMDEV);

GUI_AA_EnableHiRes();
GUI_AA_SetFactor(6);
extern void GUI_UC_SetEncodeGBK(void);       
        GUI_UC_SetEncodeGBK();//将汉字解码编码成16为码值
  GUI_DrawBitmap(&bmarmfly, 0, 0);
        Delay_ms(1000);
        //GUI_Delay(2000);
       
extern WM_HWIN CreateFramewin1(void);
        hPage[0] = CreateFramewin1();                        //创建窗体,父窗体是桌面背景
extern WM_HWIN CreateFramewin2(void);       
        hPage[1] = CreateFramewin2();                        //创建窗体,父窗体是桌面背景
extern WM_HWIN CreateWindowSKB(void);
        hPage[2] = CreateWindowSKB();
        WM_AttachWindow(hPage[2], hPage[0]);//将hPage[2]附加在hPage[0]窗口上
        WM_HideWindow(hPage[1]);
        WM_HideWindow(hPage[2]);
        WM_SetFocus(hPage[0]);
WM_Exec();
        if(GUI_ALLOC_GetNumFreeBytes() < 3200) GUI_ErrorOut("Not enough memory available.");


1.PNG
回复

使用道具 举报

23

主题

1406

回帖

1475

积分

至尊会员

积分
1475
发表于 2019-7-9 09:16:35 | 显示全部楼层
这个像是你的硬件通信出问题了,有通信干扰造成的。

特别是显存通信接口干扰
代码不规范,亲人两行泪!
回复

使用道具 举报

4

主题

9

回帖

21

积分

新手上路

积分
21
 楼主| 发表于 2019-7-9 13:49:27 | 显示全部楼层
missfox 发表于 2019-7-9 09:16
这个像是你的硬件通信出问题了,有通信干扰造成的。

特别是显存通信接口干扰

要是window就看不见,那是为何?
回复

使用道具 举报

23

主题

1406

回帖

1475

积分

至尊会员

积分
1475
发表于 2019-7-9 14:19:24 | 显示全部楼层
liuyawe_R6ilq 发表于 2019-7-9 13:49
要是window就看不见,那是为何?

这样的话,你的底层驱动应该有问题,FrameWin的边界用到垂直绘制。
代码不规范,亲人两行泪!
回复

使用道具 举报

4

主题

9

回帖

21

积分

新手上路

积分
21
 楼主| 发表于 2019-7-10 20:58:47 | 显示全部楼层
missfox 发表于 2019-7-9 14:19
这样的话,你的底层驱动应该有问题,FrameWin的边界用到垂直绘制。

我把其中一个贴出来了,能给看看哪儿不对么?
#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;
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-19 23:31 , Processed in 0.165766 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表