|
转自群友分享, C++ 炫彩界面库- 事件- lambda包装
- #include "framework.h"
- #include <string>
- #include "xcgui.h"
- #include "xcgui_lambda.h" // 引入炫彩lambda包装器
- class CMyWindow {
- public:
- HWINDOW m_hWindow;
- CMyWindow() {
- // 创建窗口并绑定事件-----------------------------------------------------------------------------------
- if (m_hWindow = XWnd_Create(0, 0, 600, 500, L"炫彩界面库绑定Lambda测试", NULL, window_style_default)) {
- // 窗口自绘事件测试
- XWnd_BindLambda(m_hWindow, XWM_PAINT_END,
- [this](HWINDOW hWindow, HDRAW hDraw, BOOL* pbHandled) {
- *pbHandled = TRUE;
- RECT rect;
- XWnd_GetClientRect(m_hWindow, &rect);
- XDraw_SetBrushColor(hDraw, RGBA(0, 255, 0, 20));
- XDraw_FillRect(hDraw, &rect); // 给窗口盖上一层半透明颜色
- return 0;
- });
- // 窗口过程事件
- XWnd_BindLambda(m_hWindow, XWM_WINDPROC,
- [](HWINDOW hWindow, UINT message, WPARAM wParam, LPARAM lParam, BOOL* pbHandled) {
- switch (message) {
- case WM_SIZE:
- OutputDebugStringW(L"窗口大小改变\n");
- break;
- case WM_DESTROY:
- OutputDebugStringW(L"窗口被销毁\n");
- break;
- default:
- break;
- }
- return 0;
- });
- }
- // 创建第一个按钮并绑定事件------------------------------------------------------------------------------
- if (HELE hButton = XBtn_Create(20, 40, 200, 30, L"绑定多种事件测试", m_hWindow)) {
- // 点击事件
- XEle_BindLambda(hButton, XE_BNCLICK, [](HELE hEle, BOOL* pbHandled) {
- OutputDebugStringW(L"按钮1 被点击\n");
- return 0;
- });
- // 鼠标移动事件
- XEle_BindLambda(hButton, XE_MOUSEMOVE, [](HELE hEle, UINT nFlags, POINT* pPt, BOOL* pbHandled) {
- OutputDebugStringW(L"鼠标在 按钮1 上移动\n");
- return 0;
- });
- // 自绘事件
- XEle_BindLambda(hButton, XE_PAINT, [](HELE hEle, HDRAW hDraw, BOOL* pbHandled) {
- *pbHandled = TRUE;
- RECT rect;
- XEle_GetClientRect(hEle, &rect);
- button_state_ nState = XBtn_GetStateEx(hEle);
- switch (nState) {
- case button_state_leave:
- XDraw_SetBrushColor(hDraw, RGBA(150, 250, 250, 255));
- XDraw_FillRect(hDraw, &rect);
- break;
- case button_state_stay:
- XDraw_SetBrushColor(hDraw, RGBA(230, 130, 230, 255));
- XDraw_FillRect(hDraw, &rect);
- break;
- case button_state_down:
- XDraw_SetBrushColor(hDraw, RGBA(210, 210, 110, 255));
- XDraw_FillRect(hDraw, &rect);
- break;
- case button_state_check:
- XDraw_SetBrushColor(hDraw, RGBA(180, 180, 180, 255));
- XDraw_FillRect(hDraw, &rect);
- break;
- case button_state_disable:
- XDraw_SetBrushColor(hDraw, RGBA(100, 100, 100, 255));
- XDraw_FillRect(hDraw, &rect);
- break;
- }
- XDraw_SetTextAlign(hDraw, textAlignFlag_center | textAlignFlag_vcenter);
- XDraw_SetBrushColor(hDraw, RGBA(200, 0, 0, 255));
- const wchar_t* pText = XBtn_GetText(hEle);
- XDraw_DrawText(hDraw, pText, static_cast<int>(wcslen(pText)), &rect);
- XEle_DrawFocus(hEle, hDraw, &rect);
- return 0;
- });
- }
- // 创建第二个按钮并绑定事件------------------------------------------------------------------------------
- if (HELE hButton = XBtn_Create(240, 40, 200, 30, L"测试", m_hWindow)) {
- // 点击事件
- XEle_BindLambda(hButton, XE_BNCLICK, [](HELE hEle, BOOL* pbHandled) {
- OutputDebugStringW(L"按钮2 被点击\n");
- return 0;
- });
- }
- XWnd_ShowWindow(m_hWindow, SW_SHOW);
- }
- };
- int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance,
- _In_ LPWSTR lpCmdLine, _In_ int nCmdShow) {
- UNREFERENCED_PARAMETER(hPrevInstance);
- UNREFERENCED_PARAMETER(lpCmdLine);
- XInitXCGUI(TRUE);
- CMyWindow MyWindow;
- // 在类外创建按钮并绑定事件----------------------------------------------------------------------------------
- if (HELE hButton = XBtn_Create(20, 80, 200, 30, L"改变按钮标题", MyWindow.m_hWindow)) {
- std::wstring text = L"这是新的按钮文本!";
- // 通过值捕获使用外部局部变量
- XEle_BindLambda(hButton, XE_BNCLICK, [=](HELE hEle, BOOL* pbHandled) {
- XBtn_SetText(hEle, text.c_str());
- return 0;
- });
- }
- XRunXCGUI();
- XExitXCGUI();
- return 0;
- }
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|