GXPD 43 - GXNewPaperType の使い方 (97 年 1 月 9 日)
印刷およびグラフィックにかかわるデベロッパへの重要情報
この Technical Q & A で紹介する情報は、QuickDraw GX 1.1.5 を使った Mac OS 7.6 までのシステムに当てはまります。しかし、Tempo のリリース以降、Apple では、QuickDraw GX のグラフィックとタイポグラフィだけを組み込んだシステムの提供を計画しています。このため、QuickDraw GX のプリンタドライバと GX 印刷機能拡張は Tempo およびそれ以降の Mac OS ではサポートされません。Apple の目的は、Macintosh のグラフィックと印刷のアーキテクチャを統合し、これまでの Printing Manager を標準化することによって、ユーザの印刷操作を簡略化することにあります。
Apple の公式アナウンスについては、次のサイトを参照してください。
<http://devworld.apple.com/dev/technotes/gxchange.html>
Q: 開発中の QuickDraw GX アプリケーションの内部で、アプリケーションの使用中に新しい GX 用紙タイプを作成する方法を教えてください。現在 GXNewPaperType を使っていますが、何らかの理由で、新しい用紙タイプが用紙設定ダイアログに表示されません。
A: この問題は、すでに報告されている QuickDraw GX のバグに関連しています。アプリケーションが GXNewPaperType を使ってアプリケーション定義の用紙タイプを作成するとき、GX では、仕様とは異なり、用紙ダイアログ内でその用紙タイプを正しく認識できません。これは、用紙タイプのフラグを正しく設定できないためです。ただし、この問題を避ける方法はあります。
まず、印刷ジョブとカスタム paperType を作成して、それを“機能拡張”フォルダ内にあるファイルにフラット化してください。GXNewPaperType は有効な paperType を作成しますが、クリエータと paperType フラグは正しく設定されません。このため、GXNewPaperType を呼び出して新しいカスタム paperType を設定した後で、paperTypeFlags とクリエータを設定する必要があります。次に、このトリックを実現するコードを示します。
クリエータと paperType フラグの設定に使用するグローバル:
OSErr collectionErr = noErr;
Str255 paperTypeName;
gxRectangle paperDims;
gxRectangle pageDims;
Collection paperTypeCollection;
gxFlagsInfo paperTypeFlags;
gxCreatorInfo paperTypeCreator;
//
// この情報を使って、GXNewPaperType の呼び出し後に新しい paperType が
// 期待通りに正しく設定されていることを確認する
//
GXGetPaperTypeName( theNewPaperType, paperTypeName );
GXGetPaperTypeDimensions( theNewPaperType, &pageDims, &paperDims);
//
// 新しい paperType のフラグとクリエータを設定して
// GXが認識できるようにする
//
paperTypeCollection = GXGetPaperTypeCollection( theNewPaperType );
paperTypeFlags.flags = gxOldAndNewPaperTypeFlag;
collectionErr = AddCollectionItem( paperTypeCollection, gxFlagsTag,
gxPrintingTagID, sizeof(gxFlagsInfo),
&paperTypeFlags );
paperTypeCreator.creator = gxUserPaperType;
collectionErr = AddCollectionItem( paperTypeCollection, gxCreatorTag,
gxPrintingTagID, sizeof(gxCreatorInfo),
&paperTypeCreator );
このコードにより、“プリント”ダイアログが表示されるたびに paperType リストが再作成されます。その結果、新しく作成された paperType は、それを作成した実行中のアプリケーションの内部から見えるようになります。
カスタム paperType と有効な印刷ジョブを作成した後で、GXFlattenJob と GXFlattenPaperType を呼び出して、この情報を“機能拡張”フォルダ内にあるファイルに保存してください。これで、用紙設定ダイアログの用紙タイプリストにその paperType が表示されるようになります。
devsupport@apple.com
[ Technical Q&A's : Graphic & Media : QuickDraw GX : GX Printing : GXPD43 ]
|