硬汉嵌入式论坛

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

[emWin] 请教一下关于emwin的窗口重绘

[复制链接]

6

主题

12

回帖

30

积分

新手上路

积分
30
发表于 2018-3-16 10:04:22 | 显示全部楼层 |阅读模式
WM_HWIN GhManuList;

static const GUI_WIDGET_CREATE_INFO _aManuList[] =
{
    { WINDOW_CreateIndirect,   NULL, MANU_WINDOW,    0,     0, 320, 480, 0},
    { TEXT_CreateIndirect,     NULL, MANU_TEXT,      0,     0, 320,  35, 0},
    { LISTVIEW_CreateIndirect, NULL, MANU_LISTVIEW,  5,    35, 310, 386, 0},
    { BUTTON_CreateIndirect,   NULL, MANU_SEARCH,    5,   430,  74,  40, 0},
    { BUTTON_CreateIndirect,   NULL, MANU_DETERMINE, 123, 430,  74,  40, 0},
    { BUTTON_CreateIndirect,   NULL, MANU_LANG,      241, 430,  74,  40, 0}
};
static void _cbManuList (WM_MESSAGE * pMsg)
{
    WM_HWIN     hWin, hList, hItem, hSearch, hDeter, hLang;
    int         ulId, ulNCode;
    GUI_RECT    Rect;
    int         cnt = 1;
   
    BUTTON_SetDefaultFont(&GUI_FontHZ16);
    BUTTON_SetDefaultTextAlign(GUI_TA_HCENTER | GUI_TA_VCENTER);
    BUTTON_SetDefaultTextColor(GUI_BLUE, BUTTON_CI_UNPRESSED);
   
    hWin = pMsg->hWin;
    switch(pMsg->MsgId)
    {
    case WM_PAINT:
        WM_GetClientRectEx(hWin, &Rect);
        GUI_DrawGradientV(Rect.x0, Rect.y0, Rect.x1, Rect.y1, 0xFF8080, 0x8080FF);
        break;
   
    case WM_INIT_DIALOG:     
        hItem = WM_GetDialogItem(hWin, MANU_TEXT);
        TEXT_SetFont(hItem, &GUI_FontHZ24);
        if (!GucKeyFlag)
            TEXT_SetText(hItem, ManuListEng[0]);
        else
            TEXT_SetText(hItem, ManuListCh[0]);
        TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
        
        hList = WM_GetDialogItem(hWin, MANU_LISTVIEW);
        LISTVIEW_SetFont(hList, &GUI_FontHZ16);
        LISTVIEW_SetGridVis(hList, 1);
        LISTVIEW_SetRowHeight(hList, 30);   
        if (!GucKeyFlag)
        {
            LISTVIEW_AddColumn(hList, 50, ManuListEng[4], GUI_TA_HCENTER | GUI_TA_VCENTER);
            LISTVIEW_AddColumn(hList, 50, ManuListEng[5], GUI_TA_HCENTER | GUI_TA_VCENTER);
            LISTVIEW_AddColumn(hList, 175, ManuListEng[6], GUI_TA_HCENTER | GUI_TA_VCENTER);
        }
        else
        {
            LISTVIEW_AddColumn(hList, 50, ManuListCh[4], GUI_TA_HCENTER | GUI_TA_VCENTER);
            LISTVIEW_AddColumn(hList, 50, ManuListCh[5], GUI_TA_HCENTER | GUI_TA_VCENTER);
            LISTVIEW_AddColumn(hList, 175, ManuListCh[6], GUI_TA_HCENTER | GUI_TA_VCENTER);
        }
        HEADER_SetFont(LISTVIEW_GetHeader(hList), &GUI_FontHZ16);
        HEADER_SetHeight(LISTVIEW_GetHeader(hList), 30);
   
        SCROLLBAR_CreateAttached(hList, SCROLLBAR_CF_VERTICAL);
        hItem = WM_GetScrollbarV(hList);
        SCROLLBAR_SetWidth(hItem, 35);
        SCROLLBAR_SetThumbSizeMin(18);
        
        hSearch = WM_GetDialogItem(hWin, MANU_SEARCH);
        hDeter = WM_GetDialogItem(hWin, MANU_DETERMINE);        
        hLang = WM_GetDialogItem(hWin, MANU_LANG);
        
        if (!GucKeyFlag)
        {
            BUTTON_SetText(hSearch, ManuListEng[1]);
            BUTTON_SetText(hDeter, ManuListEng[2]);
            BUTTON_SetText(hLang, ManuListEng[3]);
        }            
        else
        {
            BUTTON_SetText(hSearch, ManuListCh[1]);  
            BUTTON_SetText(hDeter, ManuListCh[2]);
            BUTTON_SetText(hLang, ManuListCh[3]);
        }
        break;
        
    case WM_NOTIFY_PARENT:
        ulId = WM_GetId(pMsg->hWinSrc);
        ulNCode = pMsg->Data.v;
        
        switch (ulNCode)
        {
        case WM_NOTIFICATION_CLICKED:
            break;
        
        case WM_NOTIFICATION_RELEASED:
            if (ulId == MANU_LISTVIEW)
            {
            
            }
            else if (ulId == MANU_DETERMINE)
            {
                WM_HideWindow(GhManuList);
                WM_ShowWindow(GhMainWin);           
            }
            else if (ulId == MANU_LANG)
            {
               
                GucKeyFlag = (cnt % 2);
                cnt++;
                WM_Paint(GhManuList);
            }
        }
        break;
    default:
        WM_DefaultProc(pMsg);
        break;
    }
}
WM_HWIN CreateManuList (WM_HWIN hWin)
{
    GhManuList = GUI_CreateDialogBox(_aManuList, GUI_COUNTOF(_aManuList), _cbManuList, WM_HBKWIN, 0, 0);
    return GhManuList;
}


以上是我的代码,我本来想在点击MANU_LANG这个ID所对应的窗口之后,窗口中的控件进行中英文切换。
但是由于我这个窗口在一开始就已经创建,所以点击MANU_LANG,控件并没有切换中英文,但是在这个窗口下的子窗口(我用了创建和删除窗口操作)就可以进行切换,所以似乎需要在窗口重绘的时候才能切换字体。
希望有大神能够帮忙解答一下如何才能使得窗口进行中英文切换,谢谢!
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115754
QQ
发表于 2018-3-16 10:51:41 | 显示全部楼层
如果在当前页面,点击就要生效的话,暂时我也没有好的思路,可以在按钮切换消息里面统一将这些控件的显示内容重新设置下。
回复

使用道具 举报

6

主题

12

回帖

30

积分

新手上路

积分
30
 楼主| 发表于 2018-3-16 11:03:55 | 显示全部楼层
eric2013 发表于 2018-3-16 10:51
如果在当前页面,点击就要生效的话,暂时我也没有好的思路,可以在按钮切换消息里面统一将这些控件的显示内 ...

这样也可以实现,但是如果我还设置了B窗口和这个A窗口同时在上电后创建,然后只显示A窗口,那么B窗口的控件显示无法做这种切换处理(不同的窗口的控件句柄是局部变量)。除非我把B窗口设置为触发消息后创建及删除。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115754
QQ
发表于 2018-3-16 11:07:13 | 显示全部楼层
哈? 发表于 2018-3-16 11:03
这样也可以实现,但是如果我还设置了B窗口和这个A窗口同时在上电后创建,然后只显示A窗口,那么B窗口的控 ...

发自定义消息给窗口B
回复

使用道具 举报

6

主题

12

回帖

30

积分

新手上路

积分
30
 楼主| 发表于 2018-3-16 11:30:47 | 显示全部楼层
eric2013 发表于 2018-3-16 11:07
发自定义消息给窗口B

不太明白, 这个自定义消息里面应该写什么,才能够通知B窗口
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115754
QQ
发表于 2018-3-16 11:34:39 | 显示全部楼层
哈? 发表于 2018-3-16 11:30
不太明白, 这个自定义消息里面应该写什么,才能够通知B窗口

可以学习我们新版emWin教程的自定义emWin消息的实现,窗口B接收到消息后,更新即可。
http://www.armbbs.cn/forum.php?m ... &extra=page%3D1
回复

使用道具 举报

6

主题

12

回帖

30

积分

新手上路

积分
30
 楼主| 发表于 2018-3-16 11:36:17 | 显示全部楼层
eric2013 发表于 2018-3-16 11:34
可以学习我们新版emWin教程的自定义emWin消息的实现,窗口B接收到消息后,更新即可。
http://forum.armf ...

谢谢
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-16 08:12 , Processed in 0.593957 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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