emWin中TEXT_SetBkColor注意事项

在使用emWin进行界面设计时,遇到了TEXT控件背景色设置的问题。通过调整ARGB值,成功在单片机上实现了绿色背景色的显示。

今天打算做个测试项目用emWin做界面,其中TEXT要设置背景色,调用方法为TEXT_SetBkColor(hItem, 0x0000FF00);

按理说应该有绿色背景色的,在VS调试中也是显示绿色背景色的,但是到单片机中确没有背景色的显示,很无语,研究到最后发现启用了ARGB,那么将最高位透明度设置为0xFF即可,即TEXT_SetBkColor(hItem, 0xFF00FF00);下载到单片机中运行OK,记录一下.

 

static void _cbDialog (WM_MESSAGE* pMsg) { WM_HWIN hItem; int NCode = 0; int Id; HWND hListview; switch (pMsg->MsgId) { case WM_INIT_DIALOG : BeginDraw (); hItem = WM_GetDialogItem (pMsg->hWin, ID_LISTVIEW_0); LISTVIEW_AddColumn (hItem, 20, "1", GUI_TA_LEFT); LISTVIEW_AddColumn (hItem, 280, "2", GUI_TA_LEFT); LISTVIEW_SetHeaderHeight (hItem, 0); LISTVIEW_SetGridVis (hItem, 0); int FontHeight = GUI_GetFontDistY (); WIDGET_SetEffect (hItem, &WIDGET_Effect_None); LISTVIEW_SetRowHeight (hItem, FontHeight + 13); LISTVIEW_SetFont (hItem, GUI_FONT_16_ASCII); for (int i = 0; i < GUI_COUNTOF (main_text); i++) { LISTVIEW_AddRow (hItem, NULL); LISTVIEW_SetItemText (hItem, 0, i, main_text[i][0]); LISTVIEW_SetItemText (hItem, 1, i, main_text[i][1]); } hItem = WM_GetDialogItem (pMsg->hWin, ID_BUTTON_0); BUTTON_SetFont (hItem, GUI_FONT_13_ASCII); BUTTON_SetText (hItem, "[SELECT]"); BUTTON_SetFrameColor (hItem, GUI_WHITE); BUTTON_SetBkColor (hItem, BUTTON_CI_PRESSED, GUI_WHITE); BUTTON_SetBkColor (hItem, BUTTON_CI_UNPRESSED,GUI_WHITE); BUTTON_SetFocusColor (hItem, GUI_WHITE); //hItem = WM_GetClientWindow(pMsg->hWin); //WM_InvalidateWindow (hItem); break; case WM_PAINT: EndDraw (); hItem = pMsg->hWin; GUI_SetBkColor (GUI_WHITE); GUI_Clear (); const GUI_FONT* pOldFont = GUI_GetFont (); GUI_SetFont (&GUI_Font32B_ASCII); GUI_SetColor (GUI_BLACK); GUI_SetTextMode (GUI_TM_TRANS); GUI_DispStringAt ("SYSTEM MAINTAIN MAIN MENU", 0, 0); GUI_SetFont (pOldFont); EndDraw (); break; case WM_NOTIFY_PARENT: Id = WM_GetId (pMsg->hWinSrc); NCode = pMsg->Data.v; switch (Id) { case ID_LISTVIEW_0: switch (NCode) { case WM_NOTIFICATION_CLICKED: break; case WM_NOTIFICATION_RELEASED: break; case WM_NOTIFICATION_SEL_CHANGED: break; } break; case ID_BUTTON_0: switch (NCode) { case WM_NOTIFICATION_CLICKED: break; case WM_NOTIFICATION_RELEASED: hListview = WM_GetDialogItem (pMsg->hWin, ID_LISTVIEW_0); int Sel = LISTVIEW_GetSel (hListview); if (Sel < 0 || Sel > 12) break; LISTVIEW_DeleteAllRows (hListview); (is_main == 0) ? _select_main (Sel, hListview) : _select_next (Sel, hListview); break; default: WM_DefaultProc (pMsg); return; } break; } break; default: WM_DefaultProc (pMsg); break; } }
10-17
#include <windows.h> #include "GUI.H" #include "GUI_SIM_Win32.h" #include "LCD_SIM.H" HWND ghWndMain = NULL; void MainTask (void) { GUI_Init (); GUI_SetBkColor (GUI_BLUE); GUI_Clear (); GUI_SetColor (GUI_WHITE); //GUI_SetFont (&GUI_Font32_ASCII); GUI_DispStringAt ("Hello, emWin!", 50, 80); while (1) { GUI_Delay (200); } } LRESULT CALLBACK WndProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; RECT rect; switch (msg) { case WM_CREATE: SIM_GUI_Enable (); SIM_GUI_Init (GetModuleHandle (NULL), hwnd, "", "emWin Simulation"); SIM_GUI_CreateLCDWindow (hwnd, 0, 0, 800, 480, 0); InvalidateRect (hwnd, NULL, TRUE); break; case WM_PAINT: BeginPaint (hwnd, &ps); EndPaint (hwnd, &ps); hdc = BeginPaint (hwnd, &ps); // 获取客户区大小 GetClientRect (hwnd, &rect); // 1. 设置背景色为蓝色 HBRUSH hBlueBrush = CreateSolidBrush (RGB (0, 0, 255)); FillRect (hdc, &rect, hBlueBrush); DeleteObject (hBlueBrush); HPEN hRedPen = CreatePen (PS_SOLID, 3, RGB (255, 0, 0)); HBRUSH hNullBrush = (HBRUSH)GetStockObject (NULL_BRUSH); SelectObject (hdc, hRedPen); SelectObject (hdc, hNullBrush); Rectangle (hdc, 100, 100, 300, 200); HPEN hGreenPen = CreatePen (PS_SOLID, 2, RGB (0, 255, 0)); HBRUSH hGreenBrush = CreateSolidBrush (RGB (0, 200, 0)); SelectObject (hdc, hGreenPen); SelectObject (hdc, hGreenBrush); Ellipse (hdc, 150, 150, 400, 250); // 4. 绘制黄色斜线 HPEN hYellowPen = CreatePen (PS_DOT, 1, RGB (255, 255, 0)); SelectObject (hdc, hYellowPen); MoveToEx (hdc, 0, 0,NULL); LineTo (hdc, rect.right, rect.bottom); // 5. 绘制白色文字 SetTextColor (hdc, RGB (255, 255, 255)); SetBkMode (hdc, TRANSPARENT); HFONT hFont = CreateFont (48, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, TEXT ("Arial")); SelectObject (hdc, hFont); DrawText (hdc, TEXT ("Hello, GDI!"), -1, &rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE); DeleteObject (hFont); DeleteObject (hRedPen); DeleteObject (hGreenPen); DeleteObject (hYellowPen); EndPaint (hwnd, &ps); break; case WM_DESTROY: PostQuitMessage (0); break; default: return DefWindowProc (hwnd, msg, wParam, lParam); } return 0; } int APIENTRY WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { UNREFERENCED_PARAMETER (hPrevInstance); UNREFERENCED_PARAMETER (lpCmdLine); const char CLASS_NAME[] = "MyGDIWindowClass"; WNDCLASSEX wc = { 0 }; wc.cbSize = sizeof (WNDCLASSEX); wc.lpfnWndProc = WndProc; // 消息处理函数 wc.hInstance = hInstance; wc.lpszClassName = CLASS_NAME; wc.hCursor = LoadCursor (NULL, IDC_ARROW); // 默认箭头光标 wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); // 初始背景(会被 WM_PAINT 覆盖) wc.style = CS_HREDRAW | CS_VREDRAW; // 大小改变时重绘 if (!RegisterClassEx (&wc)) { MessageBox (NULL, "1!", "2", MB_ICONERROR); return -1; } // 创建窗口 HWND hwnd = CreateWindowEx ( 0, // 扩展样式 CLASS_NAME, // 类名 "CLC", // 窗口标题 WS_OVERLAPPEDWINDOW, // 窗口样式 CW_USEDEFAULT, CW_USEDEFAULT, // x, y 位置 800, 480, // 宽高 NULL, // 父窗口(无) NULL, // 菜单(无) hInstance, // 实例句柄 NULL // 额外参数 ); if (!hwnd) { MessageBox (NULL, "创建窗口失败!", "错误", MB_ICONERROR); return -1; } ShowWindow (hwnd, nCmdShow); UpdateWindow (hwnd); MSG msg; while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg); DispatchMessage (&msg); } return (int)msg.wParam; } 显示黑屏
09-21
评论 12
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值