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개의 좋아요