Addon-Action.pdf 파일을 참고해서 UserAction Addon을 만들고 있습니다.
QueryUserActionInterface가 호출되서 인스턴스 생성하는 것 까진 잘 됐는데요…
“한글2007에 툴바를 추가하기 위해서는 OnInitialLoad()와 OnLoad()를 정의해 주어야 합니다.”
이 문장의 의미를 모르겠습니다.
저 함수를 어디에 정의하는 건가요??
DLL Export로 등록 해도 호출되지 않는 것 같고… HwpObject에 이벤트 핸들러로도 안보여서 질문 드립니다.
OnInitialLoad(), OnLoad()는 초기화를 수행하는 액션 함수로 가이드에 나온대로 유저 액션 맵에 등록하시면
해당 함수들은 한글 프로그램이 처음 시작될 때, 한글 프로그램에서 새로운 창이 열릴 때 호출이 됩니다.
BOOL OnInitialLoad(CHwpObject& rHwpObject)
{
return TRUE;
}
BOOL OnLoad(CHwpObject& rHwpObject)
{
CXHwpWindows xWindows;
CXHwpWindow xWindow;
CXHwpToolbarLayout xToolbarLayout;
xWindows.AttachDispatch(rHwpObject.get_XHwpWindows(), TRUE);
xWindow.AttachDispatch(xWindows.get_Active_XHwpWindow(), TRUE);
xToolbarLayout.AttachDispatch(xWindow.get_XHwpToolbarLayout(), TRUE);
xToolbarLayout.ChangeSerializePath(_T(USERACTION_SERIALIZE_PATH));
// 기존에 UserAction이 Hwp 에 로드 되어 Frame Registry 에 기록이 되었다면 UI 생성을 하지 않아도 된다.
if (!xToolbarLayout.IsNewSerializePath()) {
return TRUE;
}
CXHwpToolbar toolbar = xToolbarLayout.CreateToolbar(_T("사용자 정의"), 0);
if (toolbar) {
CXHwpToolbarButton toolbarbutton1 = xToolbarLayout.CreateToolbarButton(_T("툴바버튼"), _T(UUIDSTR_ON_USERACTION_TOOLBAR), 0x01 | 0x02);
toolbar.InsertToolbarButton(toolbarbutton1, -1);
}
CXHncToolBoxToolbar xToolBoxToolbar;
xToolBoxToolbar.AttachDispatch(xToolbarLayout.GetToolBoxToolBar());
if(xToolBoxToolbar) {
CXHncToolBoxTab xToolBoxTab;
CXHncToolBox xToolBox;
CXHncToolBoxLayout xToolBoxLayout;
xToolBoxTab.AttachDispatch(xToolBoxToolbar.InsertToolBoxTab(-1, _T(USERTOOLBOXTAB_UID), _T("추가 기능")));
xToolBox.AttachDispatch(xToolBoxTab.InsertToolBox(-1, _T(USERTOOLBOX_UID), _T("멀티미디어")));
xToolBoxLayout.AttachDispatch(xToolBox.GetLayout(0));
CXHncToolBoxGroup xToolBoxGroup;
xToolBoxGroup.AttachDispatch(xToolBoxLayout.InsertGroup(-1, _T(USERTOOLBOXGROUP_UID), HFTBDT_GROUP_LARGEICON, 1, 4));
LPDISPATCH pDispatch = xToolBoxToolbar.CreateToolBoxItemButtonEx(_T("툴박스버튼"), _T(UUIDSTR_ON_USERACTION_TOOLBOX), STDTB_BTN, 0x01 | 0x02);
xToolBoxGroup.InsertItem(-1, pDispatch);
pDispatch->Release();
}
return TRUE;
}
// 유저 액션 맵
BEGIN_USERACTION_MAP()
USERACTION_ENTRY(UUIDSTR_ON_INITIAL_LOAD, 0, OnInitialLoad, 0)
USERACTION_ENTRY(UUIDSTR_ON_LOAD, 0, OnLoad, 0)
// UserAction
USERACTION_ENTRY(UUIDSTR_ON_USERACTION_TOOLBAR, 64, OnUserAction1, 0)
USERACTION_ENTRY(UUIDSTR_ON_USERACTION_TOOLBOX, 64, OnUserAction1, 0)
END_USERACTION_MAP()
애드온 샘플을 첨부합니다.
해보시고 안되는 부분이 있으시면 언제든지 질문 남겨주세요.
HncUserAction.zip (1.2 MB)
안녕하세요. 2014로 올려주신 샘플 적용해봤는데 추가기능에는 등록되어있지만 실제적으로 툴바는 표시되지 않고 2007은 시작하자마자 프로그램이 종료됩니다.
UUIDSTR_ON_INITIAL_LOAD의 uuid는 2007과 2014가 다른가요? 다르다면 어디서 찾아야할까요?
아래 게시글의 답변을 참고 부탁드립니다.
안녕하세요 올려 주신 HncUserAction.zip 샘플 프로젝트로 테스트 중입니다.
잘 동작하기에 이것 저것 만지다 보니, 추가 해 보고 싶은 기능이 있어 맨땅에 헤딩하다 결국 문의 드리게 됬네요.
간단하게 document 객체를 받아서 편집 불가 상태로 만드는데 성공 했습니다.
put_EditMode(0)로요…
바로 실행했을 때 빈 문서에서 편집이 불가 상태이고 메뉴들도 비활성되어 잘 되나 싶었는데,
문서 불러오기나, 아니면 hwp 문서를 바로 열기 했을 때는 내용과 함께 편집도 잘 되더라구요.
왜그런지, 편집 불가 상태로 만들려면 어떻게 해야 하는지 문의 드립니다.
그러면서 한가지 더 문의 드립니다.
onLoad 시 이벤트 핸들러를 달아 놓으면 뭔가 더 제어를 할 수 있을 것 같아, 포럼에서 이벤트 핸들러 추가 문서를 보고 이것 저것 해 보았는데 이 역시 헤딩만 하고 있어서,
위 샘플에서 이벤트 핸들러를 붙힌 간단한 샘플 소스를 얻을 수 있을지 문의 드립니다.