- PrinterCEをダウンロードし、デバイスとホストマシンにインストールします。
- MFC プロジェクトを作成します。 - この際、MFCウィザード内でActiveXコントロールを使用可能にしてください。
- [プロジェクト] - [プロジェクトへ追加] - [コンポーネントおよびコントール]を選択します。
- [コンポーネントおよびコントロール
ギャラリ] が開きます。(開くまでに時間がかかる場合があります。) - [登録済み ActiveX コントロール]を選択します。
- PrinterCE、(BarcodeCE:現在未サポート)、また必要に応じてAsciiCE2を選択し、OKをクリックして希望のコンポーネントを挿入します。この際、挿入したコンポーネンツをサポートするためにMFCに必要な全ての情報を提供する2つのwrapper
classファイル(printerce.h/printerce.cpp, barcodece.h/barcodece.cpp および asciice2.h/asciice2.cpp)をそれぞれ挿入します。
ここで PrinterCE 関連のコントロールが見当たらない場合は、ホストマシン用の PrEngineCE.dll の保存場所を参照し、PrEngineCE.dll
を選択し OK をクリックし、再度お試しください。 - クラスを確認してOKをクリックし、コントロール ギャラリを閉じます。
- AsciiCE2使用者への注意: MFCではBYTEまたはBYTE*パラメータを渡す方法を作成してしまい間違ったwrapper
classesを引き起こす既知のバグがあります。(MSDN
Q241862を参照してください。). 2つのAsciiCE2メソッド(ReadおよびWrite)がBYTE配列を抜けてデータブロックを通過してしまいます。アプリケーション内でAsciiCE2のReadまたはWriteメソッドを使用する場合は、以下のリンクより正しいasciice2.hおよびasciice2.cppファイルをダウンロードし、MFCアプリケーションのディレクトリにコピー(上書き)してください。
[asciice.hのダウンロード]
[asciice.cppのダウンロード]
- ResourceViewメニュー -> Resource シンボル を選択します。
-
リソースシンボルダイアログで新規作成をクリックし、新規シンボル名にIDC_PRINTERCEを入力します。OKをクリックし、ダイアログボックスを閉じます。
-
クラスを宣言して作成します。これをどこでするかを決める必要がありますが、以下のようになります。
#include
"printerce.h" ;
// This defines the CPrinterCE class CPrinterCE PrinterCE1;
// Set up an instance of the class
void SomeFunction() { static BOOL OneTimeFlag=FALSE;
if (!OneTimeFlag) {
//Only create one instance of PrinterCE!!
OneTimeFlag=TRUE;
RECT rc; //Since
PrinterCE is not visible, value of RECT is not important
PrinterCE1.Create(NULL,0,rc,this,IDC_PRINTERCE); } //PrinterCE1
should now be up and running, so do whatever you want...
// For this example,
we'll do the Hello World...
PrinterCE1.SelectPrinter(); PrinterCE1.DrawText(_T("Hello
World"),0,0,NULL); PrinterCE1.EndDoc(); } プログラムをコンパイルし、PocketPCデバイスにダウンロードし(PrinterCEをデバイスにインストールした事を再度確認してください。)実行します。プリンタダイアログボックスが表示され、"Hello
World"と書かれたページが印刷されます。 MFCの使用
ActiveXコントロールがeVBとMFC両方で動作するよう設計されているため、MFC/CE開発者は処理しなくてはいけない問題が幾つかあります。eVB環境ではこれらの状況を自動的に処理しますが・・・もしかするといつかMFCもそうなるかもしれません。それまではMFC開発者はこの処理を行う必要があります。
Function
コール PrinterCEドキュメントはeVBの"Sub:サブルーチン"(値を返さないfunction)は括弧内にパラメータを置かない方法に従います。しかし"function"(これは値を返します)は括弧を使用します。MFCは常に括弧を使用します。従ってドキュメントで
DrawCircleメソッドを次のように使用する場合:"object.DrawCircle x, y, radius, [color], [
aspect]"、MFCプログラマはこれを:PrCE.DrawCircle(x,y,radius,color,aspect) のようにコンバートする必要があります。;
PrinterCE プロパティ PrinterCEプロパティはあらかじめMFCのプロパティ名に追加された"Get"または"Put"を必ず持ちます。例えばFontBoldプロパティはドキュメント内で次のように明示されます。:object.FontBold
[= Boolean]。eVBプログラム内ではこのプロパティを PrinterCE.FontBold=True で設定できます。MFCプログラム内では
PrinterCE.SetFontBold(VARIANT_TRUE) のようにコールし、同じようにPrinterCEからカレントのX座標を取得するにはMFCは
xCoord=PrinterCE.GetTextX() とコールします。
VARIANT
BOOL C++開発者はBoolean値をFALSEは0、TRUEは1と覚えていますが、eVBではTRUEは-1(FALSEは同じく0ですが)となります。MFCではVT_BOOLタイプをVARIANT_TRUEおよびVARIANT_FALSEと定義します。PrinterCE内のBoolean値が戻るfunctionはVARIANT_TRUE
または VARIANT_FALSEを探します。PrinterCEのfunctionは VARIANT_TRUE/VARIANT_FALSEはもちろんTRUE/FALSEでも動作するよう設計されていますが、Boolean値を返すPrinterCEでのfunctionではVARIANTバージョンを返します。
VARIANT データタイプ
"optional" パラメータを使用するいくつかのPrinterCE function、例えばDrawTextメソッドはこのように定義され:"object.DrawText
string, [x], [y], [count]"、x, yとcountは"optional"となります。 C++内では全ての可能性のあるコールに対応するためにいくつかのDrawText()の設定ができるように、こういった種類のオプショナルパラメータは過負荷をかけるfunctionによって処理されます。eVBは過負荷のかかったfucntionに対応できないので、多くの"optional"パラメータはVARIANTデータタイプとして扱われます。
基本的に、VARIANTはVT_EMPTYを含む幅広い種類のデータタイプを意味します。eVBプログラムで1つまたはそれ以上のパラメータなしでPrinterCE
functionをコールする場合、eVBは自動的に「空」のVARIANTをその省略されたパラメータに適用します。MFCプログラムでは代わりにNULL (0)を空のパラメータに適用し、PrinterCEは正しく動作します。ただしMFCプログラムが自動的にそれらのオプショナルパラメータに値を適用する時には、必ずVARIANT値が適用されます。MFC
CComVariantクラスはvariantを使用する手間を大変簡単にします。VARIANTとCComVariantの両方のデータタイプをMFCプログラム内で使用するには
#include が必要です。
PrCEUser.h - MFC
& VC++ 定数定義 すべてのPrinterCEユーザ定数をあらかじめ定義するには このファイル
(PrCEUser.h)をコピーして追加します。 MFC 例: 以下のものはテキストとイメージを印刷するMFC functionのソースコードです。VARIANTがどのように使われるかを示すためにCComVariantsではなくVARIANTを使用しています。
最初のMFCプログラムを作成してPrinterCEにそれを追加するにいは以下のステップを行ってください。 //atlbase.h allows use of both VARIANT
and the CComVariant class #include <atlbase.h> #include "printerce.h"
//Define CPrinterCE class
CPrinterCE m_PrinterCE; //Instance of PrinterCE #include
"PrCEUser.h" //PrinterCE defs file that defines all user constants
void
CPrEngineTestDlg::OnTestprint() { RECT rc;
// dummy used to create PrinterCE instance m_PrinterCE.Create(NULL,0,rc,this,IDC_PRINTERCE);
//Check out the CComVariant class
because it does a lot of //
the grunt work for you. I will just use straight VARIANTS here. VARIANT cv,cvx,cvy,cvsiz;
VariantInit(&cv); //You have
to init variants before you use them VariantInit(&cvx); VariantInit(&cvy); VariantInit(&cvsiz);
m_PrinterCE.SelectPrinter();
//Lets demo positioning and drawing
text // Assigning a value to a
variant requires 2 steps: // define the "type" and
the "value" cvx.vt=VT_I4; //Define
a couple of VARIANT longs and assign them cvx.lVal=1440; // In TWIPS
- 1440 TWIPS per inch cvy.vt=VT_I4;
cvy.lVal=2880; m_PrinterCE.SetFontSize(16);
m_PrinterCE.DrawText(_T("16 pt font,
no bold or italic"),&cvx,&cvy,NULL); m_PrinterCE.SetFontBold(VARIANT_TRUE); //Use VARIANT_TRUE rather than TRUE
m_PrinterCE.DrawText(_T("Bold"),NULL,NULL,NULL); m_PrinterCE.SetFontItalic(VARIANT_TRUE); m_PrinterCE.DrawText(_T("Bold &
Italic"),NULL,NULL,NULL);
//Change
ScaleMode to inches and use FLOAT values for x,y m_PrinterCE.SetScaleMode(vbInches); cvx.vt=cvy.vt=VT_R4; //Float type
cvx.fltVal=0.75; cvy.fltVal=6.25;
//Lets also set BOLD value to max of 1000 m_PrinterCE.SetFontName(_T("Courier
New")); m_PrinterCE.SetFontBoldVal(1000); m_PrinterCE.DrawText(_T("Bold &
Italic : 1000"),&cvx,&cvy,0); m_PrinterCE.SetFontBoldVal(700); m_PrinterCE.DrawText(_T("Bold &
Italic : 700"),NULL,NULL,0); m_PrinterCE.SetFontBoldVal(500); m_PrinterCE.DrawText(_T("Bold &
Italic : 500"),NULL,NULL,0); m_PrinterCE.SetFontBoldVal(300); m_PrinterCE.DrawText(_T("Bold &
Italic : 300"),NULL,NULL,0); m_PrinterCE.SetFontBoldVal(100); m_PrinterCE.DrawText(_T("Bold &
Italic : 100"),NULL,NULL,0); m_PrinterCE.SetFontBold(VARIANT_TRUE); m_PrinterCE.DrawText(_T("Bold &
Italic : Straight bold"),NULL,NULL,0);
//Finally, lets draw a picture
cv.vt=VT_BOOL;
//Type
is BOOL cv.boolVal=VARIANT_TRUE; //value is
True (VARIANT_TRUE) //Center on
the page float fltx,flty;
fltx=m_PrinterCE.GetPrPgWidth() / 2.0; flty=m_PrinterCE.GetPrPgHeight()
/ 2.0; m_PrinterCE.SetJustifyHoriz(vbCenter); //Center
horizontally m_PrinterCE.SetJustifyVert(vbCenter); //Center
vertically //The "keepaspect"
optional value must be a variant bool cvsiz.vt=VT_R4; cvsiz.fltVal=2.0; //Fit picture
in 2" box m_PrinterCE.DrawPicture(_T("\\Images\\Owl.bmp"),fltx,flty,&cvsiz,&cvsiz,&cv);
m_PrinterCE.EndDoc(); VariantClear(&cv); VariantClear(&cvx); VariantClear(&cvy); VariantClear(&cvsiz); }
|