아래 소스의 InsertText 기능이 안됩니다. c++

void CMFCApplication3Dlg::OnBnClickedButton7() // 쓰기
{
::OleInitialize(0);

COleException exception;
if (m_app.CreateDispatch(_T("HWPFrame.HwpObject.2"), &exception) != NULL) {
	CXHwpWindows wins = m_app.get_XHwpWindows();
	CXHwpWindow0 win = wins.get_Active_XHwpWindow();
	win.put_Visible(TRUE);
	//win.put_Height(rcClient.bottom - rcClient.top);
	//win.put_Width(rcClient.right - rcClient.left);
}
else {}

CDHwpAction action2 = m_app.CreateAction(_T("InsertText"));
CDHwpParameterSet creationset2 = action2.CreateSet();

VARIANT styleName;
VariantInit(&styleName);
styleName.vt = VT_BSTR;
styleName.bstrVal = _T("쓰기 테스트");

creationset2.SetItem(_T("Text"), styleName);
//m_app.Run(_T("CharShapeBold"));
action2.GetDefault(creationset2);
action2.Execute(creationset2);

//m_app.Run(_T("DeleteBack"));

}

실행해도 한글은 열리는데, 텍스트가 써지질 않습니다. 그런데, 몇번은 됐다가 이제는 계속 안됩니다.
이유가 무엇인지 알려주시면, 감사하겠습니다.

위 소스에
m_app.PutFieldText(_T(“111”), _T(“aaa”));를 처음 넣고 하면, 다음 글자가 써지네요.

m_app.PutFieldText(_T(“111”), _T(“aaa”));
CDHwpAction action2 = m_app.CreateAction(_T(“InsertText”));
CDHwpParameterSet creationset2 = action2.CreateSet();

VARIANT styleName;
VariantInit(&styleName);
styleName.vt = VT_BSTR;
styleName.bstrVal = _T(“쓰기 테스트”);

creationset2.SetItem(_T(“Text”), styleName);
//m_app.Run(_T(“CharShapeBold”));
//action2.GetDefault(creationset2);
action2.Execute(creationset2);

PutFieldText 에 특별한 뭔가 있는건가요? 궁금합니다.

안녕하세요.

휴가 중이라서 답변이 늦었습니다.
VARIANT에 문자열 타입의 데이터는 아래와 같이 입력하시면 됩니다.

1. 방법1
VARIANT text
VariantInit(&text);
text.vt = VT_BSTR;
text.bstrVal = SysAllocString((OLESTR("쓰기 테스트")));

set.SetItem(_T("Text"), text);

2. 방법2
set.SetItem(_T("Text"), COleVariant(_T("쓰기 테스트")));

그리고 액션 API의 아래 순서로 아래와 같은 순서로 작성하셔야 합니다.

CDHwpAction action2 = m_app.CreateAction(_T("InsertText"));
CDHwpParameterSet creationset2 = action2.CreateSet();

// 1. 실행하고자 하는 액션의 초기값을 먼저 구한다.
action2.GetDefault(creationset2);
// 2. 변경하고자 하는 값을 설정한다.
set.SetItem(_T("Text"), COleVariant(_T("쓰기 테스트")));
// 3. 액션을 실행한다.
action2.Execute(creationset2);

감사합니다. :grinning:

답변 감사합니다. 일단 잘 되는데요, 전에도 됐다 안됐다 해서요… 순서는 맞게 한것 같은데요.
그런데, 윗 줄에 m_app.PutFieldText(_T(“111”), _T(“aaa”));를 설정해 주면, 안되는 경우없이, 무조건 됩니다.
아무튼 답변 감사합니다.

연관성이 없는 API인데 호출하면 입력이 잘 된다니 의아하네요. :thinking:

저도 의아합니다. 그런데, 이게 있으면, 무조건 잘 됩니다.
새로 주신 코드는 이미 제가 쓰고 있고, 순서도 같게 돼 있더라구요. 안될 때, 다시 글 올리겠습니다.

감사합니다.