当前位置: 首页 > news >正文

营销型网站建设软件微信seo是什么意思

营销型网站建设软件,微信seo是什么意思,网站背景怎么换,怎么做论坛网站在 MFC 中修改 ListCtrl 控件的行背景颜色,需要通过自绘(Owner-Draw)机制实现。以下是详细的实现方法: 方法一:通过自绘(Owner-Draw)实现 步骤 1:启用自绘属性 在对话框设计器中选…

在这里插入图片描述
在 MFC 中修改 ListCtrl 控件的行背景颜色,需要通过自绘(Owner-Draw)机制实现。以下是详细的实现方法:

方法一:通过自绘(Owner-Draw)实现

步骤 1:启用自绘属性

在对话框设计器中选择 ListCtrl 控件,右键点击属性 → 样式 → 勾选 “自绘”(Owner Draw Fixed)。

步骤 2:处理 NM_CUSTOMDRAW 消息

在 ListCtrl 所在的对话框类(如 CMyDialog)中添加消息处理函数:

// 在对话框类头文件(.h)中声明
afx_msg void OnNMCustomdrawList1(NMHDR *pNMHDR, LRESULT *pResult);// 在对话框类实现文件(.cpp)中添加消息映射
BEGIN_MESSAGE_MAP(CMyDialog, CDialogEx)// ... 其他消息映射 ...ON_NOTIFY(NM_CUSTOMDRAW, IDC_LIST1, &CMyDialog::OnNMCustomdrawList1)
END_MESSAGE_MAP()// 实现消息处理函数
void CMyDialog::OnNMCustomdrawList1(NMHDR *pNMHDR, LRESULT *pResult) {LPNMLVCUSTOMDRAW pLVCD = reinterpret_cast<LPNMLVCUSTOMDRAW>(pNMHDR);*pResult = CDRF_DODEFAULT;// 阶段 1:预处理if (CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage) {*pResult = CDRF_NOTIFYITEMDRAW;}// 阶段 2:绘制项目else if (CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage) {*pResult = CDRF_NOTIFYSUBITEMDRAW;}// 阶段 3:绘制子项else if ((CDDS_ITEMPREPAINT | CDDS_SUBITEM) == pLVCD->nmcd.dwDrawStage) {int nItem = static_cast<int>(pLVCD->nmcd.dwItemSpec);  // 当前行int nSubItem = pLVCD->iSubItem;  // 当前列// 根据条件设置背景色和文本色if (nItem == 0) {  // 例如:第一行设置为红色背景pLVCD->clrTextBk = RGB(255, 200, 200);  // 浅红色背景pLVCD->clrText = RGB(0, 0, 0);  // 黑色文本}else if (nItem == 1) {  // 第二行设置为蓝色背景pLVCD->clrTextBk = RGB(200, 200, 255);  // 浅蓝色背景pLVCD->clrText = RGB(0, 0, 0);  // 黑色文本}else {// 默认颜色(使用系统默认)pLVCD->clrTextBk = ::GetSysColor(COLOR_WINDOW);pLVCD->clrText = ::GetSysColor(COLOR_WINDOWTEXT);}*pResult = CDRF_NEWFONT;  // 使用新设置的颜色}
}

方法二:自定义 ListCtrl 类

更优雅的方式是创建一个继承自 CListCtrl 的自定义类,封装自绘逻辑。

步骤 1:创建自定义类
// MyListCtrl.h
#pragma onceclass CMyListCtrl : public CListCtrl {DECLARE_DYNAMIC(CMyListCtrl)public:CMyListCtrl();virtual ~CMyListCtrl();protected:DECLARE_MESSAGE_MAP()afx_msg void OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult);
};// MyListCtrl.cpp
#include "stdafx.h"
#include "MyListCtrl.h"IMPLEMENT_DYNAMIC(CMyListCtrl, CListCtrl)CMyListCtrl::CMyListCtrl() {}
CMyListCtrl::~CMyListCtrl() {}BEGIN_MESSAGE_MAP(CMyListCtrl, CListCtrl)ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, &CMyListCtrl::OnNMCustomdraw)
END_MESSAGE_MAP()void CMyListCtrl::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult) {LPNMLVCUSTOMDRAW pLVCD = reinterpret_cast<LPNMLVCUSTOMDRAW>(pNMHDR);*pResult = CDRF_DODEFAULT;if (CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage) {*pResult = CDRF_NOTIFYITEMDRAW;}else if (CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage) {*pResult = CDRF_NOTIFYSUBITEMDRAW;}else if ((CDDS_ITEMPREPAINT | CDDS_SUBITEM) == pLVCD->nmcd.dwDrawStage) {int nItem = static_cast<int>(pLVCD->nmcd.dwItemSpec);// 根据条件设置颜色(示例:交替行颜色)if (nItem % 2 == 0) {pLVCD->clrTextBk = RGB(240, 240, 240);  // 浅灰色背景}*pResult = CDRF_NEWFONT;}
}
步骤 2:在对话框中使用自定义类
  1. 在对话框头文件中添加成员变量:

    class CMyDialog : public CDialogEx {// ...
    private:CMyListCtrl m_listCtrl;  // 自定义 ListCtrl
    };
    
  2. 在对话框的 DoDataExchange 函数中关联控件:

    void CMyDialog::DoDataExchange(CDataExchange* pDX) {CDialogEx::DoDataExchange(pDX);DDX_Control(pDX, IDC_LIST1, m_listCtrl);
    }
    
  3. 在对话框初始化时设置 ListCtrl 属性:

    BOOL CMyDialog::OnInitDialog() {CDialogEx::OnInitDialog();// 设置 ListCtrl 样式m_listCtrl.SetExtendedStyle(m_listCtrl.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);// 添加列和数据...return TRUE;
    }
    

进阶技巧:动态更新行颜色

如果需要在运行时动态更改某行的颜色,可以在自定义类中添加公共方法:

// 在 CMyListCtrl 类中添加
public:void SetItemBackgroundColor(int nItem, COLORREF color) {// 使用 CMap 存储每行的颜色m_rowColors.SetAt(nItem, color);InvalidateRect(NULL);  // 重绘列表}private:CMap<int, int, COLORREF, COLORREF> m_rowColors;  // 存储行颜色的映射表// 修改 OnNMCustomdraw 函数
void CMyListCtrl::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult) {// ... 前面的代码不变 ...else if ((CDDS_ITEMPREPAINT | CDDS_SUBITEM) == pLVCD->nmcd.dwDrawStage) {int nItem = static_cast<int>(pLVCD->nmcd.dwItemSpec);// 检查是否有自定义颜色COLORREF bkColor;if (m_rowColors.Lookup(nItem, bkColor)) {pLVCD->clrTextBk = bkColor;}*pResult = CDRF_NEWFONT;}
}

使用时调用:

m_listCtrl.SetItemBackgroundColor(2, RGB(255, 255, 200));  // 第三行设置为黄色背景

注意事项

  1. 性能考虑:自绘会增加渲染开销,对于大数据量列表,建议使用虚拟列表(LVS_OWNERDATA 样式)。
  2. 选中状态:默认选中状态的颜色可能覆盖自定义颜色,可通过判断 pLVCD->nmcd.uItemState & CDIS_SELECTED 来特殊处理。
  3. 字体设置:若需要自定义字体,需在代码中设置 pLVCD->nmcd.lpFont

通过以上方法,你可以灵活控制 ListCtrl 中任意行的背景颜色,实现个性化的界面效果。

http://www.cadmedia.cn/news/3891.html

相关文章:

  • 南宁自助建站模板下载网站搜索引擎优化的方法
  • 站长之家是什么seo单页面优化
  • 个人申请网站武汉关键词seo
  • 网站代码编辑器爱站seo查询软件
  • 武汉建设安全协会东莞seo建站排名
  • 天津品牌网站建设公司seo排名需要多少钱
  • 合肥网站建设推广服务怎么开发自己的网站
  • 郑州市建设工程信息网官网重庆seo技术博客
  • 各地人社app大全官网网站优化招聘
  • 云南网站建设天软科技优化方法
  • 在线代理服务器网站百度seo推广方案
  • 新疆维吾尔自治区建设厅官方网站seo到底是什么
  • 企业网页开发seo还有未来吗
  • 网站建设 销售提成学技术包分配的培训机构
  • 苏州网站关键词优化推广国内新闻摘抄2022年
  • 建筑网站制作企业网站建设需要多少钱
  • 国企单位网站建设方案南京网站设计公司大全
  • 网站怎么做推广和优化付费恶意点击软件
  • 网站建设佰首选金手指二八精准防控高效处置
  • 商业空间设计特点上海免费关键词排名优化
  • 便宜网站建设怎么样南京seo优化推广
  • 网站建设架构快速建网站
  • 爱奇艺会员做任务送十天网站项目营销策划方案
  • 酷站是什么网站怎样制作一个网页
  • 如何在网上赚钱宁波seo排名优化培训
  • 机械加工网站平台百度关键词热度查询工具
  • 建立网站费用多少运营培训班有用吗
  • 衡水网站建设地方网站seo网络优化
  • 网站建设相关知识今日最新消息新闻报道
  • 云主机可以用来做什么嘉兴seo计费管理