MFC第二十六天 CRgn类简介与开发、封装CMemoryDC类并应用开发
文章目录
- CRgn类简介与开发
- CRgn类简介
- CRgn类区域管理开发
- CRgn类区域管理与不规则形状的选取
- 封装CMemoryDC类并应用开发
- CMemoryDC.h
- 封装CMemoryDC开发游戏透明动画
- CFlashDlg.h
- CFlashDlg.cpp
- 封装CMemoryDC开发游戏动画
- 附录
- 四大窗口CDC派生类
CRgn类简介与开发
CRgn类简介
CRgn类是MFC(Microsoft Foundation Classes)中的一个图形区域类。该类用于创建和操作图形区域,可以表示各种形状的区域,如矩形、椭圆、多边形等。
class CRgn : public CGdiObject
{
public:static CRgn* PASCAL FromHandle(HRGN hRgn);operator HRGN() const;// 封装的特点是没有使用Overload重载函数,结构体就是XXXIndirectCRgn();
//创建矩形区域BOOL CreateRectRgn(int x1, int y1, int x2, int y2);BOOL CreateRectRgnIndirect(LPCRECT lpRect);
//创建圆形区域BOOL CreateEllipticRgn(int x1, int y1, int x2, int y2);BOOL CreateEllipticRgnIndirect(LPCRECT lpRect);
//多边形BOOL CreatePolygonRgn(LPPOINT lpPoints, int nCount, int nMode);BOOL CreatePolyPolygonRgn(LPPOINT lpPoints, LPINT lpPolyCounts,int nCount, int nPolyFillMode);
//圆角矩形BOOL CreateRoundRectRgn(int x1, int y1, int x2, int y2, int x3, int y3);
//BOOL CreateFromPath(CDC* pDC);BOOL CreateFromData(const XFORM* lpXForm, int nCount,const RGNDATA* pRgnData);// 修改矩形void SetRectRgn(int x1, int y1, int x2, int y2);void SetRectRgn(LPCRECT lpRect);
//混合int CombineRgn(const CRgn* pRgn1, const CRgn* pRgn2, int nCombineMode);int CopyRgn(const CRgn* pRgnSrc);
//判断区域完全一样BOOL EqualRgn(const CRgn* pRgn) const;
//判断一个点是否在区域内BOOL PtInRegion(int x, int y) const;BOOL PtInRegion(POINT point) const;
//保持形状不变偏移int OffsetRgn(int x, int y);int OffsetRgn(POINT point);
//框图int GetRgnBox(LPRECT lpRect) const;BOOL RectInRegion(LPCRECT lpRect) const;int GetRegionData(LPRGNDATA lpRgnData, int nCount) const;// Implementationvirtual ~CRgn();
};
CRgn类的混合功能:
int CombineRgn( CRgn* pRgn1, CRgn* pRgn2, int nCombineMode );RGN_AND 交集
RGN_COPY 拷贝
RGN_DIFF 不同
RGN_OR 并集
RGN_XOR 异或
CRgn类区域管理开发
CRgnDlg.h
#pragma once
class CCRgnDlg : public CDialogEx
{
// 构造CDC m_dc;CRect m_rect;
}
CRgnDlg.cpp
BOOL CCRgnDlg::OnInitDialog(){CDialogEx::OnInitDialog();CBitmap bmp;bmp.LoadBitmap(IDB_LOGO);BITMAP bm;bmp.GetBitmap(&bm);m_rect.SetRect(0,0, bm.bmWidth,bm.bmHeight );m_dc.CreateCompatibleDC(NULL);m_dc.SelectObject(&bmp);SetIcon(m_hIcon, TRUE); // 设置大图标SetIcon(m_hIcon, FALSE); // 设置小图标return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
//透明 一个去掉不要的区域进行显示 透明度(半透明)
void CCRgnDlg::OnPaint(){CPaintDC dc(this); // 用于绘制的设备上下文 CRgn rgn; //输出区域管理 dc.FillSolidRect(CRect(10, 10, 700, 400), RGB(0, 255, 0)); //填充了一块背景区域CRect rect;rect = m_rect;rect.OffsetRect(50, 0);//rgn.CreateEllipticRgn(0, 0, m_rect.right, m_rect.bottom); //圆形区域管理rgn.CreateEllipticRgn(rect.left,rect.top, rect.right, rect.bottom);dc.SelectObject(&rgn);//dc.BitBlt(0, 0, m_rect.right, m_rect.bottom, &m_dc, 0, 0, SRCCOPY); //对图片的空白区域操作dc.BitBlt(50, 0, m_rect.Width(), m_rect.Height(), &m_dc, 0, 0, SRCCOPY);
}

CircleRgnDlg.h
#pragma once
class CCircleRgnDlg : public CDialogEx
{
// 构造CDC m_dc;CRect m_rect;
public:afx_msg LRESULT OnNcHitTest(CPoint point);
};
CircleRgnDlg.cpp
BOOL CCircleRgnDlg::OnInitDialog(){CDialogEx::OnInitDialog();CBitmap bmp;bmp.LoadBitmap(IDB_LOGO);BITMAP bm;bmp.GetBitmap(&bm);m_rect.SetRect(0, 0, bm.bmWidth, bm.bmHeight);SetWindowPos(NULL, 0, 0, m_rect.Width(), m_rect.Height(), SWP_NOMOVE | SWP_NOZORDER);m_dc.CreateCompatibleDC(NULL);m_dc.SelectObject(&bmp);CRgn rgn;rgn.CreateEllipticRgnIndirect(m_rect);SetWindowRgn(rgn, FALSE);return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
void CCircleRgnDlg::OnPaint()
{CPaintDC dc(this); // 用于绘制的设备上下文dc.BitBlt(0, 0, m_rect.right, m_rect.bottom, &m_dc, 0, 0, SRCCOPY);
}LRESULT CCircleRgnDlg::OnNcHitTest(CPoint point)
{return HTCAPTION;
}

CRgn类区域管理与不规则形状的选取
CCircleRgnDlg.h
class CCircleRgnDlg : public CDialogEx
{
// 构造CDC m_dc;CRect m_rect;
public:afx_msg LRESULT OnNcHitTest(CPoint point);afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
};
CCircleRgnDlg.cpp
BOOL CCircleRgnDlg::OnInitDialog(){CDialogEx::OnInitDialog();CBitmap bmp;bmp.LoadBitmap(IDB_LOGO);BITMAP bm;bmp.GetBitmap(&bm);m_rect.SetRect(0, 0, bm.bmWidth, bm.bmHeight);SetWindowPos(NULL, 0, 0, m_rect.Width(), m_rect.Height(), SWP_NOMOVE | SWP_NOZORDER);m_dc.CreateCompatibleDC(NULL);m_dc.SelectObject(&bmp);/*CRgn rgn;rgn.CreateEllipticRgnIndirect(m_rect);SetWindowRgn(rgn, FALSE);*/return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
//CRgn r, r1, r2;
//r.CreateEllipticRgn(20, 20, 500, 400);
//dc.SelectObject(&r);
//dc.BitBlt(0, 0, m_rect.right, m_rect.bottom, &m_dc, 0, 0, SRCCOPY);
//
//POINT pts[] = { {482,192},{568,302},{322,538},{123,357},{251,192},{360,320} };
//r1.CreatePolygonRgn(pts, _countof(pts), ALTERNATE);
//
//r2.CreateRectRgn(0, 0, 0, 0);
//
//r2.CombineRgn(&r, &r1, RGN_AND);
//r2.CombineRgn(&r, &r1, RGN_XOR);
//dc.SelectObject(&r2);
//dc.BitBlt(0, 0, m_rect.right, m_rect.bottom, &m_dc, 0, 0, SRCCOPY);
void CCircleRgnDlg::OnPaint()
{CPaintDC dc(this); // 用于绘制的设备上下文CRgn r,r1;r.CreateEllipticRgn(20, 20, 500, 400);POINT pts[] = {{482,192},{568,302},{322,538},{123,357},{251,192},{360,320}};r1.CreatePolygonRgn(pts, _countof(pts), ALTERNATE);r.CombineRgn(&r, &r1, RGN_XOR);dc.SelectObject(&r);CRect rect;r.GetRgnBox(rect);//框图要考虑如何恢复到之前图dc.BitBlt(0, 0, m_rect.right, m_rect.bottom, &m_dc, 0, 0, SRCCOPY);
BITMAP bm;dc.GetCurrentBitmap()->GetBitmap(&bm); //获取当前选中的位图对象,并将其信息存储在bm结构中。r.DeleteObject();r.CreateRectRgn(0, 0, bm.bmWidth, bm.bmHeight);dc.SelectObject(&r);dc.SelectStockObject(NULL_BRUSH); //绘制图形时使用的画刷对象设置为无画刷,即不填充图形dc.Rectangle(rect);
}
void CCircleRgnDlg::OnLButtonDown(UINT nFlags, CPoint point){ CRgn r, r1, r2;r.CreateEllipticRgn(20, 20, 500, 400);POINT pts[] = { {482,192},{568,302},{322,538},{123,357},{251,192},{360,320} };r1.CreatePolygonRgn(pts, _countof(pts), ALTERNATE);r.CombineRgn(&r, &r1, RGN_XOR);if (r.PtInRegion(point)){AfxMessageBox(_T("你选择了"));}CDialogEx::OnLButtonDown(nFlags, point);
}

封装CMemoryDC类并应用开发
CMemoryDC.h
/* 内存DC类简介:
1、BOOL LoadBitmap(UINT nBitmapID,CDC* pDC = NULL) 从资源中按照,按位图ID加载位图
2、BOOL LoadFile(LPCTSTR sFile, CDC* pDC = NULL) 从exe外部加载图片(调用LoadImage)
3、BOOL Create(int cx, int cy, CDC* pDC = NULL) 创建空白位图(默认是全黑)4、总共有4种构造函数,包含以上3种还有空构造:
CMemoryDC(UINT nBitmapID)//从资源按照位图编号来加载
CMemoryDC(LPCTSTR sFile, CDC* pDC = NULL)//从exe外部加载
CMemoryDC(int cx, int cy, CDC* pDC=NULL)//指定高宽创建空白位图5、void MakeRgn(CRgn& r,COLORREF col) 生成透明区域
6、int GetWidth() const int GetHeight() const 方便地获取图片高宽:
7、透明显示:BitTrans和StrecthTrans */
#pragma once
#include "resource.h"
class CMemoryDC :public CDC{CSize m_size;
public:CMemoryDC();int GetWidth() const{return m_size.cx;}int GetHeight() const{return m_size.cy;}CSize GetSize() const {return m_size;}
void BitTrans(int nXDest, // 目标起点Xint nYDest, // 目标起点Yint nWidthDest, // 目标宽度int nHeightDest,// 目标高度CDC* pDC, // 目标DCint nXSrc, // 来源起点Xint nYSrc, // 来源起点YCOLORREF crTrans// 透明色){CMemoryDC dcImage(nWidthDest, nHeightDest, pDC);//临时DCCBitmap bmpMask;bmpMask.CreateBitmap(nWidthDest, nHeightDest, 1, 1, NULL); // 创建单色掩码位图CDC dcMask;//掩码DC dcMask.CreateCompatibleDC(pDC);dcMask.SelectObject(bmpMask);//将载入位图的内存DC中的位图,拷贝到临时DC中dcImage.BitBlt(0, 0, nWidthDest, nHeightDest, this, nXSrc, nYSrc, SRCCOPY);// 设置临时DC的透明色dcImage.SetBkColor(crTrans);//掩码DC的透明区域为白色其它区域为黑色dcMask.BitBlt(0, 0, nWidthDest, nHeightDest, &dcImage, 0, 0, SRCCOPY);//临时DC透明区域为黑色,其它区域保持不变dcImage.SetBkColor(RGB(0, 0, 0));dcImage.SetTextColor(RGB(255, 255, 255));dcImage.BitBlt(0, 0, nWidthDest, nHeightDest, &dcMask, 0, 0, SRCAND);// 目标DC透明部分保持屏幕不变,其它部分变成黑色pDC->SetBkColor(RGB(255, 255, 255));pDC->SetTextColor(RGB(0, 0, 0));pDC->BitBlt(nXDest, nYDest, nWidthDest, nHeightDest, &dcMask, 0, 0, SRCAND);pDC->BitBlt(nXDest, nYDest, nWidthDest, nHeightDest, &dcImage, 0, 0, SRCPAINT);}void StretchTrans(int nXDest, // 目标起点Xint nYDest, // 目标起点Yint nWidthDest, // 目标宽度int nHeightDest, // 目标高度CDC* pDC, // 目标DCint nXSrc, // 来源起点Xint nYSrc, // 来源起点Yint nWidthSrc, // 来源宽度int nHeightSrc, // 来源高度COLORREF crTrans // 透明色){CMemoryDC dcImage(nWidthDest, nHeightDest, pDC);//临时DCCBitmap bmpMask;// 创建单色掩码位图bmpMask.CreateBitmap(nWidthDest, nHeightDest, 1, 1, NULL);CDC dcMask;dcMask.CreateCompatibleDC(pDC);dcMask.SelectObject(bmpMask);// 将载入位图的内存DC中的位图,拷贝到临时DC中if (nWidthDest == nWidthSrc && nHeightDest == nHeightSrc)dcImage.BitBlt(0, 0, nWidthDest, nHeightDest, this, nXSrc, nYSrc, SRCCOPY);elsedcImage.StretchBlt(0, 0, nWidthDest, nHeightDest,this, nXSrc, nYSrc, nWidthSrc, nHeightSrc, SRCCOPY);// 设置临时DC的透明色dcImage.SetBkColor(crTrans);//掩码DC的透明区域为白色其它区域为黑色dcMask.BitBlt(0, 0, nWidthDest, nHeightDest, &dcImage, 0, 0, SRCCOPY);//临时DC透明区域为黑色,其它区域保持不变dcImage.SetBkColor(RGB(0, 0, 0));dcImage.SetTextColor(RGB(255, 255, 255));dcImage.BitBlt(0, 0, nWidthDest, nHeightDest, &dcMask, 0, 0, SRCAND);// 目标DC透明部分保持屏幕不变,其它部分变成黑色pDC->SetBkColor(RGB(255, 255, 255));pDC->SetTextColor(RGB(0, 0, 0));pDC->BitBlt(nXDest, nYDest, nWidthDest, nHeightDest, &dcMask, 0, 0, SRCAND);pDC->BitBlt(nXDest, nYDest, nWidthDest, nHeightDest, &dcImage, 0, 0, SRCPAINT);}
BOOL Create(int cx, int cy, CDC* pDc = NULL){ //创建空位图if (!CreateCompatibleDC(NULL))return FALSE;CBitmap bmp;if (pDc) {if (!bmp.CreateCompatibleBitmap(pDc, cx, cy)) {DeleteDC();return FALSE; }}else{if (!bmp.CreateCompatibleBitmap(&CClientDC(NULL), cx, cy)){DeleteDC();return FALSE; }}this->SelectObject(&bmp);m_size.SetSize(cx, cy);return TRUE; }
BOOL LoadFile(LPCTSTR sFile, CDC* pDC = NULL){ //加载一张exe外部位图HBITMAP hBitmap = (HBITMAP)LoadImage(NULL, sFile, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);if (!hBitmap)return FALSE; if (!CreateCompatibleDC(NULL)){DeleteObject(hBitmap);return FALSE;}SelectObject(hBitmap);BITMAP bm;GetObject(hBitmap, sizeof(bm), &bm);m_size.SetSize(bm.bmWidth, bm.bmHeight);DeleteObject(hBitmap);return TRUE;}
BOOL LoadBitmap(UINT nBitmapID, CDC* pDC = NULL) //加载一张资源位图{if (!CreateCompatibleDC(NULL))return FALSE;CBitmap bmp;if (!bmp.LoadBitmap(nBitmapID)){DeleteDC();return FALSE;}SelectObject(&bmp);BITMAP bm;bmp.GetBitmap(&bm);m_size.SetSize(bm.bmWidth, bm.bmHeight);return TRUE;}
CMemoryDC(UINT nBitmapID){LoadBitmap(nBitmapID);}CMemoryDC(LPCTSTR sFile,CDC* pDC = NULL){LoadFile(sFile, pDC);}CMemoryDC(int cx,int cy,CDC* pDC=NULL){Create(cx, cy, pDC);}
void MakeRgn(CRgn& r, COLORREF col){r.CreateRectRgn(0, 0, 0, 0);int i = -1, cx = m_size.cx;int j = -1, cy = m_size.cy;while (++j<cy) {i = -1;while (++i<cx){if (GetPixel(i, j) != col) {CRgn r1;r1.CreateRectRgn(i, j, i + 1, j + 1); //1*1像素r.CombineRgn(&r, &r1, RGN_OR);}}}}};
封装CMemoryDC开发游戏透明动画
CFlashDlg.h
#pragma once
#include "CMemoryDC.h"
class CCFlashDlg : public CDialogEx{//二维动画 不停的切换7张图, x y方向不断地移动int m_nIndex{}; //第几张图片CPoint m_pos{}, m_dir{ 5,5 };//m_pos偏移位置 m_dir每次运动5,5enum {Fly_nCount =7}; //图片总数CMemoryDC m_dcBack{_T("./res/back.bmp")}; //背景图片CMemoryDC m_dcFlys[Fly_nCount]; //蝴蝶CRgn m_rs[Fly_nCount]; //取出背景颜色void LoadPictures();public:afx_msg void OnTimer(UINT_PTR nIDEvent);
};
CFlashDlg.cpp
#include "pch.h"
#include "framework.h"
#include "CFlash.h"
#include "CFlashDlg.h"
#include "afxdialogex.h"
void CCFlashDlg::LoadPictures(){int i = -1;CString str;while (++i<_countof(m_dcFlys)){str.Format(_T("./res/%03d.bmp"), i + 1);m_dcFlys[i].LoadFile(str);m_dcFlys[i].MakeRgn(m_rs[i],0x00ff00ff);}
}
BOOL CCFlashDlg::OnInitDialog()
{CDialogEx::OnInitDialog();int cx = GetSystemMetrics(SM_CXSCREEN);int cy = GetSystemMetrics(SM_CYSCREEN);SetWindowPos(NULL, 0, 0, cx/2, cy/2, SWP_NOZORDER);LoadPictures();SetTimer(1, 16, NULL);return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
void CCFlashDlg::OnPaint()
{CPaintDC dc(this); // 用于绘制的设备上下文CRect rect;GetClientRect(rect);dc.SetStretchBltMode(STRETCH_HALFTONE);dc.StretchBlt(0, 0, rect.Width(), rect.Height(), &m_dcBack, 0, 0, m_dcBack.GetWidth(), m_dcBack.GetHeight(), SRCCOPY);CMemoryDC mdc(200,180); //创建默认的黑色if (mdc.GetSafeHdc())dc.BitBlt(200, 150, 200, 180, &mdc, 0, 0, SRCCOPY);//CRgn r;//r.CreateRectRgn(0, 0, 0, 0); //基址//r.CopyRgn(m_rs+m_nIndex); //往那个跑先复制出来 不要破坏它 形状//r.OffsetRgn(m_pos); //你要输出到那个位置//dc.SelectObject(&r);//dc.BitBlt(m_pos.x, m_pos.y, m_dcFlys->GetWidth(),m_dcFlys->GetHeight(), m_dcFlys + m_nIndex, 0, 0,SRCCOPY);auto pDC = m_dcFlys + m_nIndex; //等价于 :&m_dcFlys[m_nIndex]pDC->BitTrans(m_pos.x, m_pos.y, pDC->GetWidth(), pDC->GetHeight(), &dc, 0, 0, 0xff00ff);if (++m_nIndex >= Fly_nCount)m_nIndex = 0 ;if (m_pos.x + m_dcFlys->GetWidth() > rect.right || m_pos.x < 0)m_dir.x *= -1;if (m_pos.y + m_dcFlys->GetHeight() > rect.bottom || m_pos.y < 0)m_dir.y *= -1;
}
void CCFlashDlg::OnTimer(UINT_PTR nIDEvent)
{m_pos.Offset(m_dir);Invalidate(FALSE);CDialogEx::OnTimer(nIDEvent);
}

封装CMemoryDC开发游戏动画
QQDlg.h
#pragma once
#include "CMemoryDC.h"
class CQQDlg : public CDialogEx
{CPoint m_pos{}, m_dir{ 5,5 }; enum { Fly_nCount = 7 }; //图片总数CMemoryDC m_dcFlys[Fly_nCount]; //蝴蝶CRgn m_rs[Fly_nCount]; int m_nIndex{ 0 };
public:afx_msg void OnTimer(UINT_PTR nIDEvent);
};
QQDlg.cpp
BOOL CQQDlg::OnInitDialog(){CDialogEx::OnInitDialog();int i = -1;while (++i < _countof(m_dcFlys)){m_dcFlys[i].LoadBitmap(IDB_FLY1 + i);m_dcFlys[i].MakeRgn(m_rs[i], 0xff00ff);}SetTimer(1, 16, NULL);CRgn r;r.CreateRectRgn(0, 0, 0, 0);r.CopyRgn(&m_rs[m_nIndex]);SetWindowRgn(r, FALSE);SetWindowPos(NULL, m_pos.x, m_pos.y, m_dcFlys->GetWidth(), m_dcFlys->GetHeight(), SWP_NOZORDER);return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
void CQQDlg::OnPaint()
{CPaintDC dc(this); // 用于绘制的设备上下文int cx = m_dcFlys->GetWidth();int cy = m_dcFlys->GetHeight();dc.BitBlt(0, 0, cx, cy, &m_dcFlys[m_nIndex], 0, 0, SRCCOPY);if (++m_nIndex >= _countof(m_dcFlys)){m_nIndex = 0;}
}
void CQQDlg::OnTimer(UINT_PTR nIDEvent){CDialogEx::OnTimer(nIDEvent);CRgn r;r.CreateRectRgn(0, 0, 0, 0);r.CopyRgn(&m_rs[m_nIndex]);SetWindowRgn(r,FALSE); //不这样的话到第七帧的时候就会出来阴影Invalidate(FALSE);SetWindowPos(NULL, m_pos.x, m_pos.y,0,0, SWP_NOZORDER | SWP_NOSIZE);m_pos.Offset(m_dir);int cx = GetSystemMetrics(SM_CXSCREEN);int cy = GetSystemMetrics(SM_CYSCREEN);if (m_pos.x + m_dcFlys->GetWidth() > cx || m_pos.x < 0)m_dir.x *= -1;if (m_pos.y + m_dcFlys->GetHeight() > cy || m_pos.y < 0)m_dir.y *= -1; }

附录
四大窗口CDC派生类
CPaintDC,CClientDC,CWindowDC,CMemoryDC类
CBitmap对象创建后,默认所有像素都是黑色,0x00000000四个字节一个像素。
相关文章:
MFC第二十六天 CRgn类简介与开发、封装CMemoryDC类并应用开发
文章目录 CRgn类简介与开发CRgn类简介CRgn类区域管理开发CRgn类区域管理与不规则形状的选取 封装CMemoryDC类并应用开发CMemoryDC.h封装CMemoryDC开发游戏透明动画CFlashDlg.hCFlashDlg.cpp 封装CMemoryDC开发游戏动画 附录四大窗口CDC派生类 CRgn类简介与开发 CRgn类简介 CR…...
解决VScode远程服务器时opencv和matplotlib无法直接显示图像的问题
解决VScode远程服务器时opencv和matplotlib无法直接显示图像的问题 1、本方案默认本地已经安装了VScode与MobaXterm2、在服务器端3、在本地端安装MobaXterm4、测试5、opencv显示测试(测试过程中需保持MobaXterm开启的状态)6、 matplotlib显示测试&#x…...
支付模块功能实现(小兔鲜儿)【Vue3】
支付 渲染基础数据 支付页有俩个关键数据,一个是要支付的钱数,一个是倒计时数据(超时不支付商品释放) 准备接口 import request from /utils/httpexport const getOrderAPI (id) > {return request({url: /member/order/$…...
php meilisearch demo
# 创建一个meilisearch 使用完自动销毁 docker run -itd --rm -p 7700:7700 getmeili/meilisearch:v1.3docker-compose 参数 version: "3" networks:flyserver:driver: bridge services:search:image: getmeili/meilisearch:v1.3restart: alwaysenvironment:- MEILI…...
芒格之道——查理·芒格股东会讲话1987-2022
你越是认真生活,你的生活就会越美好! 这里将读书过程划线的内容摘抄在这里,方便自己回顾。 书分为两部分,我先读了后半部分,而且是从后往前读,到了前半部分,我是从前往后读。书还挺贵ÿ…...
如何运营手游联运平台游戏?
运营手游联运平台游戏需要综合考虑多个方面,包括游戏选择、合作伙伴、市场推广、用户运营等。以下是运营手游联运平台游戏的一些建议: 游戏选择:选择优质的手游,确保游戏的品质和内容能够吸引玩家,满足市场需求。 合…...
vscode连接远程Linux服务器
文章目录 一、环境安装1.1 下载vscode1.2 下载vscode-sever 二、ssh链接2.1 安装Remote-SSH2.2 设置vscode ssh2.3 设置免密登录2.3.1 本地生成公私钥2.3.2 服务器端添加公钥 三、安装插件3.1 vscode安装插件3.1.1 在线安装插件3.1.2.1 下载插件3.1.2.2 安装插件 3.2 vscode-se…...
numpy 转换成 cupy 利用GPU执行 错误
ModuleNotFoundError: No module named cupy._core. routines_sorting 提示缺少包 使用 pyinstaller -D views.py --nocons 可以正常打包出来 但是运行出现报错 说明这个打包工具 忽略了很多 隐式导入的包 解决方法很简单 hiddenimports [fastrlock, fastrlock.rlock, cu…...
力扣:55. 跳跃游戏(Python3)
题目: 给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标。 来源:力扣(LeetCode) 链接:力扣 示例…...
Unity 编辑器资源导入处理函数 OnPreprocessAudio :深入解析与实用案例
Unity 编辑器资源导入处理函数 OnPreprocessAudio 用法 点击封面跳转下载页面 简介 在 Unity 中,资源导入是一个非常重要的环节,它决定了资源在项目中的使用方式和效果。Unity 提供了一系列的资源导入处理函数,其中之一就是 OnPreprocessAud…...
mongodb-win32-x86_64-2008plus-3.4.24-signed.msi
Microsoft Windows [版本 6.1.7601] 版权所有 (c) 2009 Microsoft Corporation。保留所有权利。C:\Users\Administrator>cd C:\MongoDB\Server\3.4\binC:\MongoDB\Server\3.4\bin>C:\MongoDB\Server\3.4\bin>mongod --help Options:General options:-h [ --help ] …...
java的反射
在java语言中,反射机制是指对于处在运行状态的类,都能够获取到这个类的所有属性和方法。对于任意一个对象,都能够调用它的任意一个方法以及访问它的属性;这种通过动态获取类或对象的属性以及方法从而完成调用功能被称为java语言的…...
MySQL — InnoDB 锁
文章目录 锁共享锁和排他锁意向锁记录锁间隙锁临键锁插入意向锁自增锁 锁 加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁。加锁后事务就对该数据对象有了一定的控制,在该事务…...
首批获得金融级行业云平台认证,天翼云深耕行业云
云计算下半场看什么? 无疑是金融、政务、制造等传统政企用户的上云与用云。随着数字经济发展和产业数字化的提速,上云已是政企用户推动其数字化转型不断深入的重要抓手,成为不可阻挡的趋势。 与互联网用户相比,政企用户上云极为…...
浅谈Python解释器的组成
Python解释器是一个复杂的软件,它可以解释和执行Python代码。以下是Python解释器的主要组成部分: 源代码词法分析器(Lexical Analyzer): 这部分的任务是将输入的Python源代码分解成称为"tokens"的基础元素。例如&#x…...
服务限流治理
一、基础概念 1.什么是服务限流? 限流在日常生活中也很常见,比如节假日你去一个旅游景点,为了不把景点撑爆,管理部门通常会在外面设置拦截,限制景点的进入人数(等有人出来之后,再放新的人进去…...
机器学习笔记 - 使用CLIP在没有数据的情况下创建图像分类器
想象一下,如果我们现在需要对人们是否戴眼镜进行分类,但您没有数据或资源来训练自定义模型。该怎么办?这里我们了解如何使用预先训练的 CLIP 模型来创建自定义分类器,而无需任何培训。这种方法称为零样本图像分类,它可以对原始 CLIP 模型训练期间未明确看到的类别图像进行…...
42.利用 牛顿迭代法解非线性高维方程组(matlab程序)
1.简述 若向量记号为X,方程组就可以写成F(X)0的形式。 我们知道,对于一元函数的牛顿迭代法求根公式 类似的,对于多元函数求根公式 其中X是向量,是非线性方程组对应的雅可比矩阵。 具体求解的时候,我们可以先通过绘图命令绘制图形…...
我在leetcode用动态规划炒股
事情是这样的,突然兴起的我在letcode刷题 121. 买卖股票的最佳时机122. 买卖股票的最佳时机 II123. 买卖股票的最佳时机 III 以上三题。 1. 121. 买卖股票的最佳时机 1.1. 暴力遍历,两次遍历 1.1.1. 算法代码 public class Solution {public int Ma…...
rust实践-异步并发socket通信
客户端 [package] name = "rust_client" version = "0.1.0" edition = "2021"[dependencies] tokio = {version = "1.14.0", features = ["full"] }use tokio::io::{self, AsyncReadExt, AsyncWriteExt}; use tokio::net::…...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...
如何应对敏捷转型中的团队阻力
应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中,明确沟通敏捷转型目的尤为关键,团队成员只有清晰理解转型背后的原因和利益,才能降低对变化的…...
「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案
在移动互联网营销竞争白热化的当下,推客小程序系统凭借其裂变传播、精准营销等特性,成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径,助力开发者打造具有市场竞争力的营销工具。 一、系统核心功能架构&…...
Monorepo架构: Nx Cloud 扩展能力与缓存加速
借助 Nx Cloud 实现项目协同与加速构建 1 ) 缓存工作原理分析 在了解了本地缓存和远程缓存之后,我们来探究缓存是如何工作的。以计算文件的哈希串为例,若后续运行任务时文件哈希串未变,系统会直接使用对应的输出和制品文件。 2 …...
基于单片机的宠物屋智能系统设计与实现(论文+源码)
本设计基于单片机的宠物屋智能系统核心是实现对宠物生活环境及状态的智能管理。系统以单片机为中枢,连接红外测温传感器,可实时精准捕捉宠物体温变化,以便及时发现健康异常;水位检测传感器时刻监测饮用水余量,防止宠物…...
Java后端检查空条件查询
通过抛出运行异常:throw new RuntimeException("请输入查询条件!");BranchWarehouseServiceImpl.java // 查询试剂交易(入库/出库)记录Overridepublic List<BranchWarehouseTransactions> queryForReagent(Branch…...
node.js的初步学习
那什么是node.js呢? 和JavaScript又是什么关系呢? node.js 提供了 JavaScript的运行环境。当JavaScript作为后端开发语言来说, 需要在node.js的环境上进行当JavaScript作为前端开发语言来说,需要在浏览器的环境上进行 Node.js 可…...
