Как сделать так, чтобы мой элемент управления C ++ ActiveX хорошо печатался в Excel? - PullRequest
3 голосов
/ 05 марта 2009

Я пытаюсь, чтобы мой элемент управления ActiveX хорошо распечатывался в Excel.

Элемент управления написан на C ++. Первоначально я создал элемент управления с помощью мастера Visual Studio 2005. Я проверил это с помощью простого элемента управления, сгенерированного мастером, чтобы поэкспериментировать с функцией OnDraw, и обнаружил, что даже элемент управления прямо из мастера также не печатает хорошо. Похоже, что он вырезает большую часть элемента управления, который по умолчанию отображает черный контур и некоторый текст в центре.

Функция IDataObject_GetData вызывается в моем элементе управления ActiveX, который, в свою очередь, создает метафайл и обрабатывает его.

Кто-нибудь знает, как заставить элемент управления ActiveX печатать красиво? В качестве альтернативы будут оценены ссылки на полезную информацию.

1 Ответ

2 голосов
/ 05 марта 2009

После сильных царапин на голове я нашел решение своей проблемы.

Функция OnDraw, созданная мастером Visual Studio 2005, устанавливает область отсечения, вызывая функцию SelectClipRgn. Именно эта настройка отсечения заставляла элемент управления ActiveX выглядеть обрезанным при печати. Закомментирование кода делает печать элемента управления ActiveX безупречной. Комментирование кода, похоже, не вызывает никаких других проблем - по крайней мере, в моем случае.

Я могу только предположить, что любая система координат, используемая для отсечения, несовместима с системой координат, используемой при рисовании в метафайле DC.

Вот несколько ссылок на полезную информацию о печати элементов управления ActiveX:

http://www.codeproject.com/KB/COM/officeatlprint.aspx

http://www.codeproject.com/KB/COM/WirgerPrintArticle.aspx

http://support.microsoft.com/kb/81497

http://support.microsoft.com/kb/84984

...