본문 바로가기

c++/MFC

[MFC] Office CommandBars 추가하는 COM 에드인이 최초 실행시에만 로드되는 문제/Office Context Menu CommandBars Addin loads only initial start up.

반응형

Office CommandBars (컨텍스트 메뉴) 추가하는 COM 에드인이 최초 실행시에만 로드되는 문제.

"Caption", "Style", "Visible" 등 외에 "Tag"를 추가해야 함. 왜인지는 모름.

CComVariant AddtButton; 
// Grab our button to sink events...
VariantClear(&vtParam);
vtParam.vt = VT_BSTR; vtParam.bstrVal = ::SysAllocString(CALL_MENU_NAME);
hr = CallMethod(vtCtrls.pdispVal, L"Item", &AddtButton, 1, &vtParam);
VariantClear(&vtParam);

// If we can't find it, make a new button...
if (FAILED(hr)) 
{
	vtParam.vt = VT_I4; vtParam.lVal = 1;
	hr = CallMethod(vtCtrls.pdispVal, L"Add", &AddtButton, 1, &vtParam);
	if (FAILED(hr)) goto cleanup;
	
	vtParam.vt = VT_BSTR; vtParam.bstrVal = ::SysAllocString(CALL_MENU_NAME);
	hr = PutProperty(AddtButton.pdispVal, L"Caption", &vtParam);
	VariantClear(&vtParam);
	if (FAILED(hr)) goto cleanup;
	
	vtParam.vt = VT_I4; vtParam.lVal = 2;
	hr = PutProperty(AddtButton.pdispVal, L"Style", &vtParam);
	if (FAILED(hr)) goto cleanup;
	
	vtParam.vt = VT_I4; vtParam.lVal = 1;
	hr = PutProperty(AddtButton.pdispVal, L"Visible", &vtParam);
	if (FAILED(hr)) goto cleanup;	
	vtParam.vt = VT_BSTR; vtParam.bstrVal = ::SysAllocString("버튼");
	hr = PutProperty(AddtButton.pdispVal, L"Tag", &vtParam);
	if (FAILED(hr)) goto cleanup;
}


반응형