windows第十二章 MFC控件常用消息
文章目录
- 控件反射消息机制
- 文本框控件
- 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等宏来处理控件的消息。
如果父窗口也没有处理该消息,消息会继续向上传递到更高级别的窗口(如主框架窗口),直到消息被处理或者到达消息链的末端。
创建消息步骤如下
- 对话框里创建一个控件,这里是edit control
- 点开类视图,点击类向导

- 搜索对象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();//获取按钮的IDnmhdr.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();//获取按钮的IDnmhdr.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);elsereturn 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和CtrlMessageBox(_T("按下了0和Alt"));if (pTCKeyDown->wVKey == 0x10)//按下了回车键MessageBox(_T("按下了shift"));*pResult = 0;
}相关文章:
windows第十二章 MFC控件常用消息
文章目录 控件反射消息机制文本框控件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_CLICKEDBN_DOU…...
基于C语言的简单HTTP Web服务器实现
1. 概述 本案例使用C语言实现了一个简单的HTTP服务器,能够处理客户端的GET请求,并返回静态文件(如HTML、图片等)。在此案例中案例,我们主要使用的知识点有: Socket编程:基于TCP协议的Socket通信…...
JavaScript语言的区块链隐私
使用JavaScript保护区块链隐私 随着区块链技术的快速发展,隐私保护的重要性日益凸显。区块链技术虽然在透明性和去中心化方面表现优异,但其公开账本特性也使得用户的交易和身份信息容易暴露。因此,如何在区块链应用中实现隐私保护成为了一个…...
ZYNQ初识13(zynq_7020)hdmi和串口板载功能的验证
(1)另:首先需要确认供电模块,电压转换模块没有问题,测量后上电防止出现短路。通过vivado下载bit流文件检测JTAG下载口是否正常,如可正常检测,才可进行下一步验证。 (2)以…...
ollama下载的DeepSeek的模型(Model)文件在哪里?(C盘下)
目录 一、下载大模型(DeepSeek) 2. 安装 Ollama 3. 检查安装是否成功 二、拉取大模型(DeepSeek) 1. 打开命令行 2. 下载模型 3. 测试下载 4. 等待下载完成 三.模型存放路径 这个位置!! 在人工智能…...
docker的anythingllm和open-webui压缩包分享(国内镜像拉取,百度云压缩包分享)
文章目录 前言第一部分:镜像获取🚀 方式一:切换国内下载镜像✅1. 下载anythingllm✅ 2. 下载open-webui 🚀方式二:下载我分享的百度云✅ anythingllm压缩包百度云链接❎ open-webui压缩包 第二部分:下载之后…...
树莓科技(成都)集团:如何铸就第五代产业园标杆
树莓科技(成都)集团铸就第五代产业园标杆,主要体现在以下几个方面: 精准定位与前瞻布局 树莓科技并非盲目扩张,而是精准锚定数字经济发展方向。以成都为起点,迅速构建起全国性的园区版图,体现…...
父组件中循环生成多个子组件时,有且只有最后一个子组件的watch对象生效问题及解决办法
提示:父组件中循环生成多个子组件时,有且只有最后一个子组件的watch对象生效问题及解决办法 文章目录 [TOC](文章目录) 前言一、问题二、解决方法——使用function函数代替箭头函数()>{}总结 前言 问题:子组件用that解决watch无…...
《解锁Flutter:跨平台开发的未来之光》
《解锁Flutter:跨平台开发的未来之光》 Flutter:崭新时代的跨平台框架 在当今数字化浪潮中,移动应用已成为人们生活中不可或缺的一部分。无论是购物、社交、娱乐还是办公,我们都离不开各种手机应用。而在移动应用开发领域&#…...
求递增子序列LIS的两种方法
文章目录 前言一、普通动态规划(DP)求解LIS1.DP思路2.DP的状态定义与转移方程3.DP的时间与空间复杂度4.DP代码实现5.DP的图文示例 二、贪心 二分查找求解LIS1.思路分析2.贪心 二分的时间与空间复杂度 三. 模板题讲解1.洛谷B3637 最长上升子序列1.dp写法…...
【Linux篇】进程状态(僵尸进程,孤儿进程),优先级与调度机制
📌 个人主页: 孙同学_ 🔧 文章专栏:Liunx 💡 关注我,分享经验,助你少走弯路! 文章目录 1. 前文铺垫理解内核链表 2. 进程状态2.1 进程状态查看2.2 僵尸进程2.3 僵尸进程危害2.4 孤儿…...
SAP-ABAP:CONV(显示类型转换符)关键字详解
SAP ABAP CONV 关键字详解 CONV 是 ABAP 7.40 版本引入的显式类型转换操作符,用于将表达式的结果强制转换为指定的数据类型。它提供了一种清晰且类型安全的方式处理数据转换,避免隐式转换的潜在风险。以下是其核心特性和应用场景的全面解析:…...
AI应用加速落地丨MaxKB正在被政府、公共事业、教育和医疗行业用户广泛采纳
2025年2月至3月上旬,伴随着各个行业接入并使用DeepSeek,MaxKB开源知识库问答系统正在被越来越多的行业用户所采纳,是人工智能行业落地的强应用。目前,MaxKB在政府、公共事业、教育和医疗四大行业已经拥有了众多典型案例࿰…...
⚡️Jolt -- 通过JSON配置来处理复杂数据转换的工具
简介:一个能够通过JSON配置(特定的语法)来处理复杂数据转换的工具。 比如将API响应转换为内部系统所需的格式,或者处理来自不同来源的数据结构差异。例如,将嵌套的JSON结构扁平化,或者重命名字段࿰…...
Django系列教程(7)——路由配置URLConf
目录 URLconf是如何工作的? path和re_path方法 更多URL配置示例 URL的命名及reverse()方法 使用命名URL 硬编码URL - 不建议 URL指向基于类的视图(View) 通过URL传递额外的参数 小结 Django的项目文件夹和每个应用(app)目录下都有urls.py文件,它们构成了D…...
TDengine SQL 函数
单行函数 数学函数 ABSACOSASINATANCEILCOSDEGREESEXPFLOORGREATESTLEASTLNLOGMODPIPOWRADIANSRANDROUNDSIGNSINSQRTTANTRUNCATE 字符串函数 ASCIICHARCHAR_LENGTHCONCATCONCAT_WSLENGTHLOWERLTRIMPOSITIONREPEATREPLACERTRIMSUBSTRING/SUBSTRSUBSTRING_INDEXTRIMUPPER 转换函数…...
二维数组基础
在 C 语言中,二维数组是一种数据结构,它可以存储表格形式的数据,或是矩阵形式的数据。二维数组可以被看作是一个包含多个一维数组的数组,因此它有两个维度:行和列。 1. 二维数组的定义与声明 在 C 语言中,二维数组的定义形式如下: data_type array_name[rows][column…...
2024年第十五届蓝桥杯软件C/C++大学A组——五子棋对弈
蓝桥杯原题: 题目描述: “在五子棋的对弈中,友谊的小船说翻就翻? ” 不!对小蓝和小桥来说,五子棋不仅是棋盘上的较量,更是心与心之间的沟通。这两位挚友秉承着 “ 友谊第一,比赛第二…...
复试难度解析,西电先进材料与纳米科技学院学院考研录取情况
01、先进材料与纳米科技学院各个方向 02、24先进材料与纳米科技学院近三年复试分数线对比 PS:材料院24年院线学硕方向降低10分,专硕上涨15分;材料院在分数线相对于其他211、985院校对比来看,依然分数偏低,推荐大家关注…...
Deepseek Chatgpt Kimi 推荐的深度学习书单
朋友让推荐一些深度学习的书,让 Deepseek、Chatgpt、Kimi 分别生成了一份书单并做了对比,记录一下以备以后用到。 Chatgpt 推荐的深度学习书 1. chatgpt 推荐的书目截图 1.2 Chatgpt 推荐的深度学习书目文字版 如果你想学习 Deep Learning࿰…...
高频面试题(含笔试高频算法整理)基本总结回顾25
干货分享,感谢您的阅读! (暂存篇---后续会删除,完整版高频面试题基本总结回顾(含笔试高频算法整理)) 备注:引用请标注出处,同时存在的问题请在相关博客留言,…...
ClickHouse SQL优化:解锁高性能数据分析的关键
一、引言 1.1 ClickHouse的背景与优势 ClickHouse是一款高性能的列式数据库,专为在线分析处理(OLAP)场景设计。它以其卓越的读写性能、强大的数据压缩能力和灵活的SQL支持而闻名。ClickHouse能够轻松处理PB级数据,并在亚秒级内返回查询结果,这使其成为大数据分析领域的理…...
我与DeepSeek读《大型网站技术架构》(14)- 架构师领导艺术
文章目录 架构师领导艺术以人为本:激发团队潜能开放式协作:打破架构“所有权”壁垒妥协的艺术:聚焦核心目标成就他人:构建持续进化团队高效沟通:建立技术与人性的平衡 架构师领导艺术 本章聚焦架构师如何通过团队协作…...
mac安装mysql之后报错zsh: command not found: mysql !
在Mac上安装MySQL后,如果终端中找不到mysql命令,通常是 因为MySQL的命令行工具(如mysql客户端)没有被正确地添加到你的环境变量中。 检查 MySQL 是否已安装 ps -ef|grep mysql查看到路径在 /usr/local/mysql/bin 查看 .bash_pro…...
蓝桥杯备考:set容器用法(lower_bound)---营业额统计
如图所示,这道题的暴力解法就是枚举每天的营业额,让该营业额和前面的天的营业额依次相减取最小值这样的话我们的时间复杂度就是N平方,我们是很有可能超时的 所以我们选择用set容器的二分查找功能 我们每次遍历到一个数的时候,前…...
VSCode集成C语言开发环境
下载MinGW https://sourceforge.net/projects/mingw/ 点击download按钮下载exe文件到本地 点击exe文件安装 选择基础包和c编译版 vscode安装部分跳过 安装code runner和c/c插件 **(1) 创建 C 文件** 新建一个测试文件(例如 hello.c)…...
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) 允许自动创建新的有效神经网络架构,为手动设计复杂架构的繁琐过程提供了替代方案。然而,传统的 NAS 算法速度慢,需要大量的计算能力。最近的研究调查了图像分类架构的无训练 NAS 指标,大大加快了搜索算…...
Linux机器之间排查网络连通问题
网络连通性排查步骤(基于五层模型) 以下按照网络五层架构,从底层到高层逐层排查,并分别列出Ubuntu和CentOS对应的命令。 1. 物理层 排查点:网线、网卡状态、物理连接。 命令(通用):…...
计算机考研C语言
C语言程序设计从入门到精通【2025完整版】考研复试 嵌入式 计算机二级 软考 专升本也适用_哔哩哔哩_bilibili 1、第一个C程序 helloC #include <stdio.h>int main(){printf("hehe");return 0;}每个C语言程序不管有多少行代码,都是从main函数开始执…...
