You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将多行CSS文本直接声明为CString?

直接将整段CSS赋值给CString的实现方案

现有目标CSS代码:

.tableDUTY {
    margin-bottom: 2mm;
}

.cellDutyLabel {
    border-right-style: none;
}

.textDutyLabel {
    font-size: 10pt;
    font-weight: normal;
}

.cellDutyName {
    font-size: 10pt;
    font-weight: normal;
}

.cellDutyHeading {
    padding-left: 1mm;
}

.textDutyHeading {
    padding: 1mm;
    color: #fff;
    background-color: #FD00FF;
    width: 90mm;
    font-size: 12pt;
    font-weight: 700;
    text-transform: uppercase;
    vertical-align: middle;
}

已知逐行拼接、Lambda简化的实现方式,但需求是直接将整段CSS原样粘贴到CPP文件中赋值给CString,最终用于CEdit控件显示多行文本,以下是可行方案:

方案1:原生多行宽字符串字面量(VS2015+支持)

VS2015及以上版本支持C++原生多行宽字符串,用LR"(...)"包裹整段CSS,括号内内容完全保留原格式,无需手动添加换行符或转义:

CString m_strCSS = LR"(
.tableDUTY {
    margin-bottom: 2mm;
}

.cellDutyLabel {
    border-right-style: none;
}

.textDutyLabel {
    font-size: 10pt;
    font-weight: normal;
}

.cellDutyName {
    font-size: 10pt;
    font-weight: normal;
}

.cellDutyHeading {
    padding-left: 1mm;
}

.textDutyHeading {
    padding: 1mm;
    color: #fff;
    background-color: #FD00FF;
    width: 90mm;
    font-size: 12pt;
    font-weight: 700;
    text-transform: uppercase;
    vertical-align: middle;
}
)";
// 若开头存在多余空行,可调用TrimLeft()去除
m_strCSS.TrimLeft();

方案2:借助std::string转换(兼容旧版VS)

如果使用的VS版本不支持原生多行宽字符串,可先将CSS作为多行窄字符串(C++11及以上支持),再转换为CString:

#include <string>

// 原样粘贴多行窄字符串
std::string cssStr = R"(
.tableDUTY {
    margin-bottom: 2mm;
}

.cellDutyLabel {
    border-right-style: none;
}

.textDutyLabel {
    font-size: 10pt;
    font-weight: normal;
}

.cellDutyName {
    font-size: 10pt;
    font-weight: normal;
}

.cellDutyHeading {
    padding-left: 1mm;
}

.textDutyHeading {
    padding: 1mm;
    color: #fff;
    background-color: #FD00FF;
    width: 90mm;
    font-size: 12pt;
    font-weight: 700;
    text-transform: uppercase;
    vertical-align: middle;
}
)";

// 转换为CString(项目字符集为Unicode时自动处理宽字符转换)
CString m_strCSS(cssStr.c_str());
// 去除开头空行
m_strCSS.TrimLeft();

注:若项目使用多字节字符集,直接赋值即可,无需额外转换。

方案3:资源文件嵌入(适合大型CSS)

若CSS内容较长,可将其保存为单独.css文件,添加到VC++自定义资源中,再从资源读取到CString:

  1. 将CSS文件添加到资源,自定义类型设为CSS,资源ID设为IDR_CSS_STYLE
  2. 读取代码:
#include <afxres.h>

CString LoadCSSFromResource()
{
    CString strCSS;
    HRSRC hRes = FindResource(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_CSS_STYLE), _T("CSS"));
    if (hRes)
    {
        HGLOBAL hData = LoadResource(AfxGetInstanceHandle(), hRes);
        if (hData)
        {
            LPCTSTR lpData = (LPCTSTR)LockResource(hData);
            if (lpData)
            {
                strCSS = lpData;
                UnlockResource(hData);
            }
            FreeResource(hData);
        }
    }
    return strCSS;
}

// 使用时
CString m_strCSS = LoadCSSFromResource();

该方式便于独立维护CSS内容,避免CPP文件中嵌入大段文本。

内容的提问来源于stack exchange,提问作者Andrew Truckle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 13:12:56