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

ToWJQ:按钮控件操作指南

一、按钮的图片更换

用于替换按钮在正常、按下、悬停、禁用四种状态下的显示图片,需严格按照资源定义→加载→绘制的流程操作,具体步骤如下:

1. 定义图片路径(UIResource.h)

UIResource.h中通过宏定义按钮四种状态的图片路径,需确保路径与实际图片文件位置一致。示例代码:

// UIResource.h
#define IMG_BUTTON_NORMAL_PATH "res/button/normal.png"    // 正常状态图片
#define IMG_BUTTON_PRESSED_PATH "res/button/pressed.png"  // 按下状态图片
#define IMG_BUTTON_HOVER_PATH "res/button/hover.png"      // 悬停状态图片
#define IMG_BUTTON_DISABLED_PATH "res/button/disabled.png"// 禁用状态图片
2. 图片资源加载(GUI 类构造函数)

GUI类的构造函数中,根据UIResource.h定义的路径加载图片资源到对应的IMAGE对象中,供后续绘制使用。核心代码位置:GUI.cpp #20-84(构造函数)关键逻辑:

// GUI.cpp 构造函数中加载按钮图片
string buttonstr = originPath + IMG_BUTTON_NORMAL_PATH;       // 拼接正常状态图片路径
string buttondownstr = originPath + IMG_BUTTON_PRESSED_PATH;  // 拼接按下状态图片路径
string buttonhoverstr = originPath + IMG_BUTTON_HOVER_PATH;   // 拼接悬停状态图片路径
string buttondisabledstr = originPath + IMG_BUTTON_DISABLED_PATH; // 拼接禁用状态图片路径// 加载图片到IMAGE对象(EasyX函数)
loadimage(&button, buttonfile.Get_absolutePath().c_str());       // 正常状态图
loadimage(&buttondown, buttondownfile.Get_absolutePath().c_str()); // 按下状态图
loadimage(&buttonhover, buttonhoverfile.Get_absolutePath().c_str()); // 悬停状态图
loadimage(&buttondisabled, buttondisabledfile.Get_absolutePath().c_str()); // 禁用状态图
3. 图片绘制与状态关联

按钮图片通过GUI::ButtonGraphGUI::ButtonGraphFree函数绘制,不同状态对应不同的IMAGE对象,具体关联逻辑如下:

按钮状态触发场景绘制函数参数(IMAGE*)代码位置
正常初始显示 / 鼠标离开&buttonGUI::Button()
按下鼠标左键点击时&buttondownManage::MouseControl()(WM_LBUTTONDOWN 事件)
悬停鼠标移动到按钮上&buttonhoverManage::MouseControl()(WM_MOUSEMOVE 事件)
禁用功能不可用时&buttondisabled需手动添加禁用逻辑(见下文说明)
(1)正常状态绘制

GUI::Button()函数中,默认绘制正常状态图片,示例代码:

// GUI.cpp #195-207
void GUI::Button(bool isdown)
{ButtonGraph(preview, &button, "浏览");  // 预览按钮:正常状态用&buttonButtonGraph(open, &button, "打开");     // 打开按钮:正常状态用&button// 其他按钮同理...
}
(2)悬停 / 按下状态绘制

Manage::MouseControl()中处理鼠标事件,根据鼠标位置切换图片:

  • 鼠标移动到按钮上(WM_MOUSEMOVE):用&buttonhover
  • 鼠标左键点击按钮(WM_LBUTTONDOWN):用&buttondown

// 鼠标移动到"浏览"按钮上时,切换为悬停图
if (surface.preview.IsInMyRectangle(P))surface.ButtonGraph(surface.preview, &surface.buttonhover, "浏览");// 鼠标点击"切割"按钮时,切换为按下图
else if (surface.cutting.IsInMyRectangle(P))
{iscutting = true;surface.ButtonGraph(surface.cutting, &surface.buttondown, "切割");
}
(3)禁用状态处理

若按钮需禁用(如功能未实现),需确保所有绘制场景均使用&buttondisabled,步骤如下:

  1. GUI类中为按钮添加禁用标志(如bool isCuttingDisabled);
  2. 绘制时判断标志,示例:
// 在GUI::Button()中判断禁用状态
void GUI::Button(bool isdown)
{if (isCuttingDisabled)ButtonGraph(cutting, &buttondisabled, "切割");  // 禁用时用禁用图elseButtonGraph(cutting, &button, "切割");          // 正常时用正常图
}// 在Manage::MouseControl()中忽略禁用按钮的点击事件
else if (surface.cutting.IsInMyRectangle(P) && !isCuttingDisabled)
{iscutting = true;  // 仅当未禁用时触发// ...
}
二、按钮位置的更换

按钮位置由MyRectangle对象的坐标属性控制,需在初始化函数中修改其位置参数,步骤如下:

1. 确定按钮的MyRectangle成员

GUI.hpublic部分定义了所有按钮的MyRectangle对象,每个对象对应一个按钮,例如:

// GUI.h #65-76
public:MyRectangle preview;    // 预览按钮MyRectangle open;       // 打开按钮MyRectangle outPath;    // 输出路径按钮MyRectangle about;      // 关于按钮MyRectangle exit;       // 退出按钮// 其他按钮...
2. 在GUI::InitButton()中修改位置

GUI::InitButton()函数用于初始化按钮的位置和大小(通过MyRectangle的构造参数或 Set 方法设置),示例代码框架:

// GUI.cpp 中InitButton()的实现(需补充完整)
void GUI::InitButton()
{// 预览按钮:中心点坐标(x=100, y=200),长度120,宽度50preview = MyRectangle(100, 200, 120, 50);  // 格式:(中心点X, 中心点Y, 长度, 宽度)// 打开按钮:调整位置到(x=250, y=200)open = MyRectangle(250, 200, 120, 50);// 切割按钮:调整位置到(x=400, y=300)cutting = MyRectangle(400, 300, 120, 50);// 其他按钮同理修改坐标...
}
  • 坐标以窗口左上角为原点(X 轴向右,Y 轴向下);
  • MyRectangle的前两个参数为按钮中心点坐标,后两个为按钮的长度和宽度。
三、按钮的创建

新增按钮需完成成员定义→位置初始化→资源加载→状态绘制四步,具体如下:

1. 在GUI类中定义按钮成员

GUI.hpublic部分添加新按钮的MyRectangle对象,示例:

// GUI.h 新增"帮助"按钮
public:MyRectangle help;  // 帮助按钮
2. 初始化按钮位置(GUI::InitButton()

InitButton()中设置新按钮的位置和大小:

// GUI.cpp InitButton()中添加
void GUI::InitButton()
{// 其他按钮初始化...help = MyRectangle(600, 200, 120, 50);  // 帮助按钮:中心点(600,200),宽120,高50
}
3. 加载按钮图片资源

若使用现有图片资源(正常 / 按下 / 悬停 / 禁用),无需额外加载(已在GUI构造函数中加载);若需自定义图片,需在UIResource.h新增路径宏,并在构造函数中加载(参考 “按钮的图片更换” 步骤 1-2)。

4. 处理按钮的状态绘制
(1)正常状态绘制

GUI::Button()中添加新按钮的绘制逻辑:

// GUI.cpp Button()中添加
void GUI::Button(bool isdown)
{// 其他按钮绘制...ButtonGraph(help, &button, "帮助");  // 正常状态用&button
}
(2)悬停 / 按下状态处理

Manage::MouseControl()中添加鼠标事件处理:

// Manage.cpp MouseControl()中WM_MOUSEMOVE事件添加
case WM_MOUSEMOVE:
{// 其他按钮判断...else if (surface.help.IsInMyRectangle(P))surface.ButtonGraph(surface.help, &surface.buttonhover, "帮助");  // 悬停用hover图break;
}// WM_LBUTTONDOWN事件添加
case WM_LBUTTONDOWN:
{// 其他按钮判断...else if (surface.help.IsInMyRectangle(P)){ishelp = true;  // 触发帮助功能(需在Manage类中定义ishelp标志)surface.ButtonGraph(surface.help, &surface.buttondown, "帮助");  // 按下用down图}break;
}
(3)功能逻辑绑定

Manage::Run()中添加新按钮的功能逻辑:

// Manage.cpp Run()中添加
void Manage::Run()
{while (true){// 其他状态处理...if (ishelp)  // 处理帮助功能{MessageBox(GetForegroundWindow(), "帮助信息...", "帮助", 0);ishelp = false;}}
}
四、注意事项
  1. 图片格式:建议使用pngbmp或jpg,确保与loadimage函数兼容;
  2. 路径空格:若图片路径含空格,需用引号包裹(代码中MyFile类已处理路径转换);
  3. 状态一致性:禁用状态需确保所有绘制场景(正常 / 悬停 / 按下)均使用禁用图片,避免状态冲突;
  4. 坐标调试:可通过GUI::InitButton()中的坐标点调节。(界面打印按钮坐标,辅助调整位置)。
http://www.dtcms.com/a/590464.html

相关文章:

  • 佳易王羽毛球馆计时计费管理系统V17.2:技术解析与中小场馆数字化实践
  • 网站上上传图片 怎么做精美手机网站模板
  • 怎么做网站软件360网址
  • k8s --- resource: StatefulSet
  • 网站规划建设方案模板哪个网站能免费做电子书封面
  • 素材网站设计模板下载网站没有域名
  • 做net网站免费推广网站入口2020
  • 【电路笔记】-电波形
  • phpstudy 做网站seo石家庄
  • Python基础(二)
  • 怎样建立自己的视频号网站建设与优化推广方案
  • 俱乐部手机网站模板做网站做得好的公司
  • Flume安装部署
  • 最新版T5友价互站网源码商城PHP源码交易平台 完整带手机版源码网系统源码
  • 化学商城网站建设做网站有底薪吗
  • 树莓派4B使用指南
  • c语言做网站后台建设部中国建造师网查询
  • Overleaf——编译超时(timed out)的解决办法
  • 网站推广如何做的深圳市注册公司需要什么资料
  • 做电子商务网站建设工资多少钱网站站内链接怎么做
  • Java中同步和异步的区别,以及阻塞和非阻塞的区别
  • 电子商务网站建设问题公司网站制作知乎
  • 科研人如何使用ubantu服务器
  • o2o网站建设手机网站大全123456
  • 【Web安全】JeecgBoot框架SRC高频漏洞分析总结
  • 花都微网站建设北京网站制作出名 乐云践新
  • 路径总和(C)
  • 网站模版怎么样网站内容一样影响收录
  • 网站开发怎么接入支付宝中山企业网站的建设
  • 做网站参考文献河北网站建设价格低