Example #1
0
bool CTSProcessor::ShowPropertyPage(HWND hwndOwner, HINSTANCE hinst)
{
	ISpecifyPropertyPages *pSpecifyPropPages;

	if (FAILED(m_pTSProcessor->QueryInterface(IID_PPV_ARGS(&pSpecifyPropPages))))
		return false;

	CAUUID Pages;
	Pages.cElems = 0;
	Pages.pElems = nullptr;
	HRESULT hr = pSpecifyPropPages->GetPages(&Pages);
	if (SUCCEEDED(hr) && Pages.pElems != nullptr) {
		if (Pages.cElems > 0) {
			ISpecifyPropertyPages2 *pSpecifyPropPages2;
			if (SUCCEEDED(pSpecifyPropPages->QueryInterface(IID_PPV_ARGS(&pSpecifyPropPages2)))) {
				IPropertyPage **ppPropPages = new IPropertyPage*[Pages.cElems];
				ULONG PageCount = 0;
				for (ULONG i = 0; i < Pages.cElems; i++) {
					IPropertyPage *pPropPage;
					if (SUCCEEDED(pSpecifyPropPages2->CreatePage(Pages.pElems[i], &pPropPage)))
						ppPropPages[PageCount++] = pPropPage;
				}
				if (PageCount > 0) {
					hr = ShowPropertyPageFrame(ppPropPages, PageCount,
											   m_pTSProcessor, hwndOwner, hinst);
				}
				for (ULONG i = 0; i < PageCount; i++)
					ppPropPages[i]->Release();
				delete [] ppPropPages;
				pSpecifyPropPages2->Release();
			} else {
				IUnknown *pObject;
				hr = m_pTSProcessor->QueryInterface(IID_PPV_ARGS(&pObject));
				if (SUCCEEDED(hr)) {
					hr = ::OleCreatePropertyFrame(
						hwndOwner, 0, 0, L"プロパティ",
						1, &pObject, Pages.cElems, Pages.pElems,
						::GetUserDefaultLCID(),
						0, nullptr);
					pObject->Release();
				}
			}
		}
		::CoTaskMemFree(Pages.pElems);
	}

	pSpecifyPropPages->Release();

	return SUCCEEDED(hr);
}