emWin实现BMP位图皮肤之Scrollbar篇
来源:互联网 发布:大逆之门txt知白下载 编辑:程序博客网 时间:2024/05/21 17:18
1)emWin传统贴皮肤图片的方法,是调用APP函数XXXX_SetBitmap()方式实现,但非常非常麻烦。
2)要想把控件显示出来,emWin每种控件都有1个控件绘制函数,而把这个控件绘制函数改成我们自己编写的"自定义绘制函数",这样我们想把这个控件画成什么样都行,emWin已经不参与这个控件的绘制工作了;在这个自定义绘制函数里面我们什么都不干,只显示出这个控件的图片,这就是用skinning方式实现位图皮肤。
3)支持整幅图片贴图,不需要对整幅图片进行切片分解,非常便捷。
如上图所示,(x0,y0)为整幅图片的显示坐标,(x1,y1)和(x2,y2)是emWin为控件自动生成的剪切显示坐标,我们只需要调用GUI_DrawBitmap()函数在(x0,y0)显示整幅图片即可,emWin会自动剪切显示出该控件的位图皮肤,功能非常强大。
(2)Scrollbar控件的自定义绘制函数:
SKIN_scrollbar.c
skinning.h
- #include "DIALOG.h"
- #include "gui.h"
- #include "skinning.h"
- //获取父窗口句柄,即主页面句柄,保存着页面位图的指针
- static WM_HWIN WM_GetParent1C(WM_HWIN hChild) {return hChild;}
- static WM_HWIN WM_GetParent2C(WM_HWIN hChild) {return WM_GetParent(hChild);}
- static WM_HWIN WM_GetParent3C(WM_HWIN hChild) {return WM_GetParent(WM_GetParent(hChild));}
- static WM_HWIN WM_GetParent4C(WM_HWIN hChild) {return WM_GetParent(WM_GetParent(WM_GetParent(hChild)));}
- static WM_HWIN WM_GetParent5C(WM_HWIN hChild) {return WM_GetParent(WM_GetParent(WM_GetParent(WM_GetParent(hChild))));}
- static WM_HWIN WM_GetParent6C(WM_HWIN hChild) {return WM_GetParent(WM_GetParent(WM_GetParent(WM_GetParent(WM_GetParent(hChild)))));}
- static WM_HWIN WM_GetParent7C(WM_HWIN hChild) {return WM_GetParent(WM_GetParent(WM_GetParent(WM_GetParent(WM_GetParent(WM_GetParent(hChild))))));}
- static WM_HWIN WM_GetParent8C(WM_HWIN hChild) {return WM_GetParent(WM_GetParent(WM_GetParent(WM_GetParent(WM_GetParent(WM_GetParent(WM_GetParent(hChild)))))));}
- static WM_HWIN (*WM_GET_PARENT[])(WM_HWIN) = {WM_GetParent1C,WM_GetParent2C,WM_GetParent3C,WM_GetParent4C,WM_GetParent5C,WM_GetParent6C,WM_GetParent7C,WM_GetParent8C};
- static void SCROLLBAR_SetUserClip(const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo)
- {
- GUI_RECT r;
- if(((SCROLLBAR_SKINFLEX_INFO *)pDrawItemInfo->p)->IsVertical) {//竖型SCROLLBAR
- r.x0 = pDrawItemInfo->y0; r.y0 = pDrawItemInfo->x0;
- r.x1 = pDrawItemInfo->y1; r.y1 = pDrawItemInfo->x1;
- }
- else {//横型SCROLLBAR
- r.x0 = pDrawItemInfo->x0; r.y0 = pDrawItemInfo->y0;
- r.x1 = pDrawItemInfo->x1; r.y1 = pDrawItemInfo->y1;
- }
- WM_SetUserClipRect(&r);
- }
- //Scrollbar控件的自定义绘制函数
- static int SKIN_scrollbar(const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo, unsigned char C)
- {
- WM_HWIN hWin;
- int x0, y0;
- WINDOW_BMP *winBMP;
- switch (pDrawItemInfo->Cmd)
- {
- case WIDGET_ITEM_CREATE:
- //case WIDGET_ITEM_DRAW_BUTTON_L:
- //case WIDGET_ITEM_DRAW_BUTTON_R:
- //case WIDGET_ITEM_DRAW_OVERLAP:
- //case WIDGET_ITEM_DRAW_SHAFT_L:
- //case WIDGET_ITEM_DRAW_SHAFT_R:
- //case WIDGET_ITEM_DRAW_THUMB:
- //case WIDGET_ITEM_GET_BUTTONSIZE:
- break;
- default: return SCROLLBAR_DrawSkinFlex(pDrawItemInfo);//emWin默认控件绘制函数
- case WIDGET_ITEM_DRAW_BUTTON_L:
- hWin = (WM_GET_PARENT[C-1])(pDrawItemInfo->hWin);//位于第几层修改这里(WM_GetParent数=层数-1)
- WM_GetUserData(hWin, &winBMP, sizeof(winBMP));//从用户数据区读出"页面图片结构体"指针
- //获取此控件相对于主页面(比如:WINDOW)位置偏移坐标
- x0 = WM_GetWindowOrgX(hWin) - WM_GetWindowOrgX(pDrawItemInfo->hWin);
- y0 = WM_GetWindowOrgY(hWin) -WM_GetWindowOrgY(pDrawItemInfo->hWin);
- SCROLLBAR_SetUserClip(pDrawItemInfo);//设置1个用户剪切区
- if(((SCROLLBAR_SKINFLEX_INFO *)(pDrawItemInfo->p))->State == 0)
- GUI_DrawBitmap(winBMP->normal, x0, y0);//从页面坐标显示图片,emWin会自己剪切出这个控件范围的图片
- else if(((SCROLLBAR_SKINFLEX_INFO *)(pDrawItemInfo->p))->State == 1)
- GUI_DrawBitmap(winBMP->normal, x0, y0);
- else if(((SCROLLBAR_SKINFLEX_INFO *)(pDrawItemInfo->p))->State == 2)
- GUI_DrawBitmap(winBMP->mark, x0, y0);
- else if(((SCROLLBAR_SKINFLEX_INFO *)(pDrawItemInfo->p))->State == 3)
- GUI_DrawBitmap(winBMP->normal, x0, y0);
- else
- SCROLLBAR_DrawSkinFlex(pDrawItemInfo);
- WM_SetUserClipRect(0);
- break;
- case WIDGET_ITEM_DRAW_BUTTON_R:
- hWin = (WM_GET_PARENT[C-1])(pDrawItemInfo->hWin);//位于第几层修改这里(WM_GetParent数=层数-1)
- WM_GetUserData(hWin, &winBMP, sizeof(winBMP));
- x0 = WM_GetWindowOrgX(hWin) - WM_GetWindowOrgX(pDrawItemInfo->hWin);
- y0 = WM_GetWindowOrgY(hWin) -WM_GetWindowOrgY(pDrawItemInfo->hWin);
- SCROLLBAR_SetUserClip(pDrawItemInfo);
- if(((SCROLLBAR_SKINFLEX_INFO *)(pDrawItemInfo->p))->State == 0)
- GUI_DrawBitmap(winBMP->normal, x0, y0);
- else if(((SCROLLBAR_SKINFLEX_INFO *)(pDrawItemInfo->p))->State == 1)
- GUI_DrawBitmap(winBMP->mark, x0, y0);
- else if(((SCROLLBAR_SKINFLEX_INFO *)(pDrawItemInfo->p))->State == 2)
- GUI_DrawBitmap(winBMP->normal, x0, y0);
- else if(((SCROLLBAR_SKINFLEX_INFO *)(pDrawItemInfo->p))->State == 3)
- GUI_DrawBitmap(winBMP->normal, x0, y0);
- else
- SCROLLBAR_DrawSkinFlex(pDrawItemInfo);
- WM_SetUserClipRect(0);
- break;
- case WIDGET_ITEM_DRAW_THUMB:
- SCROLLBAR_DrawSkinFlex(pDrawItemInfo);
- break;
- case WIDGET_ITEM_DRAW_SHAFT_L:
- case WIDGET_ITEM_DRAW_SHAFT_R:
- hWin = (WM_GET_PARENT[C-1])(pDrawItemInfo->hWin);//位于第几层修改这里(WM_GetParent数=层数-1)
- WM_GetUserData(hWin, &winBMP, sizeof(winBMP));
- x0 = WM_GetWindowOrgX(hWin) - WM_GetWindowOrgX(pDrawItemInfo->hWin);
- y0 = WM_GetWindowOrgY(hWin) -WM_GetWindowOrgY(pDrawItemInfo->hWin);
- SCROLLBAR_SetUserClip(pDrawItemInfo);
- GUI_DrawBitmap(winBMP->normal, x0, y0);
- WM_SetUserClipRect(0);
- break;
- case WIDGET_ITEM_DRAW_OVERLAP:
- hWin = (WM_GET_PARENT[C-1])(pDrawItemInfo->hWin);
- WM_GetUserData(hWin, &winBMP, sizeof(winBMP));
- x0 = WM_GetWindowOrgX(hWin) - WM_GetWindowOrgX(pDrawItemInfo->hWin);
- y0 = WM_GetWindowOrgY(hWin) -WM_GetWindowOrgY(pDrawItemInfo->hWin);
- SCROLLBAR_SetUserClip(pDrawItemInfo);
- GUI_DrawBitmap(winBMP->normal, x0, y0);
- WM_SetUserClipRect(0);
- break;
- }
- return 0;
- }
- //Scrollbar控件的自定义绘制函数,位于第2层(比如:WINDOW->SCROLLBAR)
- int SKIN_scrollbar2C(const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo){
- return SKIN_scrollbar(pDrawItemInfo, 2);
- }
- //Scrollbar控件的自定义绘制函数,位于第3层(比如:FRAMEWIN->CLIENT->SCROLLBAR)
- int SKIN_scrollbar3C(const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo){
- return SKIN_scrollbar(pDrawItemInfo, 3);
- }
- //Scrollbar控件的自定义绘制函数,位于第4层(比如:WINDOW->FRAMEWIN->CLIENT->SCROLLBAR)
- int SKIN_scrollbar4C(const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo){
- return SKIN_scrollbar(pDrawItemInfo, 4);
- }
- //Scrollbar控件的自定义绘制函数,位于第5层(比如:WINDOW->SCROLLBAR->CLIENT->WINDOW->SCROLLBAR)
- int SKIN_scrollbar5C(const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo){
- return SKIN_scrollbar(pDrawItemInfo, 5);
- }
(3)Skinning方式实现位图皮肤的实施步骤:
1)创建窗体时,将"页面图片结构体指针"保存于窗体中:
WINDOW_BMP *winBMP;
static WINDOW_BMP BMP_WIN_main;//为"WIN_main"页面定义1个"页面图片结构体"
BMP_WIN_main.normal = &bmPage2_N;//将不同状态的页面BMP位图赋值给"页面图片结构体"
BMP_WIN_main.mark = &bmPage2_M;
BMP_WIN_main.focus = &bmPage2_N;
BMP_WIN_main.disable = &bmPage2_N;
BMP_WIN_main.thumbN = &bmPage2_N;
BMP_WIN_main.thumbM = &bmPage2_N;
winBMP = &BMP_WIN_main;
hWin = CreateWindow2(WM_HBKWIN);//创建WINmain页面
WM_SetUserData(hWin, &winBMP, sizeof(winBMP));//将"页面图片结构体"指针写到用户数据区
2)在窗体初始化WM_INIT_DIALOG消息中,把SCROLLBAR控件的绘制函数改成自定义绘制函数:
hItem = WM_GetDialogItem(pMsg->hWin, ID_SCROLLBAR_0);//获取句柄
SCROLLBAR_SetSkin(hItem, SKIN_scrollbar2C);//将这个SCROLLBAR控件改成自定义绘制函数
(4)总结:
以整幅图片实现emWin位图皮肤应该是诺嵌光电业界首创的方法,可以大大减轻控件贴图的工作量,保守估计贴图工作效率至少提高10倍以上。如果把每个控件对应的图片先切片分解下来,然后再转换成C文件,最后再贴图到控件上面去,那样工作量将是非常恐怖的!
(1)emWin通过skinning方式实现控件位图皮肤:
1)emWin传统贴皮肤图片的方法,是调用APP函数XXXX_SetBitmap()方式实现,但非常非常麻烦。
2)要想把控件显示出来,emWin每种控件都有1个控件绘制函数,而把这个控件绘制函数改成我们自己编写的"自定义绘制函数",这样我们想把这个控件画成什么样都行,emWin已经不参与这个控件的绘制工作了;在这个自定义绘制函数里面我们什么都不干,只显示出这个控件的图片,这就是用skinning方式实现位图皮肤。
3)支持整幅图片贴图,不需要对整幅图片进行切片分解,非常便捷。
如上图所示,(x0,y0)为整幅图片的显示坐标,(x1,y1)和(x2,y2)是emWin为控件自动生成的剪切显示坐标,我们只需要调用GUI_DrawBitmap()函数在(x0,y0)显示整幅图片即可,emWin会自动剪切显示出该控件的位图皮肤,功能非常强大。
(2)Scrollbar控件的自定义绘制函数:
SKIN_scrollbar.c
skinning.h
[objc] view plain copy
01.#include "DIALOG.h"
02.#include "gui.h"
03.#include "skinning.h"
04.
05.//获取父窗口句柄,即主页面句柄,保存着页面位图的指针
06.static WM_HWIN WM_GetParent1C(WM_HWIN hChild) {return hChild;}
07.static WM_HWIN WM_GetParent2C(WM_HWIN hChild) {return WM_GetParent(hChild);}
08.static WM_HWIN WM_GetParent3C(WM_HWIN hChild) {return WM_GetParent(WM_GetParent(hChild));}
09.static WM_HWIN WM_GetParent4C(WM_HWIN hChild) {return WM_GetParent(WM_GetParent(WM_GetParent(hChild)));}
10.static WM_HWIN WM_GetParent5C(WM_HWIN hChild) {return WM_GetParent(WM_GetParent(WM_GetParent(WM_GetParent(hChild))));}
11.static WM_HWIN WM_GetParent6C(WM_HWIN hChild) {return WM_GetParent(WM_GetParent(WM_GetParent(WM_GetParent(WM_GetParent(hChild)))));}
12.static WM_HWIN WM_GetParent7C(WM_HWIN hChild) {return WM_GetParent(WM_GetParent(WM_GetParent(WM_GetParent(WM_GetParent(WM_GetParent(hChild))))));}
13.static WM_HWIN WM_GetParent8C(WM_HWIN hChild) {return WM_GetParent(WM_GetParent(WM_GetParent(WM_GetParent(WM_GetParent(WM_GetParent(WM_GetParent(hChild)))))));}
14.static WM_HWIN (*WM_GET_PARENT[])(WM_HWIN) = {WM_GetParent1C,WM_GetParent2C,WM_GetParent3C,WM_GetParent4C,WM_GetParent5C,WM_GetParent6C,WM_GetParent7C,WM_GetParent8C};
15.
16.static void SCROLLBAR_SetUserClip(const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo)
17.{
18. GUI_RECT r;
19. if(((SCROLLBAR_SKINFLEX_INFO *)pDrawItemInfo->p)->IsVertical) {//竖型SCROLLBAR
20. r.x0 = pDrawItemInfo->y0; r.y0 = pDrawItemInfo->x0;
21. r.x1 = pDrawItemInfo->y1; r.y1 = pDrawItemInfo->x1;
22. }
23. else {//横型SCROLLBAR
24. r.x0 = pDrawItemInfo->x0; r.y0 = pDrawItemInfo->y0;
25. r.x1 = pDrawItemInfo->x1; r.y1 = pDrawItemInfo->y1;
26. }
27. WM_SetUserClipRect(&r);
28.}
29.
30.//Scrollbar控件的自定义绘制函数
31.static int SKIN_scrollbar(const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo, unsigned char C)
32.{
33. WM_HWIN hWin;
34. int x0, y0;
35. WINDOW_BMP *winBMP;
36.
37. switch (pDrawItemInfo->Cmd)
38. {
39. case WIDGET_ITEM_CREATE:
40. //case WIDGET_ITEM_DRAW_BUTTON_L:
41. //case WIDGET_ITEM_DRAW_BUTTON_R:
42. //case WIDGET_ITEM_DRAW_OVERLAP:
43. //case WIDGET_ITEM_DRAW_SHAFT_L:
44. //case WIDGET_ITEM_DRAW_SHAFT_R:
45. //case WIDGET_ITEM_DRAW_THUMB:
46. //case WIDGET_ITEM_GET_BUTTONSIZE:
47. break;
48.
49. default: return SCROLLBAR_DrawSkinFlex(pDrawItemInfo);//emWin默认控件绘制函数
50.
51. case WIDGET_ITEM_DRAW_BUTTON_L:
52. hWin = (WM_GET_PARENT[C-1])(pDrawItemInfo->hWin);//位于第几层修改这里(WM_GetParent数=层数-1)
53. WM_GetUserData(hWin, &winBMP, sizeof(winBMP));//从用户数据区读出"页面图片结构体"指针
54. //获取此控件相对于主页面(比如:WINDOW)位置偏移坐标
55. x0 = WM_GetWindowOrgX(hWin) - WM_GetWindowOrgX(pDrawItemInfo->hWin);
56. y0 = WM_GetWindowOrgY(hWin) -WM_GetWindowOrgY(pDrawItemInfo->hWin);
57. SCROLLBAR_SetUserClip(pDrawItemInfo);//设置1个用户剪切区
58. if(((SCROLLBAR_SKINFLEX_INFO *)(pDrawItemInfo->p))->State == 0)
59. GUI_DrawBitmap(winBMP->normal, x0, y0);//从页面坐标显示图片,emWin会自己剪切出这个控件范围的图片
60. else if(((SCROLLBAR_SKINFLEX_INFO *)(pDrawItemInfo->p))->State == 1)
61. GUI_DrawBitmap(winBMP->normal, x0, y0);
62. else if(((SCROLLBAR_SKINFLEX_INFO *)(pDrawItemInfo->p))->State == 2)
63. GUI_DrawBitmap(winBMP->mark, x0, y0);
64. else if(((SCROLLBAR_SKINFLEX_INFO *)(pDrawItemInfo->p))->State == 3)
65. GUI_DrawBitmap(winBMP->normal, x0, y0);
66. else
67. SCROLLBAR_DrawSkinFlex(pDrawItemInfo);
68. WM_SetUserClipRect(0);
69. break;
70. case WIDGET_ITEM_DRAW_BUTTON_R:
71. hWin = (WM_GET_PARENT[C-1])(pDrawItemInfo->hWin);//位于第几层修改这里(WM_GetParent数=层数-1)
72. WM_GetUserData(hWin, &winBMP, sizeof(winBMP));
73. x0 = WM_GetWindowOrgX(hWin) - WM_GetWindowOrgX(pDrawItemInfo->hWin);
74. y0 = WM_GetWindowOrgY(hWin) -WM_GetWindowOrgY(pDrawItemInfo->hWin);
75. SCROLLBAR_SetUserClip(pDrawItemInfo);
76. if(((SCROLLBAR_SKINFLEX_INFO *)(pDrawItemInfo->p))->State == 0)
77. GUI_DrawBitmap(winBMP->normal, x0, y0);
78. else if(((SCROLLBAR_SKINFLEX_INFO *)(pDrawItemInfo->p))->State == 1)
79. GUI_DrawBitmap(winBMP->mark, x0, y0);
80. else if(((SCROLLBAR_SKINFLEX_INFO *)(pDrawItemInfo->p))->State == 2)
81. GUI_DrawBitmap(winBMP->normal, x0, y0);
82. else if(((SCROLLBAR_SKINFLEX_INFO *)(pDrawItemInfo->p))->State == 3)
83. GUI_DrawBitmap(winBMP->normal, x0, y0);
84. else
85. SCROLLBAR_DrawSkinFlex(pDrawItemInfo);
86. WM_SetUserClipRect(0);
87. break;
88. case WIDGET_ITEM_DRAW_THUMB:
89. SCROLLBAR_DrawSkinFlex(pDrawItemInfo);
90. break;
91. case WIDGET_ITEM_DRAW_SHAFT_L:
92. case WIDGET_ITEM_DRAW_SHAFT_R:
93. hWin = (WM_GET_PARENT[C-1])(pDrawItemInfo->hWin);//位于第几层修改这里(WM_GetParent数=层数-1)
94. WM_GetUserData(hWin, &winBMP, sizeof(winBMP));
95. x0 = WM_GetWindowOrgX(hWin) - WM_GetWindowOrgX(pDrawItemInfo->hWin);
96. y0 = WM_GetWindowOrgY(hWin) -WM_GetWindowOrgY(pDrawItemInfo->hWin);
97. SCROLLBAR_SetUserClip(pDrawItemInfo);
98. GUI_DrawBitmap(winBMP->normal, x0, y0);
99. WM_SetUserClipRect(0);
100. break;
101. case WIDGET_ITEM_DRAW_OVERLAP:
102. hWin = (WM_GET_PARENT[C-1])(pDrawItemInfo->hWin);
103. WM_GetUserData(hWin, &winBMP, sizeof(winBMP));
104. x0 = WM_GetWindowOrgX(hWin) - WM_GetWindowOrgX(pDrawItemInfo->hWin);
105. y0 = WM_GetWindowOrgY(hWin) -WM_GetWindowOrgY(pDrawItemInfo->hWin);
106. SCROLLBAR_SetUserClip(pDrawItemInfo);
107. GUI_DrawBitmap(winBMP->normal, x0, y0);
108. WM_SetUserClipRect(0);
109. break;
110. }
111. return 0;
112.}
113.
114.//Scrollbar控件的自定义绘制函数,位于第2层(比如:WINDOW->SCROLLBAR)
115.int SKIN_scrollbar2C(const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo){
116. return SKIN_scrollbar(pDrawItemInfo, 2);
117.}
118.//Scrollbar控件的自定义绘制函数,位于第3层(比如:FRAMEWIN->CLIENT->SCROLLBAR)
119.int SKIN_scrollbar3C(const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo){
120. return SKIN_scrollbar(pDrawItemInfo, 3);
121.}
122.//Scrollbar控件的自定义绘制函数,位于第4层(比如:WINDOW->FRAMEWIN->CLIENT->SCROLLBAR)
123.int SKIN_scrollbar4C(const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo){
124. return SKIN_scrollbar(pDrawItemInfo, 4);
125.}
126.//Scrollbar控件的自定义绘制函数,位于第5层(比如:WINDOW->SCROLLBAR->CLIENT->WINDOW->SCROLLBAR)
127.int SKIN_scrollbar5C(const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo){
128. return SKIN_scrollbar(pDrawItemInfo, 5);
129.}
(3)Skinning方式实现位图皮肤的实施步骤:
1)创建窗体时,将"页面图片结构体指针"保存于窗体中:
WINDOW_BMP *winBMP;
static WINDOW_BMP BMP_WIN_main;//为"WIN_main"页面定义1个"页面图片结构体"
BMP_WIN_main.normal = &bmPage2_N;//将不同状态的页面BMP位图赋值给"页面图片结构体"
BMP_WIN_main.mark = &bmPage2_M;
BMP_WIN_main.focus = &bmPage2_N;
BMP_WIN_main.disable = &bmPage2_N;
BMP_WIN_main.thumbN = &bmPage2_N;
BMP_WIN_main.thumbM = &bmPage2_N;
winBMP = &BMP_WIN_main;
hWin = CreateWindow2(WM_HBKWIN);//创建WINmain页面
WM_SetUserData(hWin, &winBMP, sizeof(winBMP));//将"页面图片结构体"指针写到用户数据区
2)在窗体初始化WM_INIT_DIALOG消息中,把SCROLLBAR控件的绘制函数改成自定义绘制函数:
hItem = WM_GetDialogItem(pMsg->hWin, ID_SCROLLBAR_0);//获取句柄
SCROLLBAR_SetSkin(hItem, SKIN_scrollbar2C);//将这个SCROLLBAR控件改成自定义绘制函数
(4)总结:
以整幅图片实现emWin位图皮肤应该是诺嵌光电业界首创的方法,可以大大减轻控件贴图的工作量,保守估计贴图工作效率至少提高10倍以上。如果把每个控件对应的图片先切片分解下来,然后再转换成C文件,最后再贴图到控件上面去,那样工作量将是非常恐怖的!
- emWin实现BMP位图皮肤之Scrollbar篇
- emWin实现BMP位图皮肤之Scrollbar篇
- emWin实现BMP位图皮肤之Button篇
- emWin实现BMP位图皮肤之Checkbox篇
- emWin实现BMP位图皮肤之Dropdown篇
- emWin实现BMP位图皮肤之Multipage篇
- emWin实现BMP位图皮肤之Progbar篇
- emWin实现BMP位图皮肤之Radio篇
- emWin实现BMP位图皮肤之Slider篇
- emWin实现BMP位图皮肤之Spinbox篇
- emWin实现BMP位图皮肤之Framewin篇
- emWin 2天速成实例教程014_BMP位图图片显示以及位图皮肤的使用方法
- VC实现BMP位图实现
- emWin皮肤设置颜色
- emWin - BMP图片显示
- emWin - BMP图片显示
- Tkinter之Scrollbar篇
- MFC透明位图(1)--BMP的实现
- HBuilder实现WebApp,总结MUI使用过程中的坑和方法
- 大神的博客。富文本等一系列的
- redis 安装
- websocket备忘
- C ++教程:类和对象
- emWin实现BMP位图皮肤之Scrollbar篇
- java文件上传--基于ajaxFileUpload+struts2
- 2017年大数据哪些趋势可能会影响到你呢?
- spring in action学习-第一章 spring之旅
- 浙工大15新生赛 命运数
- python赋值和拷贝----一切皆对象,参数皆引用
- 分布式架构系列:缓存
- retrofit2,说那么多干嘛,拿来就是干
- Maven tomcat7 Plugin 远程部署到服务器实战