支持BMP文件拖放换肤 QQ2011风格(MFC)

界面效果如下:








SKIN 目录下BK.bmp为默认背景图片,要换肤可以用图片替换,也可以直接拖bmp图片到界面中,实现换肤

实现由仿QQ2011界面 MFC优化而来的

执行文件下载

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
您好,以下是用MFC定义bmp文件的行程编码类的示例代码: ```cpp class CBmp { public: CBmp(); virtual ~CBmp(); public: bool CreateBmp(int nWidth, int nHeight, int nBitCount); bool SaveBmp(LPCTSTR lpszFileName); public: BITMAPFILEHEADER m_bmfHeader; BITMAPINFOHEADER m_bmiHeader; BYTE* m_pBits; protected: int GetLineBytes(int nWidth, int nBitCount); }; CBmp::CBmp() { memset(&m_bmfHeader, 0, sizeof(BITMAPFILEHEADER)); memset(&m_bmiHeader, 0, sizeof(BITMAPINFOHEADER)); m_pBits = NULL; } CBmp::~CBmp() { if (m_pBits != NULL) { delete[] m_pBits; m_pBits = NULL; } } bool CBmp::CreateBmp(int nWidth, int nHeight, int nBitCount) { if (nWidth <= 0 || nHeight <= 0 || nBitCount <= 0) { return false; } // 计算行字节数 int nLineBytes = GetLineBytes(nWidth, nBitCount); // 计算位图数据区大小 int nBitsSize = nLineBytes * nHeight; // 填充位图信息头 m_bmiHeader.biSize = sizeof(BITMAPINFOHEADER); m_bmiHeader.biWidth = nWidth; m_bmiHeader.biHeight = nHeight; m_bmiHeader.biPlanes = 1; m_bmiHeader.biBitCount = nBitCount; m_bmiHeader.biCompression = BI_RGB; m_bmiHeader.biSizeImage = nBitsSize; // 填充位图文件头 m_bmfHeader.bfType = 0x4d42; m_bmfHeader.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + nBitsSize; m_bmfHeader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); // 分配位图数据区 m_pBits = new BYTE[nBitsSize]; if (m_pBits == NULL) { return false; } memset(m_pBits, 0, nBitsSize); return true; } bool CBmp::SaveBmp(LPCTSTR lpszFileName) { if (m_pBits == NULL) { return false; } // 创建文件 CFile file; if (!file.Open(lpszFileName, CFile::modeCreate | CFile::modeWrite)) { return false; } // 写入文件头 file.Write(&m_bmfHeader, sizeof(BITMAPFILEHEADER)); file.Write(&m_bmiHeader, sizeof(BITMAPINFOHEADER)); // 写入位图数据 int nLineBytes = GetLineBytes(m_bmiHeader.biWidth, m_bmiHeader.biBitCount); for (int i = 0; i < m_bmiHeader.biHeight; i++) { file.Write(m_pBits + i * nLineBytes, nLineBytes); } // 关闭文件 file.Close(); return true; } int CBmp::GetLineBytes(int nWidth, int nBitCount) { int nBytesPerPixel = nBitCount / 8; int nLineBytes = nWidth * nBytesPerPixel; nLineBytes = (nLineBytes + 3) / 4 * 4; return nLineBytes; } ``` 该类实现了创建位图、保存位图等功能。您可以根据自己的需要进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值