Addon (UserAction)으로 툴바 추가하기

Addon-Action.pdf 파일을 참고해서 UserAction Addon을 만들고 있습니다.
QueryUserActionInterface가 호출되서 인스턴스 생성하는 것 까진 잘 됐는데요…
“한글2007에 툴바를 추가하기 위해서는 OnInitialLoad()와 OnLoad()를 정의해 주어야 합니다.”
이 문장의 의미를 모르겠습니다.
저 함수를 어디에 정의하는 건가요??
DLL Export로 등록 해도 호출되지 않는 것 같고… HwpObject에 이벤트 핸들러로도 안보여서 질문 드립니다.

2개의 좋아요

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()

애드온 샘플을 첨부합니다.
해보시고 안되는 부분이 있으시면 언제든지 질문 남겨주세요. :grinning:
HncUserAction.zip (1.2 MB)

1개의 좋아요

안녕하세요. 2014로 올려주신 샘플 적용해봤는데 추가기능에는 등록되어있지만 실제적으로 툴바는 표시되지 않고 2007은 시작하자마자 프로그램이 종료됩니다.
UUIDSTR_ON_INITIAL_LOAD의 uuid는 2007과 2014가 다른가요? 다르다면 어디서 찾아야할까요?

아래 게시글의 답변을 참고 부탁드립니다.

안녕하세요 올려 주신 HncUserAction.zip 샘플 프로젝트로 테스트 중입니다.
잘 동작하기에 이것 저것 만지다 보니, 추가 해 보고 싶은 기능이 있어 맨땅에 헤딩하다 결국 문의 드리게 됬네요.
간단하게 document 객체를 받아서 편집 불가 상태로 만드는데 성공 했습니다.
put_EditMode(0)로요…
바로 실행했을 때 빈 문서에서 편집이 불가 상태이고 메뉴들도 비활성되어 잘 되나 싶었는데,
문서 불러오기나, 아니면 hwp 문서를 바로 열기 했을 때는 내용과 함께 편집도 잘 되더라구요.
왜그런지, 편집 불가 상태로 만들려면 어떻게 해야 하는지 문의 드립니다.
그러면서 한가지 더 문의 드립니다.
onLoad 시 이벤트 핸들러를 달아 놓으면 뭔가 더 제어를 할 수 있을 것 같아, 포럼에서 이벤트 핸들러 추가 문서를 보고 이것 저것 해 보았는데 이 역시 헤딩만 하고 있어서,
위 샘플에서 이벤트 핸들러를 붙힌 간단한 샘플 소스를 얻을 수 있을지 문의 드립니다.

1개의 좋아요