windows第十二章 MFC控件常用消息

news2025/3/14 5:58:28

文章目录

  • 控件反射消息机制
  • 文本框控件
    • EN_CHANGE消息
    • EN_UPDATE消息
    • EN_SETFOCUS消息
    • EN_KILLFOCUS消息
    • EN_MAXTEXT消息
    • EN_ERRSPACE消息
    • EN_HSCROLL消息
  • 按钮控件
    • BN_CLICKED消息
    • BN_DOUBLECLICKED消息
    • BN_SETFOCUS消息
    • BN_KILLFOCUS消息
  • 单选按钮
    • BN_CLICKED 消息
  • 复选框
    • BN_CLICKED
    • BN_DOUBLECLICKED消息
  • 组合框
    • CBN_SELCHANGE 消息
    • CBN_EDITCHANGE 消息
    • CBN_DROPDOWN消息
    • CBN_CLOSEUP消息
    • CBN_SELENDOK消息
    • CBN_SELENDCANCEL消息
  • WM_NOTIFY消息
    • 1.当控件向父窗口发送消息
    • 2.标准的解决方案
    • 还可以对NMHDR这个结构体进行拓展
  • 微调控件
    • UDN_DELTAPOS消息
  • 滑动控件
    • TRBN_THUBPOSCHANGING
  • 进度条
  • 列表
    • LBN_SELCHANGE 消息
    • LBN_DBLCLK 消息
    • LBN_SELCANCEL 消息
    • LBN_SETFOCUS 消息
    • LVN_ITEMCHANGED 消息
    • LVN_COLUMCLICK 消息
      • 实现简单的列表排序
  • 树控件
    • TVNSELCHANGED 消息
    • TVN_ITEMEXPANDING消息
    • TVN_KEYDOWN 消息
  • Tab控件
    • TCN_SELCHANGED 消息
    • TCN_KEYDOWN 消息

控件反射消息机制

在这里插入图片描述
当控件产生一个消息时,MFC首先会尝试将该消息反射回控件自身进行处理,这就是控件反射消息机制。这种机制允许控件类自己处理与自身相关的特定消息,而不需要父窗口介入。

如果控件没有处理反射消息,或者没有设置反射消息处理机制,那么消息会传递给父窗口进行处理。父窗口可以使用ON_BN_CLICKED等宏来处理控件的消息。

如果父窗口也没有处理该消息,消息会继续向上传递到更高级别的窗口(如主框架窗口),直到消息被处理或者到达消息链的末端。

创建消息步骤如下

  1. 对话框里创建一个控件,这里是edit control
  2. 点开类视图,点击类向导
    在这里插入图片描述
  3. 搜索对象ID,右边就会弹出很多消息供选择,选择需要使用的消息
    在这里插入图片描述

文本框控件

EN_CHANGE消息

文本改变消息

void C控件消息Dlg::OnChangeEdit1()
{
	CString str;
	GetDlgItemText(IDC_EDIT1, str);//获取文本框内容
	SetWindowText(str);//设置窗口标题
}

在这里插入图片描述

EN_UPDATE消息

跟上面的差不多,只不过在未完成绘制更新时触发

void C控件消息Dlg::OnUpdateEdit1()
{
	CString str;
	GetDlgItemText(IDC_EDIT1, str);//获取文本框内容
	SetWindowText(str);//设置窗口标题
}

EN_SETFOCUS消息

获取焦点时的消息

void C控件消息Dlg::OnSetfocusEdit1()
{
	static int i = 0;
	CString str;
	str.Format(_T("第%d次获得焦点"), ++i);
	SetWindowText(str);//设置窗口标题
}

在这里插入图片描述

EN_KILLFOCUS消息

与上面相反,失去焦点时获得消息

EN_MAXTEXT消息

这里要先设置一下最大值,才能获取这个消息

BOOL C控件消息Dlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标

	// TODO: 在此添加额外的初始化代码
	auto pEdit = (CEdit*)GetDlgItem(IDC_EDIT1);//获取文本框控件
	pEdit->SetLimitText(10);//设置文本框最大字符数

	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

void C控件消息Dlg::OnMaxtextEdit1()
{
	MessageBox(_T("文本框已达到最大字符数"));
}

在这里插入图片描述

EN_ERRSPACE消息

当 Edit 控件在执行某些操作时,由于系统内存不足,无法完成分配所需内存空间的任务,就会触发 EN_ERRSPACE 消息。这是一个系统发出的警示信号,告知程序当前 Edit 控件遇到了内存分配困境,可能影响正常功能的运行,例如无法存储新输入的文本、无法动态扩展以显示完整内容等。比如在文本文档里输入的内容超过限制数量,弹出一个提示

EN_HSCROLL消息

要接收到消息,先要设置一下滚动条
在这里插入图片描述
这里水平和竖直滚动条都开了

void C控件消息Dlg::OnHscrollEdit1()
{
	//MessageBox(_T("水平滚动条被拖动"));
	auto pEdit = (CEdit*)GetDlgItem(IDC_EDIT1);//获取文本框控件
	int pos = pEdit->GetScrollPos(SB_HORZ);//获取水平滚动条位置
	CString str;
	str.Format(_T("水平滚动条位置:%d"), pos);
	SetWindowText(str);//设置窗口标题
}

在这里插入图片描述

按钮控件

BN_CLICKED消息

和以前的双击一样,都是关联到OnBnClickedButton()

BN_DOUBLECLICKED消息

要获取双击事件,要开启notify
在这里插入图片描述

void C控件消息Dlg::OnDoubleclickedButton1()
{
	MessageBox(_T("按钮被双击"));
}

后面很多消息需要开启notify

BN_SETFOCUS消息

获得焦点

BN_KILLFOCUS消息

失去焦点

单选按钮

BN_CLICKED 消息

需要的消息可以在类向导里一起选中双击,后确定
在这里插入图片描述
这里双击同样要开启notify

void C控件消息Dlg::OnClickedRadio1()
{
	SetWindowText(_T("radio1被点击"));
}


void C控件消息Dlg::OnKillfocusRadio1()
{
	SetWindowText(_T("radio1失去焦点"));
}


void C控件消息Dlg::OnSetfocusRadio1()
{
	SetWindowText(_T("radio1获得焦点"));
}


void C控件消息Dlg::OnDoubleclickedRadio1()
{
	MessageBox(_T("radio1被双击"));
}

在这里插入图片描述

复选框

BN_CLICKED

BN_DOUBLECLICKED消息

组合框

创建了一个combobox,给它设置了一个控件变量m_combobox

CBN_SELCHANGE 消息

CBN_EDITCHANGE 消息

CBN_DROPDOWN消息

下拉箭头点击时发出的消息

void C控件消息Dlg::OnDropdownCombo1()
{
	MessageBeep(0xFFFFFFFF);//发出声音
}

CBN_CLOSEUP消息

CBN_SELENDOK消息

CBN_SELENDCANCEL消息

void C控件消息Dlg::OnSelendcancelCombo1()
{
	MessageBox(_T("下拉框选项被取消"));
}

在这里插入图片描述

WM_NOTIFY消息

1.当控件向父窗口发送消息

当自定义控件中发生了特殊的事件需要通知父窗口时,可以向父窗口发送消息,最简单的方法就是直接向父窗口直接发送自定义消息:
在pch.h定义一下全局的宏

#define UM_TEST WM_USER + 1//自定义消息

创建一个自定义类CMyButton,继承自CButton,下面是cpp文件

#include "pch.h"
#include "CMyButton.h"

BEGIN_MESSAGE_MAP(CMyButton, CButton)
	ON_CONTROL_REFLECT(BN_CLICKED, &CMyButton::OnBnClicked)
END_MESSAGE_MAP()


void CMyButton::OnBnClicked()
{
	// TODO: 在此添加控件通知处理程序代码
	this->GetParent()->SendMessage(UM_TEST, 1, 2);//发送自定义消息
}

然后就可以在主窗口截取消息
Dlg.cpp里添加消息映射

ON_MESSAGE(UM_TEST, &C控件消息Dlg::OnTestBtnMsg)//添加在消息映射那块

添加接收函数


LRESULT C控件消息Dlg::OnTestBtnMsg(WPARAM wParam, LPARAM lParam)
{
	CString str;
	str.Format(_T("收到自定义消息,参数1:%d,参数2:%d"), wParam, lParam);
	MessageBox(str);
	return wParam + lParam;
}

在这里插入图片描述

缺点:需要用到唯一ID的时候,父窗口中的控件会有很多,并不能保证所有消息ID都是唯一的。父窗口可能有一个控件和子窗口的控件同名

2.标准的解决方案

WM_NOTIFY 消息它主要用于控件向其父窗口发送详细的通知信息。
这个消息与其它的消息不同,用户可以自定义通知的内容,但传递消息的方式是统一的。
上述CMyButton.cpp中的函数改成


void CMyButton::OnBnClicked()
{
	// TODO: 在此添加控件通知处理程序代码
	NMHDR nmhdr;//一个NMHDR结构体,用于存储按钮的消息
	nmhdr.hwndFrom = GetSafeHwnd();//获取按钮的句柄
	nmhdr.idFrom = GetDlgCtrlID();//获取按钮的ID
	nmhdr.code = UM_TEST;//自定义消息
	this->GetParent()->SendMessage(WM_NOTIFY, nmhdr.idFrom, (LPARAM)&nmhdr);//发送消息
	//注意,这里如果用PostMessage,则按钮点击后不会立即响应,而是等到消息队列中的其他消息处理完毕后才会响应,后面如果用WM_NOTIFY接收,会接收不到,需要再添加一行代码,才能收到
}

Dlg里的消息改成

ON_NOTIFY(UM_TEST, IDC_TEST_BUTTON, &C控件消息Dlg::OnTestBtnMsg2)

Dlg的消息接收函数改成

void C控件消息Dlg::OnTestBtnMsg2(NMHDR* pNMHDR, LRESULT* pResult)
{
	CString str;
	str.Format(_T("收到自定义消息,参数1:%d,参数2:%d"), pNMHDR->idFrom, pNMHDR->code);
	MessageBox(str);
	*pResult = 0;//表示消息处理完毕
}

还可以对NMHDR这个结构体进行拓展

在pc.h里添加结构体

typedef struct MyNMHDR
{
	NMHDR nmhdr;
	int data1;
	int data2;
} MyNMHDR, * PMyNMHDR;

CMyButton.cpp修改

void CMyButton::OnBnClicked()
{
	// TODO: 在此添加控件通知处理程序代码
	NMHDR nmhdr;//一个NMHDR结构体,用于存储按钮的消息
	nmhdr.hwndFrom = GetSafeHwnd();//获取按钮的句柄
	nmhdr.idFrom = GetDlgCtrlID();//获取按钮的ID
	nmhdr.code = UM_TEST;//自定义消息

	MyNMHDR mynmhdr;
	mynmhdr.nmhdr = nmhdr;
	mynmhdr.data1 = 100;
	mynmhdr.data2 = 200;
	this->GetParent()->SendMessage(WM_NOTIFY, nmhdr.idFrom, (LPARAM)&mynmhdr);//发送消息
}

Dlg.cpp修改

void C控件消息Dlg::OnTestBtnMsg2(NMHDR* pNMHDR, LRESULT* pResult)
{
	MyNMHDR* pnmhdr = (MyNMHDR*)pNMHDR;

	CString str;
	str.Format(_T("收到自定义消息,参数1:%d,参数2:%d ,参数3:%d,参数4:%d"), pNMHDR->idFrom, pNMHDR->code, pnmhdr->data1, pnmhdr->data2);
	MessageBox(str);
	*pResult = 0;//表示消息处理完毕
}

微调控件

控件事件也可以点属性框那个闪电符号设置
在这里插入图片描述
选中需要添加的事件,点下拉按钮,点add
在这里插入图片描述

UDN_DELTAPOS消息

步长位置消息
在这里插入图片描述
可以看出,该结构体和我们上例自定义的MyNMHDR类似,那么用法也是类似的

void C控件消息Dlg::OnDeltaposSpin1(NMHDR* pNMHDR, LRESULT* pResult)
{
	LPNMUPDOWN pNMUpDown = reinterpret_cast<LPNMUPDOWN>(pNMHDR);
	// TODO: 在此添加控件通知处理程序代码
	CString str;
	str.Format(_T("当前值:%d, 步长:%d"), pNMUpDown->iPos, pNMUpDown->iDelta);
	SetWindowText(str);//设置窗口标题
	CSpinButtonCtrl* pSpin = (CSpinButtonCtrl*)GetDlgItem(IDC_SPIN1);//获取控件
	UDACCEL uda[1];//定义一个加速器数组
	uda[0].nInc = 10;//每次增加的值
	uda[0].nSec = 1;//加速时间间隔
	pSpin->SetAccel(1, uda);//设置加速器
	*pResult = 0;
}

在这里插入图片描述

滑动控件

TRBN_THUBPOSCHANGING

滑块位置改变消息
该消息需要开启notify

void C控件消息Dlg::OnTRBNThumbPosChangingSlider1(NMHDR* pNMHDR, LRESULT* pResult)
{
	// 此功能要求 Windows Vista 或更高版本。
	// _WIN32_WINNT 符号必须 >= 0x0600。
	NMTRBTHUMBPOSCHANGING* pNMTPC = reinterpret_cast<NMTRBTHUMBPOSCHANGING*>(pNMHDR);
	// TODO: 在此添加控件通知处理程序代码
	CString str;
	str.Format(_T("当前值:%d,移动原因:%d"), pNMTPC->dwPos, pNMTPC->nReason);//移动原因,有点滑之类的
	SetWindowText(str);//设置窗口标题
	*pResult = 0;
}

进度条

都是通用消息,略

列表

LBN_SELCHANGE 消息

选择改变消息

LBN_DBLCLK 消息

LBN_SELCANCEL 消息

选择取消消息
这个消息要结合combobox才能触发,下面会介绍

LBN_SETFOCUS 消息

LVN_ITEMCHANGED 消息

列表选择发生改变的消息,如果是HDN_ITEMCHANGED消息,就是表头选择发生改变

void C控件消息Dlg::OnLvnItemchangedList2(NMHDR* pNMHDR, LRESULT* pResult)
{
	LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
	// TODO: 在此添加控件通知处理程序代码
	if (pNMLV->uNewState & LVIS_SELECTED)//如果被选中
	{
		CString str;
		str.Format(_T("item:%d\r\niSubitem:%d\r\n状态:%d\r\nold状态:%d\r\n"), pNMLV->iItem, pNMLV->iSubItem, pNMLV->uNewState, pNMLV->uOldState);
		//把字符串放到m_edit中
		m_edit.SetWindowText(str);
	}
	*pResult = 0;
}

LVN_COLUMCLICK 消息

列的点击,一般可以用来排序之类的

实现简单的列表排序

.h文件定义一个排序函数

static int CALLBACK CompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);//排序函数

.cpp实现

DWORD dwSelColID;	// 选择的列
bool bSortAsc = true;	// 是否升序
void C控件消息Dlg::OnLvnColumnclickList2(NMHDR* pNMHDR, LRESULT* pResult)
{
	LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
	// TODO: 在此添加控件通知处理程序代码
	int nCol = pNMLV->iSubItem;//获取列
	for (int i = 0; i < m_list.GetHeaderCtrl()->GetItemCount(); i++)
		m_list.SetItemData(i, i);//设置列的排序数据
	dwSelColID = nCol;//保存列	
	bSortAsc = !bSortAsc;//改变排序方式
	m_list.SortItems(CompareProc, (DWORD_PTR)&m_list);//排序

	*pResult = 0;
}



int C控件消息Dlg::CompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
	CListCtrl* pList = (CListCtrl*)lParamSort;
	CString str1 = pList->GetItemText(lParam1, dwSelColID);
	CString str2 = pList->GetItemText(lParam2, dwSelColID);
	if (bSortAsc)
		return str1.Compare(str2);
	else
		return str2.Compare(str1);
}

树控件

TVNSELCHANGED 消息

选择发生改变消息

void C控件消息Dlg::OnTvnSelchangedTree1(NMHDR* pNMHDR, LRESULT* pResult)
{
	LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
	// TODO: 在此添加控件通知处理程序代码
	HTREEITEM hItem = pNMTreeView->itemNew.hItem;
	CString str;
	str.Format(_T("选中项:%s"), m_tree.GetItemText(hItem));
	SetWindowText(str);
	*pResult = 0;
}

在这里插入图片描述

TVN_ITEMEXPANDING消息

展开消息

TVN_KEYDOWN 消息

按键消息

void C控件消息Dlg::OnTvnKeydownTree1(NMHDR* pNMHDR, LRESULT* pResult)
{
	LPNMTVKEYDOWN pTVKeyDown = reinterpret_cast<LPNMTVKEYDOWN>(pNMHDR);
	// TODO: 在此添加控件通知处理程序代码
	if (pTVKeyDown->wVKey == 0x46 && (GetKeyState(VK_CONTROL) & 0x8000))//按下了回车键和Ctrl
	{
		MessageBox(_T("按下了F和Ctrl"));
	}
	*pResult = 0;
}

Tab控件

TCN_SELCHANGED 消息

选择改变消息

void C控件消息Dlg::OnTcnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult)
{
	// TODO: 在此添加控件通知处理程序代码
	int nTab = ((CTabCtrl*)GetDlgItem(IDC_TAB1))->GetCurSel();//获取当前选项卡
	CString str;
	str.Format(_T("当前选项卡:%d"), nTab);
	SetWindowText(str);

	*pResult = 0;
}

TCN_KEYDOWN 消息

按键消息

void C控件消息Dlg::OnTcnKeydownTab1(NMHDR* pNMHDR, LRESULT* pResult)
{
	NMTCKEYDOWN* pTCKeyDown = reinterpret_cast<NMTCKEYDOWN*>(pNMHDR);
	// TODO: 在此添加控件通知处理程序代码
	if (pTCKeyDown->wVKey == 0x30 && (GetKeyState(VK_CONTROL) & 0x8000))//按下了0和Ctrl
		MessageBox(_T("按下了0和Alt"));
	if (pTCKeyDown->wVKey == 0x10)//按下了回车键
		MessageBox(_T("按下了shift"));
	*pResult = 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2314682.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于C语言的简单HTTP Web服务器实现

1. 概述 本案例使用C语言实现了一个简单的HTTP服务器&#xff0c;能够处理客户端的GET请求&#xff0c;并返回静态文件&#xff08;如HTML、图片等&#xff09;。在此案例中案例&#xff0c;我们主要使用的知识点有&#xff1a; Socket编程&#xff1a;基于TCP协议的Socket通信…

ZYNQ初识13(zynq_7020)hdmi和串口板载功能的验证

&#xff08;1&#xff09;另&#xff1a;首先需要确认供电模块&#xff0c;电压转换模块没有问题&#xff0c;测量后上电防止出现短路。通过vivado下载bit流文件检测JTAG下载口是否正常&#xff0c;如可正常检测&#xff0c;才可进行下一步验证。 &#xff08;2&#xff09;以…

ollama下载的DeepSeek的模型(Model)文件在哪里?(C盘下)

目录 一、下载大模型&#xff08;DeepSeek&#xff09; 2. 安装 Ollama 3. 检查安装是否成功 二、拉取大模型&#xff08;DeepSeek&#xff09; 1. 打开命令行 2. 下载模型 3. 测试下载 4. 等待下载完成 三.模型存放路径 这个位置&#xff01;&#xff01; 在人工智能…

docker的anythingllm和open-webui压缩包分享(国内镜像拉取,百度云压缩包分享)

文章目录 前言第一部分&#xff1a;镜像获取&#x1f680; 方式一&#xff1a;切换国内下载镜像✅1. 下载anythingllm✅ 2. 下载open-webui &#x1f680;方式二&#xff1a;下载我分享的百度云✅ anythingllm压缩包百度云链接❎ open-webui压缩包 第二部分&#xff1a;下载之后…

父组件中循环生成多个子组件时,有且只有最后一个子组件的watch对象生效问题及解决办法

提示&#xff1a;父组件中循环生成多个子组件时&#xff0c;有且只有最后一个子组件的watch对象生效问题及解决办法 文章目录 [TOC](文章目录) 前言一、问题二、解决方法——使用function函数代替箭头函数()>{}总结 前言 ‌‌‌‌‌问题&#xff1a;子组件用that解决watch无…

求递增子序列LIS的两种方法

文章目录 前言一、普通动态规划&#xff08;DP&#xff09;求解LIS1.DP思路2.DP的状态定义与转移方程3.DP的时间与空间复杂度4.DP代码实现5.DP的图文示例 二、贪心 二分查找求解LIS1.思路分析2.贪心 二分的时间与空间复杂度 三. 模板题讲解1.洛谷B3637 最长上升子序列1.dp写法…

【Linux篇】进程状态(僵尸进程,孤儿进程),优先级与调度机制

&#x1f4cc; 个人主页&#xff1a; 孙同学_ &#x1f527; 文章专栏&#xff1a;Liunx &#x1f4a1; 关注我&#xff0c;分享经验&#xff0c;助你少走弯路&#xff01; 文章目录 1. 前文铺垫理解内核链表 2. 进程状态2.1 进程状态查看2.2 僵尸进程2.3 僵尸进程危害2.4 孤儿…

AI应用加速落地丨MaxKB正在被政府、公共事业、教育和医疗行业用户广泛采纳

2025年2月至3月上旬&#xff0c;伴随着各个行业接入并使用DeepSeek&#xff0c;MaxKB开源知识库问答系统正在被越来越多的行业用户所采纳&#xff0c;是人工智能行业落地的强应用。目前&#xff0c;MaxKB在政府、公共事业、教育和医疗四大行业已经拥有了众多典型案例&#xff0…

2024年第十五届蓝桥杯软件C/C++大学A组——五子棋对弈

蓝桥杯原题&#xff1a; 题目描述&#xff1a; “在五子棋的对弈中&#xff0c;友谊的小船说翻就翻&#xff1f; ” 不&#xff01;对小蓝和小桥来说&#xff0c;五子棋不仅是棋盘上的较量&#xff0c;更是心与心之间的沟通。这两位挚友秉承着 “ 友谊第一&#xff0c;比赛第二…

复试难度解析,西电先进材料与纳米科技学院学院考研录取情况

01、先进材料与纳米科技学院各个方向 02、24先进材料与纳米科技学院近三年复试分数线对比 PS&#xff1a;材料院24年院线学硕方向降低10分&#xff0c;专硕上涨15分&#xff1b;材料院在分数线相对于其他211、985院校对比来看&#xff0c;依然分数偏低&#xff0c;推荐大家关注…

Deepseek Chatgpt Kimi 推荐的深度学习书单

朋友让推荐一些深度学习的书&#xff0c;让 Deepseek、Chatgpt、Kimi 分别生成了一份书单并做了对比&#xff0c;记录一下以备以后用到。 Chatgpt 推荐的深度学习书 1. chatgpt 推荐的书目截图 1.2 Chatgpt 推荐的深度学习书目文字版 如果你想学习 Deep Learning&#xff0…

高频面试题(含笔试高频算法整理)基本总结回顾25

干货分享&#xff0c;感谢您的阅读&#xff01; &#xff08;暂存篇---后续会删除&#xff0c;完整版高频面试题基本总结回顾&#xff08;含笔试高频算法整理&#xff09;&#xff09; 备注&#xff1a;引用请标注出处&#xff0c;同时存在的问题请在相关博客留言&#xff0c…

mac安装mysql之后报错zsh: command not found: mysql !

在Mac上安装MySQL后&#xff0c;如果终端中找不到mysql命令&#xff0c;通常是 因为MySQL的命令行工具&#xff08;如mysql客户端&#xff09;没有被正确地添加到你的环境变量中。 检查 MySQL 是否已安装 ps -ef|grep mysql查看到路径在 /usr/local/mysql/bin 查看 .bash_pro…

蓝桥杯备考:set容器用法(lower_bound)---营业额统计

如图所示&#xff0c;这道题的暴力解法就是枚举每天的营业额&#xff0c;让该营业额和前面的天的营业额依次相减取最小值这样的话我们的时间复杂度就是N平方&#xff0c;我们是很有可能超时的 所以我们选择用set容器的二分查找功能 我们每次遍历到一个数的时候&#xff0c;前…

VSCode集成C语言开发环境

下载MinGW https://sourceforge.net/projects/mingw/ 点击download按钮下载exe文件到本地 点击exe文件安装 选择基础包和c编译版 vscode安装部分跳过 安装code runner和c/c插件 **(1) 创建 C 文件** 新建一个测试文件&#xff08;例如 hello.c&#xff09;&#xf…

Python----数据可视化(pyecharts二:绘图一:条形图,直方图,折线图,散点图,箱图,饼图,热力图)

1、条形图 from pyecharts.charts import Bar from pyecharts.faker import Faker from pyecharts import options as opts # 绘制柱状图 bar (Bar() # 创建柱状图.add_yaxis("商家A", Faker.values(),colorFaker.rand_color()) # 添加数据.add_yaxis("商家B&…

Training-free Neural Architecture Search for RNNs and Transformers(预览版本)

摘要 神经架构搜索 (NAS) 允许自动创建新的有效神经网络架构&#xff0c;为手动设计复杂架构的繁琐过程提供了替代方案。然而&#xff0c;传统的 NAS 算法速度慢&#xff0c;需要大量的计算能力。最近的研究调查了图像分类架构的无训练 NAS 指标&#xff0c;大大加快了搜索算…

计算机考研C语言

C语言程序设计从入门到精通【2025完整版】考研复试 嵌入式 计算机二级 软考 专升本也适用_哔哩哔哩_bilibili 1、第一个C程序 helloC #include <stdio.h>int main(){printf("hehe");return 0;}每个C语言程序不管有多少行代码&#xff0c;都是从main函数开始执…

【MySQL】(4) 表的操作

一、创建表 语法&#xff1a; 示例&#xff1a; 生成的数据目录下的文件&#xff1a; 二、查看表结构 三、修改表 语法&#xff1a; 另一种改表名语法&#xff1a;rename table old_name1 to new_name1, old_name2 to new_name2; 示例&#xff1a; 四、删除表 语法&#xf…

Qt 中实现自定义控件子类化

一、子类化关键步骤 ‌1、选择基类‌ 根据需求选择合适的 Qt 原生控件作为基类&#xff08;如 QWidget、QPushButton、QSpinBox 等&#xff09;&#xff0c;通过继承实现功能扩展‌。 ‌2、重写关键方法‌ ‌绘制逻辑‌&#xff1a;重写 paintEvent() 方法&#xff0c;使用 Q…