问题:使用VS 2019中MFC该怎么实现多个Button控件不同颜色的控制
显示效果:见图
操作:比如按一次“数据刷新”后字体变成红色,再按一次恢复原来颜色。
说明:参考了很多加入新的一个类以及WM_DRAWITEM的方式,无法实现我要的功能。
建工程方式:打开Visual Studio 2019——开始使用——创建新项目——所有语言选择C++——MFC应用——设置项目名称、位置、解决方案名称——创建——应用程序类型里面选择“基于对话框”——使用MFC中选择“在静态库中使用MFC”——完成。
软件:Visual Studio 2019——C++——MFC方式。
以下答案由GPT-4.0Plus大模型与博主A努力中.......共同编写:
cpp
Button1 = (CButton *)GetDlgItem(IDC_BUTTON1);
Button1->SetEvent(IDC_BUTTON1, _T("onclick"), _T("Btn1_Click()"));
Button2 = (CButton *)GetDlgItem(IDC_BUTTON2);
Button2->SetEvent(IDC_BUTTON2, _T("onclick"), _T("Btn2_Click()"));
cpp
void Btn1_Click();
void Btn2_Click();
cpp
void CMFCApplication1Dlg::Btn1_Click()
{
ExecJSScript(L"changeColor('red')");
}
void CMFCApplication1Dlg::Btn2_Click()
{
ExecJSScript(L"changeColor('green')");
}
html
<script type="text/javascript">
function changeColor(color)
{
document.getElementById('IDC_BUTTON1').style.color = color;
}
</script>
主要步骤是:获取Button指针并绑定单击事件,在事件中通过ExecJSScript函数调用JavaScript来切换颜色,然后在.html文件中实现JavaScript函数完成颜色切换。
MFC前端利用ExecJSScript调用JavaScript与前端HTML/JS交互的方式,可以实现更为复杂的前端展示和交互效果。
可以通过以下步骤实现多个Button控件不同颜色的控制:
1、打开资源视图,在对话框资源中双击按钮控件,打开属性窗口。
2、选择 "外观" 标签页,找到 "背景颜色" 属性,设置初始颜色,并记录下该颜色值。
3、在 Class View 窗口中找到对应对话框的类,右键单击该类,并选择 "添加 变量"。
4、在弹出的 "添加成员变量" 对话框中,选择需要控制颜色的按钮控件,命名为一个易于识别的变量名。例如:m_btnRefresh。
5、在该类的头文件中添加一个成员变量存储控件初始颜色,以及一个成员变量记录当前颜色是否为红色。
COLORREF m_clrInitBtn; // 存储按钮初始颜色
bool m_bBtnRed; // 记录按钮当前颜色是否为红色
6、在 OnInitDialog() 函数中记录按钮初始颜色并初始化记录按钮当前颜色的变量。
BOOL CYourDialog::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 记录按钮初始颜色
m_clrInitBtn = m_btnRefresh.GetBackgroundColor();
// 初始化记录按钮当前颜色的变量为 false
m_bBtnRed = false;
return TRUE;
}
7、在按钮单击事件处理函数中,通过检查按钮当前颜色是否为红色来设置不同的颜色。
void CYourDialog::OnBtnRefresh()
{
// 如果按钮当前颜色为红色,则将颜色还原为初始颜色
if (m_bBtnRed)
{
m_btnRefresh.SetBackgroundColor(m_clrInitBtn);
m_bBtnRed = false;
}
else // 否则将颜色设置为红色
{
m_btnRefresh.SetBackgroundColor(RGB(255, 0, 0));
m_bBtnRed = true;
}
}
8、在按钮资源中找到 "消息" 属性,选择 "BN_CLICKED" 消息,并设置消息的处理函数为上述处理函数。
9、保存并编译程序,测试按钮控件颜色变化功能。
注意:在使用 RGB() 函数设置颜色值时,第一个参数是红色分量,第二个参数是绿色分量,第三个参数是蓝色分量。由于 Windows 中使用的是 BGR 颜色模式,所以真实的颜色值应该是 (0, 0, 255) 表示红色,而非 (255, 0, 0)。
搜索MFC按钮文字颜色,参考 https://blog.csdn.net/dongzhe8/article/details/80909144
测试了大家的方案,还是不能解决问题,后来请教了重庆地区的哥们,成功已经解决问题,在此感谢大家和他的帮忙,这里给出解决方案。
1、使用DrawItem;
2、DrawItem函数中参考下列形式的代码进行添加(特别说明:不要相信AI或者GPT的答案,太复杂,测试下来也不能,有些操作,软件中是没有的)