找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 55|回复: 0

[C/C++] 炫彩界面库-事件-lambda包装-转发

[复制链接]

76

主题

464

回帖

2061

积分

管理员

积分
2061
发表于 2025-9-26 22:49:27 | 显示全部楼层 |阅读模式
转自群友分享, C++ 炫彩界面库- 事件- lambda包装

  1. #include "framework.h"
  2. #include <string>

  3. #include "xcgui.h"
  4. #include "xcgui_lambda.h" // 引入炫彩lambda包装器

  5. class CMyWindow {
  6. public:
  7.     HWINDOW m_hWindow;

  8.     CMyWindow() {

  9.         // 创建窗口并绑定事件-----------------------------------------------------------------------------------
  10.         if (m_hWindow = XWnd_Create(0, 0, 600, 500, L"炫彩界面库绑定Lambda测试", NULL, window_style_default)) {

  11.             // 窗口自绘事件测试
  12.             XWnd_BindLambda(m_hWindow, XWM_PAINT_END,
  13.                 [this](HWINDOW hWindow, HDRAW hDraw, BOOL* pbHandled) {
  14.                     *pbHandled = TRUE;

  15.                     RECT rect;
  16.                     XWnd_GetClientRect(m_hWindow, &rect);
  17.                     XDraw_SetBrushColor(hDraw, RGBA(0, 255, 0, 20));
  18.                     XDraw_FillRect(hDraw, &rect); // 给窗口盖上一层半透明颜色

  19.                     return 0;
  20.                 });

  21.             // 窗口过程事件
  22.             XWnd_BindLambda(m_hWindow, XWM_WINDPROC,
  23.                 [](HWINDOW hWindow, UINT message, WPARAM wParam, LPARAM lParam, BOOL* pbHandled) {
  24.                     switch (message) {
  25.                     case WM_SIZE:
  26.                         OutputDebugStringW(L"窗口大小改变\n");
  27.                         break;
  28.                     case WM_DESTROY:
  29.                         OutputDebugStringW(L"窗口被销毁\n");
  30.                         break;
  31.                     default:
  32.                         break;
  33.                     }

  34.                     return 0;
  35.                 });
  36.         }

  37.         // 创建第一个按钮并绑定事件------------------------------------------------------------------------------
  38.         if (HELE hButton = XBtn_Create(20, 40, 200, 30, L"绑定多种事件测试", m_hWindow)) {

  39.             // 点击事件
  40.             XEle_BindLambda(hButton, XE_BNCLICK, [](HELE hEle, BOOL* pbHandled) {
  41.                 OutputDebugStringW(L"按钮1 被点击\n");
  42.                 return 0;
  43.             });

  44.             // 鼠标移动事件
  45.             XEle_BindLambda(hButton, XE_MOUSEMOVE, [](HELE hEle, UINT nFlags, POINT* pPt, BOOL* pbHandled) {
  46.                 OutputDebugStringW(L"鼠标在 按钮1 上移动\n");
  47.                 return 0;
  48.             });

  49.             // 自绘事件
  50.             XEle_BindLambda(hButton, XE_PAINT, [](HELE hEle, HDRAW hDraw, BOOL* pbHandled) {
  51.                 *pbHandled = TRUE;
  52.                 RECT rect;
  53.                 XEle_GetClientRect(hEle, &rect);

  54.                 button_state_ nState = XBtn_GetStateEx(hEle);
  55.                 switch (nState) {
  56.                 case button_state_leave:
  57.                     XDraw_SetBrushColor(hDraw, RGBA(150, 250, 250, 255));
  58.                     XDraw_FillRect(hDraw, &rect);
  59.                     break;
  60.                 case button_state_stay:
  61.                     XDraw_SetBrushColor(hDraw, RGBA(230, 130, 230, 255));
  62.                     XDraw_FillRect(hDraw, &rect);
  63.                     break;
  64.                 case button_state_down:
  65.                     XDraw_SetBrushColor(hDraw, RGBA(210, 210, 110, 255));
  66.                     XDraw_FillRect(hDraw, &rect);
  67.                     break;
  68.                 case button_state_check:
  69.                     XDraw_SetBrushColor(hDraw, RGBA(180, 180, 180, 255));
  70.                     XDraw_FillRect(hDraw, &rect);
  71.                     break;
  72.                 case button_state_disable:
  73.                     XDraw_SetBrushColor(hDraw, RGBA(100, 100, 100, 255));
  74.                     XDraw_FillRect(hDraw, &rect);
  75.                     break;
  76.                 }

  77.                 XDraw_SetTextAlign(hDraw, textAlignFlag_center | textAlignFlag_vcenter);
  78.                 XDraw_SetBrushColor(hDraw, RGBA(200, 0, 0, 255));

  79.                 const wchar_t* pText = XBtn_GetText(hEle);
  80.                 XDraw_DrawText(hDraw, pText, static_cast<int>(wcslen(pText)), &rect);
  81.                 XEle_DrawFocus(hEle, hDraw, &rect);

  82.                 return 0;
  83.             });
  84.         }

  85.         // 创建第二个按钮并绑定事件------------------------------------------------------------------------------
  86.         if (HELE hButton = XBtn_Create(240, 40, 200, 30, L"测试", m_hWindow)) {

  87.             // 点击事件
  88.             XEle_BindLambda(hButton, XE_BNCLICK, [](HELE hEle, BOOL* pbHandled) {
  89.                 OutputDebugStringW(L"按钮2 被点击\n");
  90.                 return 0;
  91.             });
  92.         }

  93.         XWnd_ShowWindow(m_hWindow, SW_SHOW);
  94.     }
  95. };

  96. int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance,
  97.     _In_ LPWSTR lpCmdLine, _In_ int nCmdShow) {

  98.     UNREFERENCED_PARAMETER(hPrevInstance);
  99.     UNREFERENCED_PARAMETER(lpCmdLine);

  100.     XInitXCGUI(TRUE);
  101.     CMyWindow MyWindow;

  102.     // 在类外创建按钮并绑定事件----------------------------------------------------------------------------------
  103.     if (HELE hButton = XBtn_Create(20, 80, 200, 30, L"改变按钮标题", MyWindow.m_hWindow)) {

  104.         std::wstring text = L"这是新的按钮文本!";

  105.         // 通过值捕获使用外部局部变量
  106.         XEle_BindLambda(hButton, XE_BNCLICK, [=](HELE hEle, BOOL* pbHandled) {
  107.             XBtn_SetText(hEle, text.c_str());
  108.             return 0;
  109.         });
  110.     }

  111.     XRunXCGUI();
  112.     XExitXCGUI();

  113.     return 0;
  114. }
复制代码



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

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

本版积分规则

QQ|Archiver|手机版|小黑屋|炫语言 | 炫彩界面库 | 用户所需, 正是我所做! ( 鄂ICP备2023014763号-1 )

GMT+8, 2025-10-9 12:34 , Processed in 0.077713 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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