硬汉嵌入式论坛

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

[emWin] 关于存储设备在窗体/控件上使用的问题

[复制链接]

9

主题

42

回帖

69

积分

初级会员

大牛的形成也是时间与技术的积累

积分
69
QQ
发表于 2016-12-21 09:06:26 | 显示全部楼层 |阅读模式

需要在直线上显示平行文字

需要在直线上显示平行文字

字符任意角度旋转

字符任意角度旋转



先看上图吧,我想实现的功能就是在把右图的经过旋转的文字放到左图的直线上去,而不是文字水平放置,文字需与直线平行的功能.左图是建立在FRAWIN窗体上的WINDOWS子窗体内的,而右图是单独实现的一个例子,实现方法在<emWin5.30参考手册.pdf>第339页上有, 使用两个存储设备,源存储设备经旋转到放到目标存储设备,目标存储设备采用GUI_MEMDEV_WriteAt(hMemDest, x, y);或GUI_MEMDEV_CopyToLCDAt(hMemDest, x, y);等方式直接显示到LCD. 看了好多存储设备的好多例子最终输出基本都是这样的,但我不是直接输出到桌面WINDOWS,而是要放到窗体上,我试了在WM_PAINT消息中调用右边的显示函数, 也不行.只要建立了窗体,然后再调存储设备显示函数,就显示不了,如
hBkDist = WM_CreateWindowAsChild(0, 0, 480, 800, WM_HBKWIN, WM_CF_SHOW, 0, 0);  //屏蔽这句可以正常显示

_DrawPytha2PText(_drawText, "costar", 30, 1, 100, 100);
while(1)
{        
    GUI_Delay(50);         
}
哪位能给点头绪?

MemDev.txt

4 KB, 下载次数: 64

存储设备源码

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115728
QQ
发表于 2016-12-21 10:04:40 | 显示全部楼层
你的这个函数WM_CreateWindowAsChild的倒数第2个参数是回调函数,你没有设置,将其放在这个回调函数的WM_PAINT消息里面就可以了。
回复

使用道具 举报

9

主题

42

回帖

69

积分

初级会员

大牛的形成也是时间与技术的积累

积分
69
QQ
 楼主| 发表于 2016-12-21 10:20:49 | 显示全部楼层

回 eric2013 的帖子

eric2013:你的这个函数WM_CreateWindowAsChild的倒数第2个参数是回调函数,你没有设置,将其放在这个回调函数的WM_PAINT消息里面就可以了。 (2016-12-21 10:04) 
hBkDist = WM_CreateWindowAsChild(0, 0, 480, 800, WM_HBKWIN, WM_CF_SHOW, _cbBkPytha2PMeasWin, 0);

static void _cbBkPytha2PMeasWin(WM_MESSAGE * pMsg)
{
    WM_HWIN hWin = pMsg->hWin;
    //WM_SCROLL_STATE ScrollState;
    //int x,y;
    static WM_HWIN hTimer;
    static GUI_MEMDEV_Handle hSrc;
    GUI_RECT pRect = {0,0,480,650};
    GUI_POINT po[2] = {{112,595},{280,400}};

    switch (pMsg->MsgId)
    {
        case WM_CREATE:
            //hTimer = WM_CreateTimer(hWin, 0, 200, 0);
            //hSrc = DrawPytha2PText();
            //_DrawPytha2PText(_drawText, "costar", 30, 1, 100, 100);
            break;

        case WM_TIMER:
            cor_toggle = (~cor_toggle) & 0x01;
            //WM_InvalidateWindow(hWin);
            WM_InvalidateRect(hWin, &pRect);
            WM_RestartTimer(hTimer, 300);
            break;

        case WM_NOTIFY_PARENT:

        break;
   
        case WM_PAINT:
            GUI_SetColor(CLIENT_BKC);
            GUI_FillRect(0, 0, WM_GetWindowSizeX(hWin), WM_GetWindowSizeY(hWin));

            //_DrawRightTriangleAt(120, 80);
            GUI_DrawGradientV(0, 0, WM_GetWindowSizeX(hWin), 30, 0x5A3FFC, 0xB9ADFC);
            GUI_DrawHLine(330, 0, WM_GetWindowSizeX(hWin));
            //_ShowStreamBitmap("0:/PHOTO/Navi_MagVar.dta",0,650);

            DrawImaginaryLine(&po[0], &po[1], cor_toggle);
            GUI_AA_DrawLine(112, 595, 350, 500);
            _DrawPytha2PText(_drawText, "costar", 30, 1, 100, 100);
            break;
            
        case WM_TOUCH:            
            break;
            
            
        default:        
            WM_DefaultProc(pMsg);   
    }
}

不行的,一开始我就是写在WM_PAINT里的,后面发现不会,才改了前面那个简单的测试程序
回复

使用道具 举报

9

主题

42

回帖

69

积分

初级会员

大牛的形成也是时间与技术的积累

积分
69
QQ
 楼主| 发表于 2016-12-21 10:21:48 | 显示全部楼层

回 eric2013 的帖子

eric2013:你的这个函数WM_CreateWindowAsChild的倒数第2个参数是回调函数,你没有设置,将其放在这个回调函数的WM_PAINT消息里面就可以了。 (2016-12-21 10:04) 
hBkDist = WM_CreateWindowAsChild(0, 0, 480, 800, WM_HBKWIN, WM_CF_SHOW, _cbBkPytha2PMeasWin, 0);

static void _cbBkPytha2PMeasWin(WM_MESSAGE * pMsg)
{
    WM_HWIN hWin = pMsg->hWin;
    //WM_SCROLL_STATE ScrollState;
    //int x,y;
    static WM_HWIN hTimer;
    static GUI_MEMDEV_Handle hSrc;
    GUI_RECT pRect = {0,0,480,650};
    GUI_POINT po[2] = {{112,595},{280,400}};

    switch (pMsg->MsgId)
    {
        case WM_CREATE:
            //hTimer = WM_CreateTimer(hWin, 0, 200, 0);
            //hSrc = DrawPytha2PText();
            //_DrawPytha2PText(_drawText, "costar", 30, 1, 100, 100);
            break;

        case WM_TIMER:
            cor_toggle = (~cor_toggle) & 0x01;
            //WM_InvalidateWindow(hWin);
            WM_InvalidateRect(hWin, &pRect);
            WM_RestartTimer(hTimer, 300);
            break;

        case WM_NOTIFY_PARENT:

        break;
   
        case WM_PAINT:
            GUI_SetColor(CLIENT_BKC);
            GUI_FillRect(0, 0, WM_GetWindowSizeX(hWin), WM_GetWindowSizeY(hWin));

            //_DrawRightTriangleAt(120, 80);
            GUI_DrawGradientV(0, 0, WM_GetWindowSizeX(hWin), 30, 0x5A3FFC, 0xB9ADFC);
            GUI_DrawHLine(330, 0, WM_GetWindowSizeX(hWin));
            //_ShowStreamBitmap("0:/PHOTO/Navi_MagVar.dta",0,650);

            DrawImaginaryLine(&po[0], &po[1], cor_toggle);
            GUI_AA_DrawLine(112, 595, 350, 500);
            _DrawPytha2PText(_drawText, "costar", 30, 1, 100, 100);
            break;
            
        case WM_TOUCH:            
            break;
            
            
        default:        
            WM_DefaultProc(pMsg);   
    }
}

不行的,一开始我就是写在WM_PAINT里的,后面发现不会,才改了前面那个简单的测试程序
回复

使用道具 举报

9

主题

42

回帖

69

积分

初级会员

大牛的形成也是时间与技术的积累

积分
69
QQ
 楼主| 发表于 2016-12-21 10:22:33 | 显示全部楼层

回 eric2013 的帖子

eric2013:你的这个函数WM_CreateWindowAsChild的倒数第2个参数是回调函数,你没有设置,将其放在这个回调函数的WM_PAINT消息里面就可以了。 (2016-12-21 10:04) 
hBkDist = WM_CreateWindowAsChild(0, 0, 480, 800, WM_HBKWIN, WM_CF_SHOW, _cbBkPytha2PMeasWin, 0);

static void _cbBkPytha2PMeasWin(WM_MESSAGE * pMsg)
{
    WM_HWIN hWin = pMsg->hWin;
    //WM_SCROLL_STATE ScrollState;
    //int x,y;
    static WM_HWIN hTimer;
    static GUI_MEMDEV_Handle hSrc;
    GUI_RECT pRect = {0,0,480,650};
    GUI_POINT po[2] = {{112,595},{280,400}};

    switch (pMsg->MsgId)
    {
        case WM_CREATE:
            //hTimer = WM_CreateTimer(hWin, 0, 200, 0);
            //hSrc = DrawPytha2PText();
            //_DrawPytha2PText(_drawText, "costar", 30, 1, 100, 100);
            break;

        case WM_TIMER:
            cor_toggle = (~cor_toggle) & 0x01;
            //WM_InvalidateWindow(hWin);
            WM_InvalidateRect(hWin, &pRect);
            WM_RestartTimer(hTimer, 300);
            break;

        case WM_NOTIFY_PARENT:

        break;
   
        case WM_PAINT:
            GUI_SetColor(CLIENT_BKC);
            GUI_FillRect(0, 0, WM_GetWindowSizeX(hWin), WM_GetWindowSizeY(hWin));

            //_DrawRightTriangleAt(120, 80);
            GUI_DrawGradientV(0, 0, WM_GetWindowSizeX(hWin), 30, 0x5A3FFC, 0xB9ADFC);
            GUI_DrawHLine(330, 0, WM_GetWindowSizeX(hWin));
            //_ShowStreamBitmap("0:/PHOTO/Navi_MagVar.dta",0,650);

            DrawImaginaryLine(&po[0], &po[1], cor_toggle);
            GUI_AA_DrawLine(112, 595, 350, 500);
            _DrawPytha2PText(_drawText, "costar", 30, 1, 100, 100);
            break;
            
        case WM_TOUCH:            
            break;
            
            
        default:        
            WM_DefaultProc(pMsg);   
    }
}

不行的,一开始我就是写在WM_PAINT里的,后面发现不会,才改了前面那个简单的测试程序
回复

使用道具 举报

9

主题

42

回帖

69

积分

初级会员

大牛的形成也是时间与技术的积累

积分
69
QQ
 楼主| 发表于 2016-12-21 10:22:57 | 显示全部楼层
hBkDist = WM_CreateWindowAsChild(0, 0, 480, 800, WM_HBKWIN, WM_CF_SHOW, _cbBkPytha2PMeasWin, 0);

static void _cbBkPytha2PMeasWin(WM_MESSAGE * pMsg)
{
    WM_HWIN hWin = pMsg->hWin;
    //WM_SCROLL_STATE ScrollState;
    //int x,y;
    static WM_HWIN hTimer;
    static GUI_MEMDEV_Handle hSrc;
    GUI_RECT pRect = {0,0,480,650};
    GUI_POINT po[2] = {{112,595},{280,400}};

    switch (pMsg->MsgId)
    {
        case WM_CREATE:
            //hTimer = WM_CreateTimer(hWin, 0, 200, 0);
            //hSrc = DrawPytha2PText();
            //_DrawPytha2PText(_drawText, "costar", 30, 1, 100, 100);
            break;

        case WM_TIMER:
            cor_toggle = (~cor_toggle) & 0x01;
            //WM_InvalidateWindow(hWin);
            WM_InvalidateRect(hWin, &pRect);
            WM_RestartTimer(hTimer, 300);
            break;

        case WM_NOTIFY_PARENT:

        break;
   
        case WM_PAINT:
            GUI_SetColor(CLIENT_BKC);
            GUI_FillRect(0, 0, WM_GetWindowSizeX(hWin), WM_GetWindowSizeY(hWin));

            //_DrawRightTriangleAt(120, 80);
            GUI_DrawGradientV(0, 0, WM_GetWindowSizeX(hWin), 30, 0x5A3FFC, 0xB9ADFC);
            GUI_DrawHLine(330, 0, WM_GetWindowSizeX(hWin));
            //_ShowStreamBitmap("0:/PHOTO/Navi_MagVar.dta",0,650);

            DrawImaginaryLine(&po[0], &po[1], cor_toggle);
            GUI_AA_DrawLine(112, 595, 350, 500);
            _DrawPytha2PText(_drawText, "costar", 30, 1, 100, 100);
            break;
            
        case WM_TOUCH:            
            break;
            
            
        default:        
            WM_DefaultProc(pMsg);   
    }
}

不行的,一开始我就是写在WM_PAINT里的,后面发现不会,才改了前面那个简单的测试程序
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115728
QQ
发表于 2016-12-21 10:23:14 | 显示全部楼层
发个稍完整点的代码,下午有时间了我在模拟器上面给你测试下。
回复

使用道具 举报

9

主题

42

回帖

69

积分

初级会员

大牛的形成也是时间与技术的积累

积分
69
QQ
 楼主| 发表于 2016-12-21 10:23:42 | 显示全部楼层
hBkDist = WM_CreateWindowAsChild(0, 0, 480, 800, WM_HBKWIN, WM_CF_SHOW, _cbBkPytha2PMeasWin, 0);

static void _cbBkPytha2PMeasWin(WM_MESSAGE * pMsg)
{
    WM_HWIN hWin = pMsg->hWin;
    //WM_SCROLL_STATE ScrollState;
    //int x,y;
    static WM_HWIN hTimer;
    static GUI_MEMDEV_Handle hSrc;
    GUI_RECT pRect = {0,0,480,650};
    GUI_POINT po[2] = {{112,595},{280,400}};

    switch (pMsg->MsgId)
    {
        case WM_CREATE:
            //hTimer = WM_CreateTimer(hWin, 0, 200, 0);
            //hSrc = DrawPytha2PText();
            //_DrawPytha2PText(_drawText, "costar", 30, 1, 100, 100);
            break;

        case WM_TIMER:
            cor_toggle = (~cor_toggle) & 0x01;
            //WM_InvalidateWindow(hWin);
            WM_InvalidateRect(hWin, &pRect);
            WM_RestartTimer(hTimer, 300);
            break;

        case WM_NOTIFY_PARENT:

        break;
   
        case WM_PAINT:
            GUI_SetColor(CLIENT_BKC);
            GUI_FillRect(0, 0, WM_GetWindowSizeX(hWin), WM_GetWindowSizeY(hWin));

            //_DrawRightTriangleAt(120, 80);
            GUI_DrawGradientV(0, 0, WM_GetWindowSizeX(hWin), 30, 0x5A3FFC, 0xB9ADFC);
            GUI_DrawHLine(330, 0, WM_GetWindowSizeX(hWin));
            //_ShowStreamBitmap("0:/PHOTO/Navi_MagVar.dta",0,650);

            DrawImaginaryLine(&po[0], &po[1], cor_toggle);
            GUI_AA_DrawLine(112, 595, 350, 500);
            _DrawPytha2PText(_drawText, "costar", 30, 1, 100, 100);
            break;
            
        case WM_TOUCH:            
            break;
            
            
        default:        
            WM_DefaultProc(pMsg);   
    }
}

不行的,一开始我就是写在WM_PAINT里的,后面发现不会,才改了前面那个简单的测试程序
回复

使用道具 举报

9

主题

42

回帖

69

积分

初级会员

大牛的形成也是时间与技术的积累

积分
69
QQ
 楼主| 发表于 2016-12-21 10:24:31 | 显示全部楼层
hBkDist = WM_CreateWindowAsChild(0, 0, 480, 800, WM_HBKWIN, WM_CF_SHOW, _cbBkPytha2PMeasWin, 0);

static void _cbBkPytha2PMeasWin(WM_MESSAGE * pMsg)
{
    WM_HWIN hWin = pMsg->hWin;

    switch (pMsg->MsgId)
    {
        case WM_CREATE:
            break;

        case WM_TIMER:
            break;

        case WM_NOTIFY_PARENT:

        break;
   
        case WM_PAINT:
            GUI_SetColor(CLIENT_BKC);
            GUI_FillRect(0, 0, WM_GetWindowSizeX(hWin), WM_GetWindowSizeY(hWin));

            //_DrawRightTriangleAt(120, 80);
            GUI_DrawGradientV(0, 0, WM_GetWindowSizeX(hWin), 30, 0x5A3FFC, 0xB9ADFC);
            GUI_DrawHLine(330, 0, WM_GetWindowSizeX(hWin));
            //_ShowStreamBitmap("0:/PHOTO/Navi_MagVar.dta",0,650);

            DrawImaginaryLine(&po[0], &po[1], cor_toggle);
            GUI_AA_DrawLine(112, 595, 350, 500);
            _DrawPytha2PText(_drawText, "costar", 30, 1, 100, 100);
            break;
            
        case WM_TOUCH:            
            break;
            
            
        default:        
            WM_DefaultProc(pMsg);   
    }
}

不行的,一开始我就是写在WM_PAINT里的,后面发现不会,才改了前面那个简单的测试程序
回复

使用道具 举报

9

主题

42

回帖

69

积分

初级会员

大牛的形成也是时间与技术的积累

积分
69
QQ
 楼主| 发表于 2016-12-21 10:24:57 | 显示全部楼层
hBkDist = WM_CreateWindowAsChild(0, 0, 480, 800, WM_HBKWIN, WM_CF_SHOW, _cbBkPytha2PMeasWin, 0);

static void _cbBkPytha2PMeasWin(WM_MESSAGE * pMsg)
{
    WM_HWIN hWin = pMsg->hWin;

    switch (pMsg->MsgId)
    {
        case WM_CREATE:
            break;

        case WM_TIMER:
            break;

        case WM_NOTIFY_PARENT:

        break;
   
        case WM_PAINT:            
            _DrawPytha2PText(_drawText, "costar", 30, 1, 100, 100);
            break;
            
        case WM_TOUCH:            
            break;
            
            
        default:        
            WM_DefaultProc(pMsg);   
    }
}

不行的,一开始我就是写在WM_PAINT里的,后面发现不会,才改了前面那个简单的测试程序
回复

使用道具 举报

9

主题

42

回帖

69

积分

初级会员

大牛的形成也是时间与技术的积累

积分
69
QQ
 楼主| 发表于 2016-12-21 10:26:56 | 显示全部楼层
hBkDist = WM_CreateWindowAsChild(0, 0, 480, 800, WM_HBKWIN, WM_CF_SHOW, _cbBkPytha2PMeasWin, 0);

static void _cbBkPytha2PMeasWin(WM_MESSAGE * pMsg)
{
     switch (pMsg->MsgId)
    {
         case WM_NOTIFY_PARENT:

        break;

         case WM_PAINT:
                  _DrawPytha2PText(_drawText, "costar", 30, 1, 100, 100);
         break;     

         default:        
            WM_DefaultProc(pMsg);
    }
}

不行的,一开始我就是写在WM_PAINT里的,后面发现不会,才改了前面那个简单的测试程序
回复

使用道具 举报

9

主题

42

回帖

69

积分

初级会员

大牛的形成也是时间与技术的积累

积分
69
QQ
 楼主| 发表于 2016-12-21 10:29:34 | 显示全部楼层
额,不好意思,发贴时总是提示UTF-8错误,重复发了好多次还是错误,刷新一下发现全正常发出去了
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115728
QQ
发表于 2016-12-21 10:32:29 | 显示全部楼层

回 costar 的帖子

costar:额,不好意思,发贴时总是提示UTF-8错误,重复发了好多次还是错误,刷新一下发现全正常发出去了 (2016-12-21 10:29) 
没事,这个是我们论坛的bug,出现这个错误,不用管它,一般都是发送成功了。

另外,你发个稍完整点的代码,下午有时间了我在模拟器上面给你测试下。
回复

使用道具 举报

9

主题

42

回帖

69

积分

初级会员

大牛的形成也是时间与技术的积累

积分
69
QQ
 楼主| 发表于 2016-12-21 11:12:08 | 显示全部楼层
直接把那两源文件放到 安富莱_STM32-V6开发板\\emwin\\SeggerEval_WIN32_MSVC_MinGW_GUI_V532\\Sample\\Tutorial下就行了,我也是用这个模拟的,开发板实测效果也一样.谢谢! 项目急用,看能不能解决下

MemDev.rar

5 KB, 下载次数: 58

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115728
QQ
发表于 2016-12-21 14:33:54 | 显示全部楼层
1.png

2.png

666.png

================================
显示效果如下:
555555.png
回复

使用道具 举报

9

主题

42

回帖

69

积分

初级会员

大牛的形成也是时间与技术的积累

积分
69
QQ
 楼主| 发表于 2016-12-21 17:12:08 | 显示全部楼层
多谢eric,成功显示了 1482311443483.jpg
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-14 16:04 , Processed in 0.629728 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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