次の方法で共有


CDC::SetAbortProc

更新 : 2007 年 11 月

印刷ジョブのアボート プロシージャをインストールします。

int SetAbortProc(
   BOOL ( CALLBACK* lpfn )( HDC, int )
);

パラメータ

  • lpfn
    アボート プロシージャとしてインストールするためのアボート関数へのポインタです。コールバック関数の詳細については、「CDC::SetAbortProc 用コールバック関数」を参照してください。

戻り値

SetAbortProc 関数の結果を示します。次の値のいずれかの可能性があります。

  • SP_ERROR   一般的なエラーです。

  • SP_OUTOFDISK   現在、スプールに必要なディスク領域が十分でなく、領域が回復される見込みがないことを示します。

  • SP_OUTOFMEMORY   スプールに必要なメモリが十分にないことを示します。

  • SP_USERABORT   ユーザーがプリント マネージャを使ってジョブを終了させたことを示します。

解説

アプリケーションがスプール中に印刷ジョブを取り消すことができるようにするには、StartDoc メンバ関数を使って印刷ジョブが開始される前にアボート関数を設定しておく必要があります。スプール中に、アプリケーションが印刷ジョブを取り消したり、ディスクの空きがなくなった状態を処理するために、プリント マネージャがアボート関数を呼び出します。アボート関数が設定されていないと、スプールのために十分なディスク領域がない場合、印刷ジョブは失敗します。

Microsoft Visual C++ では、SetAbortProc に渡すコールバック関数を簡単に作成できます。EnumObjects メンバ関数に渡すアドレスは、関数のポインタで、この関数は __declspec (dllexport) でエクスポートされ、__stdcall の呼び出し規約に従う必要があります。

また、関数名をアプリケーションのモジュール定義ファイルの EXPORTS ステートメントでエクスポートする必要もありません。その代わりに、次のように EXPORT 関数修飾子が使えます。

BOOLCALLBACKEXPORT AFunction( HDC, int**);**

このとき、コンパイラは、エイリアスを使わずに名前によるエクスポートで正しいエクスポート レコードを作成します。ほとんどの処理は、この機能で対応できます。特別な場合として、順に関数をエクスポートした場合やエイリアスを使用して関数をエクスポートした場合は、従来どおりモジュール定義ファイルに EXPORTS ステートメントを使用する必要があります。

コールバック関数の登録インターフェイスは現在はタイプ セーフです。関数のポインタには、特定のコールバックごとに正しい種類の関数へのポインタを渡す必要があります。

また、コールバック関数の外側で例外をスローすることができないので、Windows に戻る前にすべてのコールバック関数は MFC の例外を残らずキャッチする必要があることに注意してください。例外の詳細については、「例外処理 (MFC)」を参照してください。

必要条件

ヘッダー : afxwin.h

参照

参照

CDC クラス

階層図

その他の技術情報

CDC のメンバ