목차 생성 C++ 예제 문의 드립니다.

HWP 목차생성 작동에 대해 스크립트 매크로를 복사해서 C++로 적용을 하려고 하는데,
Styles.Item 설정하는 예문을 C++ 코드로 적용하면 어떻게 되는지 문의 드립니다.

한글에서 Shift+Alt+L로 스크립트 정의하고 매크로를 복사한 내용 :

function OnScriptMacro_script1()
{
HAction.GetDefault(“MakeContents”, HParameterSet.HMakeContents.HSet);
with (HParameterSet.HMakeContents)
{
Level = 3;
CreateItemArray(“Styles”, 18);
Styles.Item(0) = 0;
Styles.Item(1) = 0;
Styles.Item(2) = 0;
Styles.Item(3) = 0;
Styles.Item(4) = 0;
Styles.Item(5) = 0;
Styles.Item(6) = 0;
Styles.Item(7) = 0;
Styles.Item(8) = 0;
Styles.Item(9) = 0;
Styles.Item(10) = 0;
Styles.Item(11) = 0;
Styles.Item(12) = 0;
Styles.Item(13) = 0;
Styles.Item(14) = 0;
Styles.Item(15) = 0;
Styles.Item(16) = 0;
Styles.Item(17) = 0;
StyleName = “”;
}
HAction.Execute(“MakeContents”, HParameterSet.HMakeContents.HSet);
}

해당 스크립트를 C++로 작성한 내용 :

   // 목차 생성
HWPSDK::Action* act2 = m_pDocument->CreateAction(u"MakeContents"); 
if (act2 == nullptr)
	return;

HWPSDK::ParameterSet* set2 = act2->CreateParameterSet();

act2->GetDefault(set2);

    //이 부분부터 맞는지 모르겠습니다.
set2->SetInt(u"Make", 51);
set2->SetInt(u"Hyperlink", 51);
set2->CreateItemArray(u"Styles", 18);

//이 부분부터 명확히 않습니다. 
Styles.Item(0) = 0;
Styles.Item(1) = 1;
Styles.Item(2) = 0;
Styles.Item(3) = 0;
Styles.Item(4) = 0;
Styles.Item(5) = 0;
Styles.Item(6) = 0;
Styles.Item(7) = 0;
Styles.Item(8) = 0;
Styles.Item(9) = 0;
Styles.Item(10) = 0;
Styles.Item(11) = 0;
Styles.Item(12) = 0;
Styles.Item(13) = 0;
Styles.Item(14) = 0;
Styles.Item(15) = 0;
Styles.Item(16) = 0;
Styles.Item(17) = 0;

StyleName = "02_본문_항목제목;";

act2->Execute(set2);

답변 부탁 드립니다. 감사합니다.

2개의 좋아요

안녕하세요.

c++로 변경한 내용이 빌드는 아마 안되셨을거같은데…

MFC Automation으로 작성한 샘플코드 첨부드립니다. 위 스크립트 코드내용을 변경한 것입니다 .
환경에 맞게 변경해서 사용해주시면 됩니다 .

CDHwpAction contentsAction = m_cHwpObject.CreateAction(L"MakeContents");
if (contentsAction == nullptr)
    return FALSE;

CDHwpParameterSet contentsSet = contentsAction.CreateSet();
contentsAction.GetDefault(contentsSet);

VARIANT makeVal;
VariantInit(&makeVal);
makeVal.vt = VT_I4;
makeVal.intVal = 15;

VARIANT levelVal;
VariantInit(&levelVal);
levelVal.vt = VT_I4;
levelVal.intVal = 3;

VARIANT styleVal;
VariantInit(&styleVal);
styleVal.vt = VT_I4;
styleVal.intVal = 0;


VARIANT styleName;
VariantInit(&styleName);
styleName.vt = VT_BSTR;
styleName.bstrVal = L"02_본문_항목제목";


contentsSet.SetItem(L"Make", makeVal);
contentsSet.SetItem(L"Level", levelVal);

CDHwpParameterArray stylesArray = contentsSet.CreateItemArray(L"Styles", 18);

stylesArray.SetItem(0, styleVal);
stylesArray.SetItem(1, styleVal);
stylesArray.SetItem(2, styleVal);
stylesArray.SetItem(3, styleVal);
stylesArray.SetItem(4, styleVal);
stylesArray.SetItem(5, styleVal);
stylesArray.SetItem(6, styleVal);
stylesArray.SetItem(7, styleVal);
stylesArray.SetItem(8, styleVal);
stylesArray.SetItem(9, styleVal);
stylesArray.SetItem(10, styleVal);
stylesArray.SetItem(11, styleVal);
stylesArray.SetItem(12, styleVal);
stylesArray.SetItem(13, styleVal);
stylesArray.SetItem(14, styleVal);
stylesArray.SetItem(15, styleVal);
stylesArray.SetItem(16, styleVal);
stylesArray.SetItem(17, styleVal);

contentsSet.SetItem(L"StyleName", styleName);

contentsAction.Execute(contentsSet);
return TRUE;
2개의 좋아요