MFC第二十四天 使用GDI对象画笔和画刷来开发控件(分页控件选择态的算法分析、使用CToolTipCtrl开发动静态提示)

这篇具有很好参考价值的文章主要介绍了MFC第二十四天 使用GDI对象画笔和画刷来开发控件(分页控件选择态的算法分析、使用CToolTipCtrl开发动静态提示)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

GDI对象画笔和画刷来开发控件

梯形边框的按钮控件

CMainDlg.h

class CMainDlg : public CDialogEx
{
// 构造
	CLadderCtrl m_ladd;

protected:
	virtual BOOL OnInitDialog();
	afx_msg void OnPaint();
public:
	afx_msg void OnSize(UINT nType, int cx, int cy);
};

CMainDlg.cpp

void CMainDlg::OnSize(UINT nType, int cx, int cy)
{
	CDialogEx::OnSize(nType, cx, cy);
	
	if (m_ladd)
	{
		m_ladd.SetWindowPos(NULL, 0, cy - 20, cx, cy, SWP_NOZORDER);
	}
}
BOOL CMainDlg::OnInitDialog(){
	CDialogEx::OnInitDialog();
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标
	CRect rect;
	GetClientRect(rect);
	rect.top = rect.bottom - 20;
	m_ladd.Create(WS_CHILD | WS_VISIBLE, rect, this,8888);
	m_ladd.InsertItem(0, _T("组建"));
	m_ladd.InsertItem(1, _T("调试"));
	m_ladd.InsertItem(2, _T("在文件1中查找"));
	m_ladd.InsertItem(3, _T("在文件2中查找"));
	m_ladd.InsertItem(4, _T("结果"));
	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

CLadderCtrl.h

class CLadderCtrl : public CWnd{
	DECLARE_DYNAMIC(CLadderCtrl)
	CStringArray m_ds;  //存储一组字符串 使用Add方法添加新的字符串,使用RemoveAt方法删除指定位置的字符串,使用GetAt方法获取特定位置的字符串等。
	int m_nIndex{}; 
	CBrush m_br, m_brSel;
	CFont m_font, m_fontSel;
public:
	CLadderCtrl();
	virtual ~CLadderCtrl();
	BOOL Create(DWORD dwStyle, CRect rect, CWnd* pParent, int nID);
	LONG InsertItem(int nItem, LPCTSTR lpszItem);
	int SetCurSel(int nItem);
	int GetCurSel() const;
	int GetItemCount() const;
	BOOL DeleteAllItems();	BOOL DeleteItem(int nItem);
};

CLadderCtrl.cpp

CLadderCtrl::CLadderCtrl(){
	m_br.CreateSolidBrush(GetSysColor(COLOR_BTNFACE));
	m_brSel.CreateSolidBrush(GetSysColor(COLOR_HIGHLIGHT));
	HFONT hfont = (HFONT)GetStockObject(DEFAULT_GUI_FONT); // GetStockObject 返回的是void* 要给转为具体类型
	LOGFONT lf;
	GetObject(hfont, sizeof(lf), &lf);
	m_font.CreateFontIndirect(&lf);
	lf.lfWeight = 700;
	m_fontSel.CreateFontIndirect(&lf);
}
CLadderCtrl::~CLadderCtrl()	{}
BOOL CLadderCtrl::Create(DWORD dwStyle, CRect rect, CWnd* pParent, int nID){
	return CWnd::Create(NULL, NULL, dwStyle, rect, pParent, nID);
}
LONG CLadderCtrl::InsertItem(int nItem, LPCTSTR lpszItem)
{
	m_ds.InsertAt(nItem,lpszItem);
	return nItem;
}
int CLadderCtrl::SetCurSel(int nItem)
{
	return 0;
}
int CLadderCtrl::GetCurSel() const
{
	return 0;
}
int CLadderCtrl::GetItemCount() const
{
	return (int)m_ds.GetCount();
}
BOOL CLadderCtrl::DeleteAllItems()
{
	m_ds.RemoveAll();
	return TRUE;
}
BOOL CLadderCtrl::DeleteItem(int nItem)
{
	m_ds.RemoveAt(nItem);
	return TRUE;
}
void CLadderCtrl::OnPaint()
{
	CPaintDC dc(this); // device context for painting
	CRect rect;
	GetClientRect(rect);
	dc.SetBkMode(TRANSPARENT);
	dc.FillSolidRect(rect, GetSysColor(COLOR_INFOBK));

	int i = -1, nCount =(int) m_ds.GetCount();
 
	const int H = rect.Height(); //创建一个宽度为矩形高度的四分之一,高度为整个矩形高度的矩形rc。
	CRect rc{ H/4,0,0,rect.bottom };
	dc.SelectObject(&m_br);
	POINT ptSel[4];
	CString sSel;
	CRect rSel;

	dc.SelectObject(&m_font); //宋体9 就是默认字体

	/*HFONT hFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
	LOGFONT lf;
	GetObject(hFont, sizeof(lf), &lf);*/

	while (++i<nCount)
	{
		CString str = m_ds[i];

		CSize size = dc.GetTextExtent(str); //获取字符串str在设备上下文dc中的宽度和高度,并将结果存储在CSize对象size中
		rc.right = rc.left + size.cx +H; //左边界加上字符串宽度和一个常量H	 可以保证矩形rc的宽度至少能够容纳字符串,并且在右边留出一个宽度为常量H的空白区域
	
		POINT pts[] = { {rc.left-H/4,rc.top},{rc.right + H / 4,rc.top},{rc.right - H / 4,rc.bottom},{rc.left + H / 4,rc.bottom} };
		if (i!=m_nIndex)
		{
			dc.Polygon(pts, _countof(pts));
					//dc.Rectangle(rc);
			dc.DrawText(str, rc, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
		}
		else
		{
			memcpy(ptSel, pts, sizeof(pts));
			sSel = str;
			rSel = rc;
		}
		rc.left = rc.right;
	}
	dc.SelectObject(&m_brSel);

	dc.Polygon(ptSel, _countof(ptSel)); //要覆盖二次绘画
	dc.SelectObject(&m_fontSel);
	dc.DrawText(sSel, rSel, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
 }
//	dc.TextOut(0, 0, _T("测试系统颜色"));

void CLadderCtrl::OnLButtonDown(UINT nFlags, CPoint point)  //和上面算法一致 这个用来算出位置
{
	CWnd::OnLButtonDown(nFlags, point);
	CClientDC dc(this);
	dc.SelectStockObject(DEFAULT_GUI_FONT);
	int i = -1, nCount = (int)m_ds.GetCount();
	CRect rect;
	GetClientRect(rect);
	CRect rc{ 0,0,0,rect.bottom };

	while (++i<nCount)   
	{
		CString str = m_ds[i];

		CSize size = dc.GetTextExtent(str);
		rc.right = rc.left + size.cx + rect.Height();
		dc.SelectObject(i == m_nIndex ? &m_brSel : &m_br);
		if (rc.PtInRect(point))
		{
			if (i != m_nIndex)  //去除无效点击 
			{
				m_nIndex = i;
				Invalidate(FALSE);
			}
			break;
		}
		rc.left = rc.right;
	}
}

MFC第二十四天 使用GDI对象画笔和画刷来开发控件(分页控件选择态的算法分析、使用CToolTipCtrl开发动静态提示),MFC开发,mfc,算法,c++

矩形边框的三态按钮控件 CToolTipCtrl开发动静态提示

CMainDlg.h

#include "CLadderCtrl.h"
class CMainDlg : public CDialogEx
{
// 构造
	CLadderCtrl m_ladd;	
	CToolTipCtrl m_tip;
public:
	CMainDlg(CWnd* pParent = nullptr);	// 标准构造函数	
public:
	afx_msg void OnSize(UINT nType, int cx, int cy);
	virtual BOOL PreTranslateMessage(MSG* pMsg);
};

CMainDlg.cpp

BOOL CMainDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();
	CRect rect;
	GetClientRect(rect);
	rect.top = rect.bottom - 20;
	m_ladd.Create(WS_CHILD | WS_VISIBLE, rect, this,8888);
	m_ladd.InsertItem(0, _T("组建"));
	m_ladd.InsertItem(1, _T("调试"));
	m_ladd.InsertItem(2, _T("在文件1中查找"));
	m_ladd.InsertItem(3, _T("在文件2中查找"));
	m_ladd.InsertItem(4, _T("结果"));
	m_tip.Create(this);
	m_tip.AddTool(&m_ladd, _T("没想到吧"));
	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}
void CMainDlg::OnSize(UINT nType, int cx, int cy)
{
	CDialogEx::OnSize(nType, cx, cy);
	if (m_ladd)
		m_ladd.SetWindowPos(NULL, 0, cy - 20, cx, 20, SWP_NOZORDER);
}
BOOL CMainDlg::PreTranslateMessage(MSG* pMsg) //皇军的岗楼
{
	m_tip.RelayEvent(pMsg);
	return CDialogEx::PreTranslateMessage(pMsg);
}

CLadderCtrl.h

class CLadderCtrl : public CWnd
{
	DECLARE_DYNAMIC(CLadderCtrl)
	CStringArray m_ds;
	int m_nIndex{};
	int m_nTrack{};
	CBrush m_br, m_brSel,m_brTrack; //三态按钮  三态控件  没有选中色(普通) 选中色 放在上面的框色(追踪态)
	CBrush m_brBack;
	CPen m_pen;
	int GetIndex(CPoint point);
public:
	CLadderCtrl();
	virtual ~CLadderCtrl();
	BOOL Create(DWORD dwStyle, CRect rect, CWnd* pParent, int nID);

	LONG InsertItem(int nItem, LPCTSTR lpszItem);
	int SetCurSel(int nItem);
	int GetCurSel() const;
	int GetItemCount() const;
	BOOL DeleteAllItems();
	BOOL DeleteItem(int nItem);
// 对话框数据
#ifdef AFX_DESIGN_TIME
	enum { IDD = IDD_MAIN_DIALOG };
#endif

protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

	DECLARE_MESSAGE_MAP()
public:
	afx_msg void OnPaint();
	afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
	afx_msg void OnMouseMove(UINT nFlags, CPoint point);
};

CLadderCtrl.cpp: 实现文件

#include "pch.h"
#include "CreatControl.h"
#include "afxdialogex.h"
#include "CLadderCtrl.h"
CLadderCtrl::CLadderCtrl()  //有对应的构造函数可以在定义时直接给予初始化{}
{
	m_br.CreateSolidBrush(RGB(64,86,140));
	m_brSel.CreateSolidBrush(RGB(230,245,255)); 
	m_brTrack.CreateSolidBrush(RGB(187, 194, 241));
	m_brBack.CreateSolidBrush(RGB(93, 107, 153)); //默认的背景
	m_pen.CreatePen(PS_SOLID, 1, RGB(93, 107, 153));
}
CLadderCtrl::~CLadderCtrl()
{
}
BOOL CLadderCtrl::Create(DWORD dwStyle, CRect rect, CWnd* pParent, int nID)
{
	return CWnd::Create(NULL, NULL, dwStyle, rect, pParent, nID);
}
LONG CLadderCtrl::InsertItem(int nItem, LPCTSTR lpszItem)
{
	m_ds.InsertAt(nItem,lpszItem);
	return nItem;
}
int CLadderCtrl::SetCurSel(int nItem)
{
	ASSERT(nItem > -1 && nItem < m_ds.GetCount());
	m_nIndex = nItem;
	Invalidate(FALSE);
	return 0;
}
int CLadderCtrl::GetCurSel() const
{
	return m_nIndex;
}

int CLadderCtrl::GetItemCount() const
{
	
	return (int)m_ds.GetCount();
}

BOOL CLadderCtrl::DeleteAllItems()
{
	m_ds.RemoveAll();
	return TRUE;
}

BOOL CLadderCtrl::DeleteItem(int nItem)
{
	m_ds.RemoveAt(nItem);
	return TRUE;
}

void CLadderCtrl::DoDataExchange(CDataExchange* pDX)
{
	CWnd::DoDataExchange(pDX);
}


BEGIN_MESSAGE_MAP(CLadderCtrl, CWnd)
	ON_WM_PAINT()
	ON_WM_LBUTTONDOWN()
	ON_WM_MOUSEMOVE()
END_MESSAGE_MAP()
void CLadderCtrl::OnPaint()
{
	CPaintDC dc(this); // device context for painting
	CRect rect;
	GetClientRect(rect);
	dc.SetBkMode(TRANSPARENT);
	dc.FillRect(rect,&m_brBack);

	int i = -1, nCount =(int) m_ds.GetCount();
	int nLeft = 0;
	CRect rc{ 0,0,0,rect.bottom };

	CFont* pFont = GetFont();
	dc.SelectStockObject(DEFAULT_GUI_FONT); //宋体9 就是默认字体
	dc.SelectObject(&m_pen);

	/*HFONT hFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
	LOGFONT lf;
	GetObject(hFont, sizeof(lf), &lf);*/

	while (++i<nCount)
	{
		CString str = m_ds[i];

		CSize size = dc.GetTextExtent(str);
		rc.right = rc.left + size.cx + rect.Height();
		if (i == m_nIndex)
		{
			dc.SelectObject(&m_brSel);
			dc.SetTextColor(GetSysColor(COLOR_WINDOWTEXT));
		}
		else if (i == m_nTrack)
		{
			dc.SelectObject(&m_brTrack);
			dc.SetTextColor(GetSysColor(COLOR_WINDOWTEXT));
		}
		else
		{
			dc.SetTextColor(GetSysColor(COLOR_HIGHLIGHTTEXT));
			dc.SelectObject(&m_br);
		}
		//dc.SelectObject(i == m_nIndex ? &m_brSel:&m_br); 

		dc.Rectangle(rc);
		dc.DrawText(str, rc, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
	 
		rc.left = rc.right;
	}

 }
//	dc.TextOut(0, 0, _T("测试系统颜色"));
int CLadderCtrl::GetIndex(CPoint point)
{
	CClientDC dc(this);
	dc.SelectStockObject(DEFAULT_GUI_FONT);
	int i = -1, nCount = (int)m_ds.GetCount();
	CRect rect;
	GetClientRect(rect);
	CRect rc{ 0,0,0,rect.bottom };

	while (++i < nCount)
	{
		CString str = m_ds[i];

		CSize size = dc.GetTextExtent(str);
		rc.right = rc.left + size.cx + rect.Height();
		dc.SelectObject(i == m_nIndex ? &m_brSel : &m_br);
		if (rc.PtInRect(point))
		{
			return i;
		}
		rc.left = rc.right;
	}
	return -1;
}
void CLadderCtrl::OnLButtonDown(UINT nFlags, CPoint point)  //和上面算法一致 这个用来算出位置
{
	int nIndex = GetIndex(point);
	if (nIndex != m_nIndex)  //去除无效点击 
	{
		m_nIndex = nIndex;
		Invalidate(FALSE);
	}

	CWnd::OnLButtonDown(nFlags, point);
}
void CLadderCtrl::OnMouseMove(UINT nFlags, CPoint point)
{
	int nIndex = GetIndex(point);
	if (nIndex == m_nIndex)   
		return;
		
	if (m_nTrack!=nIndex)   
	{
		m_nTrack = nIndex;
		Invalidate(FALSE);
	}
	CWnd::OnMouseMove(nFlags, point);
}

MFC第二十四天 使用GDI对象画笔和画刷来开发控件(分页控件选择态的算法分析、使用CToolTipCtrl开发动静态提示),MFC开发,mfc,算法,c++

矩形边框的三态按钮控件 CToolTipCtrl开发动态提示

本次只添加了与静态提示不同之处的代码

CMainDlg.h

#include "CLadderCtrl.h"
class CMainDlg : public CDialogEx
{
// 构造
	CLadderCtrl m_ladd;	
	CToolTipCtrl m_tip;
public:
	CMainDlg(CWnd* pParent = nullptr);	// 标准构造函数
	
public:
	afx_msg void OnSize(UINT nType, int cx, int cy);
	virtual BOOL PreTranslateMessage(MSG* pMsg);
	afx_msg BOOL SetTipText(UINT id, NMHDR* pHdr, LRESULT* pResult);
	//反射型消息 手动创建的 一消息一函数一控件 一ID
	afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
};

CMainDlg.cpp

设置动态文字的函数

BOOL CMainDlg::SetTipText(UINT id, NMHDR* pHdr, LRESULT* pResult){
	int nIndex = m_ladd.GetTrack();
	if (nIndex < 0 || nIndex >= m_ladd.GetItemCount())
		return FALSE;
	TOOLTIPTEXT* pText = (TOOLTIPTEXT*)pHdr;
	if (pText->uFlags & TTF_IDISHWND){
		auto nID = (int)pHdr->idFrom;
		CString str = m_ladd.GetItemText(nIndex);
		_tcscpy_s(pText->szText, 80, str);
		return TRUE;
	}
	return FALSE;
	return 0;
}
BOOL CMainDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message){
	switch (pWnd->GetDlgCtrlID())	{
	case 8888:
	{
		static int nTrack = -1; // 用来看它是否切换 全局变量
		int n = m_ladd.GetTrack();
		if (nTrack !=n ){	 //切换算法
			nTrack = n;
			m_tip.Update();
		}
	}
		break;
	}
	return CDialogEx::OnSetCursor(pWnd, nHitTest, message);
}

CLadderCtrl.h

class CLadderCtrl : public CWnd{
	CStringArray m_ds;
	int m_nIndex{};
	int m_nTrack{};
	CBrush m_br, m_brSel,m_brTrack; //三态按钮 没有选中色(普通) 选中色 放在上面的框色(追踪态)
	CBrush m_brBack;
	int GetIndex(CPoint point);
public:
	int GetTrack() const{
		return m_nTrack; //拿到你追踪到的是几号
	}
	CString GetItemText(int nIndex) const{
		return m_ds[nIndex]; //拿到的对应的索引来获取文字
	}
	CLadderCtrl();

CLadderCtrl.cpp

int CLadderCtrl::GetIndex(CPoint point)
{
	CClientDC dc(this);
	dc.SelectStockObject(DEFAULT_GUI_FONT);
	int i = -1, nCount = (int)m_ds.GetCount();
	CRect rect;
	GetClientRect(rect);
	CRect rc{ 0,0,0,rect.bottom };

	while (++i < nCount)
	{
		CString str = m_ds[i];

		CSize size = dc.GetTextExtent(str);
		rc.right = rc.left + size.cx + rect.Height();
		dc.SelectObject(i == m_nIndex ? &m_brSel : &m_br);
		if (rc.PtInRect(point))
		{
			return i;
		}
		rc.left = rc.right;
	}
	return -1;
}
void CLadderCtrl::OnLButtonDown(UINT nFlags, CPoint point)  //和上面算法一致 这个用来算出位置
{
	int nIndex = GetIndex(point);
	if (nIndex != m_nIndex)  //去除无效点击 
	{
		m_nIndex = nIndex;
		Invalidate(FALSE);
	}
	CWnd::OnLButtonDown(nFlags, point);
}
void CLadderCtrl::OnMouseMove(UINT nFlags, CPoint point)
{
	int nIndex = GetIndex(point);
	//if (nIndex == m_nIndex)   
	//	return;
	if (m_nTrack!=nIndex)   
	{
		m_nTrack = nIndex;
		Invalidate(FALSE);
	}
	CWnd::OnMouseMove(nFlags, point);
}

MFC第二十四天 使用GDI对象画笔和画刷来开发控件(分页控件选择态的算法分析、使用CToolTipCtrl开发动静态提示),MFC开发,mfc,算法,c++

附录

CDC::FillSolidRect:无边框的纯色填充
GetSysColor获取系统常用的颜色。
GetStockObject(API) 获取系统预定义对象
CDC::SelectStockObject:选择系统预定义对象。
来自于API:GetStockObject
GDI对象的构造函数:CFile的构造函数
a)CPen的构造函数:
CPen(int nPenStyle, int nWidth, COLORREF crColor);
CPen pen;pen.CreatePen(PS_XXX...);
两句合成一句就是:CPen pen(PS_XXX...);


b)CBrush的构造函数
	CBrush(COLORREF crColor);             // CreateSolidBrush
	CBrush(int nIndex, COLORREF crColor); // CreateHatchBrush
	explicit CBrush(CBitmap* pBitmap);          // CreatePatternBrush

MouseMove 进入任意控件都不会理你 除非回到主窗口范围内
OnSetCursor 不论在什么控件都会显示出来 还可以switch getDlgCtrlID 任何控件都会执行文章来源地址https://www.toymoban.com/news/detail-616279.html

到了这里,关于MFC第二十四天 使用GDI对象画笔和画刷来开发控件(分页控件选择态的算法分析、使用CToolTipCtrl开发动静态提示)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 第四十四天打卡

    零钱兑换 II 中等 1K 相关企业 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带符号

    2024年02月03日
    浏览(49)
  • 第四十四天

    ●scoped 属性      HTML5 中的新属性(布尔属性)。如果使用该属性,则样式仅仅应用到 style 元素的父元素及其子元素。父组件的样式将不会渗透到子组件中。      实现组件的私有化,不对全局造成样式污染,表示当前style属性只属于当前模块。 ●CSS动画      动画允许元素

    2024年02月16日
    浏览(47)
  • 学习Android的第十四天

    目录 Android DatePicker 日期选择器 DatePicker 属性 和 事件 DatePicker 事件 获得 DatePicker 的值 Android TimePicker 时间选择器 TimePicker 属性 TimePicker 事件 获得 TimePicker 的值 Android CalendarView 日历视图 CalendarView 属性 CalendarView 事件 获得 CalendarView 的值 在Android中,DatePicker是一个用户界面组件

    2024年02月21日
    浏览(49)
  • 算法练习第六十四天

    LCR 184. 设计自助结算系统 - 力扣(LeetCode) 总结:利用一个双端维护队列一个往后递减的队列,对头是最大值,每次进入一个新值时就一直和队尾元素比较将比新的值小的数排出,这样能保证留在队列中的数都是会对最大值产生影响的数,而当主队列中将要排出的数与双端队

    2024年02月07日
    浏览(58)
  • 十四天学会C++之第五天:类的详细讨论

    什么是友元函数和友元类,它们的作用。 如何声明和使用友元函数和友元类,访问类的私有成员。 友元函数(Friend Functions) 友元函数是一种特殊的函数,它被允许访问类的私有成员。这意味着即使成员是私有的,友元函数也能够直接访问它们,而不需要通过公有接口。这提

    2024年02月07日
    浏览(45)
  • 十四天学会C++之第一天(入门和基本语法)

    C++诞生于20世纪80年代初,它的创造者是计算机科学家Bjarne Stroustrup。当时,Stroustrup在贝尔实验室工作,他希望为C语言添加一些功能,以便更好地支持系统开发。这个愿望促使他创建了C++。 C++的名字来源于它的基因,其中的\\\"C\\\"代表了C语言,而\\\"++\\\"表示C语言的一个增强版本。这

    2024年02月07日
    浏览(52)
  • 蓝桥杯十四天冲刺班 第十四天《考场经验 | 历年考点 | 蓝桥杯押题》《C,JAVA,PY在蓝桥杯中必须要会用的容器 | 集合》(3K+字解析)

     📒博客首页:Sonesang的博客 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 ❤️ :热爱Java与算法学习,期待一起交流! 🙏作者水平很有限,如果发现错误,求告知,多谢! 🌺有问题可私信交流!!!   目录 算法 实力 = 知识点+刷题量+速度+灵活的大脑 C++组知识点 java组知识点

    2023年04月15日
    浏览(42)
  • Python学习笔记第六十四天(Matplotlib 网格线)

    我们可以使用 pyplot 中的 grid() 方法来设置图表中的网格线。 grid() 方法语法格式如下: 参数说明: b:可选,默认为 None,可以设置布尔值,true 为显示网格线,false 为不显示,如果设置 **kwargs 参数,则值为 true。 which:可选,可选值有 ‘major’、‘minor’ 和 ‘both’,默认为

    2024年02月12日
    浏览(44)
  • 第五十四天学习记录:C语言进阶:动态内存管理Ⅱ

    1、对NULL指针的解引用操作 2、对动态开辟的内存的越界访问 3、对非动态开辟内存的free 4、使用free释放动态开辟内存的一部分 5、对同一块动态内存多次释放 6、动态开辟内存忘记释放(内存泄漏) 问:realloc的第一个参数的指针地址必须是malloc或calloc创建的在堆上的地址吗?

    2024年02月06日
    浏览(39)
  • 15天学习MySQL计划(运维篇)分库分表-监控-第十四天

    1.介绍 1.问题分析 ​ 随着互联网及移动互联网的发展,应用系统的数据量也是成指数式增加,若采用但数据进行数据存储,存在以下性能瓶颈: IO瓶颈:热点数据太多,数据库缓存不足,产生大量磁盘IO,效率较低。请求数据太多,带宽不够,网络IO瓶颈。 CPU瓶颈:排序,分

    2024年02月05日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包