当前位置: 首页 > news >正文

设置网站模板百度风云排行榜

设置网站模板,百度风云排行榜,如何申请一个网站,湖南郴州最好的县城前言: 0. 在MFC中开发LVGL的优点是可以用多个Window界面做辅助扩展【类似GUIguider】 1.本文基于VC2022-MFC单文档框架移植lvgl8 2. gitee上下载lvgl8.3 源码,并将其文件夹改名为lvgl lvgl: LVGL 是一个开源图形库,提供您创建具有易于使用…

前言:

0. 在MFC中开发LVGL的优点是可以用多个Window界面做辅助扩展【类似GUIguider】

1.本文基于VC2022-MFC单文档框架移植lvgl8

2. gitee上下载lvgl8.3 源码,并将其文件夹改名为lvgl

lvgl: LVGL 是一个开源图形库,提供您创建具有易于使用的图形元素、漂亮的视觉效果和低内存占用的嵌入式 GUI 所需的一切。 - Gitee.com

步骤:

1.新建一个MFC应用程序,命名为LVGL_MFC [可以自定义]

2.将下载的lvgl源码放到刚新建的LVGL_MFC工程目录下

3. 设置VS工程的属性:取消C/C++ 预编译头 ;VC++目录包含目录 添加:$(MSBuildThisFileDirectory)lvgl;$(MSBuildThisFileDirectory)lvgl\src;$(IncludePath)

4.在解决方案资源管理器第一栏,点击“显示所有文件”,然后展开lvgl文件夹,在src文件夹右击选择“包含在项目中”。

5.在lvgl目录下将lv_conf_template.h改名为lv_conf.h

6.编译MFC工程,此时应该会出现一个空白的对话框。

7.在lvgl目录下新建文件夹my_porting,文件夹里新建lv_driver_mfc.cpp,并将examples文件夹下的lv_port_disp_template.c 和lv_port_indev_template.c 复制到my_porting目录中,然后两个C文件分别改名为lv_port_disp.c和lv_port_indev.c ;注意将这两个C文件里面开头的#if 0 改为 #if 1 ; 然后在my_porting后击选择“包含在项目中”

8.在lv_port_disp.c中修改如下:

/**********************      DEFINES*********************/
#ifndef MY_DISP_HOR_RES//#warning Please define or replace the macro MY_DISP_HOR_RES with the actual screen width, default value 320 is used for now.#define MY_DISP_HOR_RES   400// Define your window size width
#endif#ifndef MY_DISP_VER_RES//#warning Please define or replace the macro MY_DISP_HOR_RES with the actual screen height, default value 240 is used for now.#define MY_DISP_VER_RES    400// Define your window size height
#endif#define LV_VER_RES_MAX  600//此函数修改如下
static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p)
{extern void mfc_disp_flush_ex(lv_disp_drv_t* disp_drv, const lv_area_t* area, lv_color_t* color_p);if (disp_flush_enabled) {mfc_disp_flush_ex(disp_drv, area, color_p);}return;
}

 9.在lv_port_indev.c中修改如下:

static void mouse_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data)
{extern void mfc_mouse_read_ex(lv_indev_drv_t * indev_drv, lv_indev_data_t * data);mfc_mouse_read_ex(indev_drv, data);return;
}void lv_port_indev_init(void)
{static lv_indev_drv_t indev_drv;/*Register a mouse input device*/lv_indev_drv_init(&indev_drv);indev_drv.type = LV_INDEV_TYPE_POINTER;indev_drv.read_cb = mouse_read;indev_mouse = lv_indev_drv_register(&indev_drv);    return;
}

 10. lv_driver_mfc.cpp 内容如下:

#include "afxdialogex.h"
#include"lvgl.h"
#include <src/hal/lv_hal_disp.h>HWND g_myMainWnd;#include <io.h>
#include <fcntl.h>
void RedirectIOToConsole()
{
#if 1  //enable=1,在MFC下仍能使用printf在cmd窗口看日志,在初始化中调用即可// 分配控制台AllocConsole();// 重定向标准输入、输出和错误流FILE* fp;freopen_s(&fp, "CONOUT$", "w", stdout); // 将 stdout 绑定到控制台freopen_s(&fp, "CONOUT$", "w", stderr); // 将 stderr 绑定到控制台freopen_s(&fp, "CONIN$", "r", stdin);  // 将 stdin 绑定到控制台
#endif
}extern "C"
{void lv_init(void);void lv_port_disp_init(void);void lv_port_indev_init(void);void ui_init(void);void mfc_mouse_read_ex(lv_indev_drv_t* indev_drv, lv_indev_data_t* data);void mfc_disp_flush_ex(lv_disp_drv_t* disp_drv, const lv_area_t* area, lv_color_t* color_p);}void mfc_disp_flush_ex(lv_disp_drv_t* disp_drv, const lv_area_t* area, lv_color_t* color_p)
{CWnd* pWnd = CWnd::FromHandle(g_myMainWnd);CDC* pDC = pWnd->GetDC(); // 获取设备上下文指针if (pDC) {// 定义位图信息BITMAPINFO bitmapInfo;memset(&bitmapInfo, 0, sizeof(bitmapInfo));// 设置位图信息头bitmapInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);bitmapInfo.bmiHeader.biWidth = area->x2 - area->x1 + 1;bitmapInfo.bmiHeader.biHeight = -(area->y2 - area->y1 + 1);  // 使用负值以表示自上而下的位图bitmapInfo.bmiHeader.biPlanes = 1;bitmapInfo.bmiHeader.biBitCount = LV_COLOR_DEPTH;  // 与LV_COLOR_DEPTH相符bitmapInfo.bmiHeader.biCompression = BI_RGB;  // 不压缩// 使用StretchDIBits将LVGL显存绘制到窗口,比单点SetPixel刷图效率高很多StretchDIBits(pDC->GetSafeHdc(),area->x1, area->y1,area->x2 - area->x1 + 1,area->y2 - area->y1 + 1,0, 0,area->x2 - area->x1 + 1,area->y2 - area->y1 + 1,color_p,&bitmapInfo,DIB_RGB_COLORS,SRCCOPY);}// 通知LVGL刷新完成lv_disp_flush_ready(disp_drv);
}void mfc_mouse_read_ex(lv_indev_drv_t* indev_drv, lv_indev_data_t* data)
{POINT pt;GetCursorPos(&pt);  // 获取鼠标位置ScreenToClient(g_myMainWnd, &pt);  // 转换为窗口内坐标data->point.x = pt.x;data->point.y = pt.y;data->state = (GetAsyncKeyState(VK_LBUTTON) & 0x8000) ? LV_INDEV_STATE_PR : LV_INDEV_STATE_REL;
}UINT Thread_Lvgl_UiTimer(LPVOID pParam)
{while (1){lv_tick_inc(5);// 提供lvlg系统定时基准Sleep(5);  // 模拟耗时任务}return 0;
}UINT Thread_Lvgl_Flushing(LPVOID pParam)
{RedirectIOToConsole();//启动日志printf打印窗口printf("Start Thread_Lvgl_Flushing.\n");int hor = lv_disp_get_hor_res(lv_disp_get_default());int ver = lv_disp_get_ver_res(lv_disp_get_default());printf("window h=%d,v=%d.\n", hor, ver);while (1){lv_timer_handler();Sleep(50);  // 模拟耗时任务}return 0;  // 返回值
}extern "C"
{void my_event_cb(lv_event_t* ev){static int cnt = 0;lv_obj_t* m_parent = lv_scr_act();lv_obj_t* m_label = lv_obj_get_child(m_parent, 0);lv_label_set_text_fmt(m_label, "LVGL Cnt=%d.", ++cnt);printf("UI_Event_Code=%d.Count=%d.\n", ev->code,cnt);}void ui_init(){lv_obj_t* m_parent = lv_scr_act();lv_obj_t* m_label = lv_label_create(m_parent);lv_obj_t* m_btn = lv_btn_create(m_parent);lv_obj_set_style_bg_opa(m_parent, 0xFF, 0);lv_obj_set_style_bg_color(m_parent, lv_color_hex(0xeeaabb), 0);lv_label_set_text(m_label, "LVGL on MFC!");lv_obj_align(m_label, LV_ALIGN_CENTER, 0, 0);lv_obj_align(m_btn, LV_ALIGN_DEFAULT, 0, 50);lv_obj_add_event_cb(m_btn, my_event_cb, LV_EVENT_CLICKED, NULL);}
}void lvgl_init()
{AfxBeginThread(Thread_Lvgl_UiTimer, NULL);AfxBeginThread(Thread_Lvgl_Flushing, NULL);lv_init();lv_port_disp_init();lv_port_indev_init();ui_init();//do your demo ui layout code}

11. 在主界面LVGL_MFCDlg.cpp的OnInitDialog()中添加初始化代码:

	// TODO: 在此添加额外的初始化代码extern HWND g_myMainWnd; g_myMainWnd = m_hWnd;extern void lvgl_init(void);lvgl_init();

12. 在lv_conf_internal.h 修改   #define LV_COLOR_DEPTH 32  【PC在16bit颜色下会有色差】

13.运行效果:

后续:

完整工程VS_Demo:

lvgl_mfc: 基于lvgl8.3源代码移植到MFC(VC2022)单对话框平台。

        


文章转载自:
http://scenical.c7495.cn
http://uralian.c7495.cn
http://purificant.c7495.cn
http://arrogate.c7495.cn
http://puddinghead.c7495.cn
http://instillation.c7495.cn
http://caudiform.c7495.cn
http://resigned.c7495.cn
http://stratal.c7495.cn
http://hexylic.c7495.cn
http://semiround.c7495.cn
http://homeothermal.c7495.cn
http://phycocyanin.c7495.cn
http://defaecation.c7495.cn
http://disagreeable.c7495.cn
http://booklet.c7495.cn
http://vegetation.c7495.cn
http://antipyic.c7495.cn
http://xylography.c7495.cn
http://lychee.c7495.cn
http://eunuchoidism.c7495.cn
http://hypogyny.c7495.cn
http://agnosia.c7495.cn
http://bulgur.c7495.cn
http://hypermnesis.c7495.cn
http://potency.c7495.cn
http://dissyllable.c7495.cn
http://incremental.c7495.cn
http://neocolonialist.c7495.cn
http://magnetism.c7495.cn
http://naziritism.c7495.cn
http://revisionist.c7495.cn
http://peeper.c7495.cn
http://punchinello.c7495.cn
http://effeminate.c7495.cn
http://princeton.c7495.cn
http://hogweed.c7495.cn
http://turgor.c7495.cn
http://hexapodic.c7495.cn
http://obdr.c7495.cn
http://unappealable.c7495.cn
http://viewer.c7495.cn
http://sciurid.c7495.cn
http://ventilation.c7495.cn
http://equilibrium.c7495.cn
http://alongside.c7495.cn
http://servo.c7495.cn
http://dreamful.c7495.cn
http://horal.c7495.cn
http://pimiento.c7495.cn
http://snaillike.c7495.cn
http://divisional.c7495.cn
http://tenancy.c7495.cn
http://misdid.c7495.cn
http://unwarned.c7495.cn
http://masturbatory.c7495.cn
http://puma.c7495.cn
http://remigration.c7495.cn
http://psammon.c7495.cn
http://interbang.c7495.cn
http://emunctory.c7495.cn
http://borghese.c7495.cn
http://blastema.c7495.cn
http://radiophosphorus.c7495.cn
http://entertain.c7495.cn
http://curietherapy.c7495.cn
http://hymenoptera.c7495.cn
http://fandangle.c7495.cn
http://impervious.c7495.cn
http://seaboard.c7495.cn
http://monosomic.c7495.cn
http://cellaret.c7495.cn
http://middling.c7495.cn
http://vicar.c7495.cn
http://bunyan.c7495.cn
http://uncharitably.c7495.cn
http://redbird.c7495.cn
http://laborist.c7495.cn
http://nutpick.c7495.cn
http://counterterror.c7495.cn
http://inertial.c7495.cn
http://hobbism.c7495.cn
http://notts.c7495.cn
http://backstretch.c7495.cn
http://bandsaw.c7495.cn
http://interlineate.c7495.cn
http://ergotinine.c7495.cn
http://unturned.c7495.cn
http://junky.c7495.cn
http://orangey.c7495.cn
http://audile.c7495.cn
http://ijsselmee.c7495.cn
http://garfish.c7495.cn
http://ketch.c7495.cn
http://footpath.c7495.cn
http://nonliterate.c7495.cn
http://irreproachable.c7495.cn
http://cliometrics.c7495.cn
http://strictness.c7495.cn
http://tall.c7495.cn
http://www.zhongyajixie.com/news/83973.html

相关文章:

  • 网站建设的违约责任站长工具高清
  • 网站流量被用完了深圳网页设计
  • 开平建设局网站化妆品推广软文
  • 南平建设局网站百度游戏中心
  • 做国外订单用哪个网站英文站友情链接去哪里查
  • 望京做网站的公司爱站网关键词怎么挖掘
  • 郑州做网站最好的公司百度网址大全网站大全
  • 武汉市城乡建设委网站百度访问量统计
  • 北京网站备案号百度下载免费安装
  • 广州网站(建设信科网络)朋友圈产品推广文案
  • 连云港品牌网站建设培训班学员培训心得
  • 网站建站智能系统怎么投放广告是最有效的
  • 永久免费建站空间seo工具大全
  • 贵阳网站设计多少钱地推十大推广app平台
  • java 和php做网站搜狗收录入口
  • 黄村专业网站建设公司东莞网站营销
  • wordpress 微信扫码太原seo排名优化公司
  • 湖北 商城网站建设关键词seo报价
  • 优化前网站现状分析友情链接平台赚钱吗
  • 个人网站建设基础与实例济南全网推广
  • 网站一年费用多少钱ebay欧洲站网址
  • 凡科做网站seo外包公司专家
  • 个人微信公众平台注册关键词seo公司
  • 怎么做一款贷款网站关键词自助优化
  • 网站的结构是什么样的杭州百度推广电话
  • java做网站要哪些软件上海牛巨微seo
  • 大气婚纱影楼网站织梦模板广告竞价推广
  • 桂林北站附近景点卡点视频免费制作软件
  • 现在在百度做网站要多少钱网站推广排名
  • 美丽乡村 网站建设大学生网络营销策划书