IBS Japan logo 
IBS Japan 内検索 help



MFC での PrinterCE の使用

PrinterCE 定義ファイル PrCEUser.h のダウンロード 

  1. PrinterCEをダウンロードし、デバイスとホストマシンにインストールします。
  2. MFC プロジェクトを作成します。 - この際、MFCウィザード内でActiveXコントロールを使用可能にしてください。
  3. [プロジェクト] - [プロジェクトへ追加] - [コンポーネントおよびコントール]を選択します。
  4. [コンポーネントおよびコントロール ギャラリ] が開きます。(開くまでに時間がかかる場合があります。) - [登録済み ActiveX コントロール]を選択します。
  5. 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 をクリックし、再度お試しください。
  6. クラスを確認してOKをクリックし、コントロール ギャラリを閉じます。
  7. 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のダウンロード]
  8. ResourceViewメニュー -> Resource シンボル を選択します。
  9. リソースシンボルダイアログで新規作成をクリックし、新規シンボル名にIDC_PRINTERCEを入力します。OKをクリックし、ダイアログボックスを閉じます。
  10. クラスを宣言して作成します。これをどこでするかを決める必要がありますが、以下のようになります。

#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);
}


ページトップへ | HOME | 会社概要 | 取扱商品 | サポート | お問合せ | 販売代理店


本ページに関するご意見はWebmasterまでお寄せ下さい。

本ページに記載されている商品の仕様・外観・価格は予告なく変更することがございます。予めご了承下さい。
会社名、製品名は各社の商標または登録商標です
更新日:

本ページに記載されている商品の仕様・外観・価格は予告なく変更することがございます。予めご了承下さい。
会社名、製品名は各社の商標または登録商標です。
本ページに関するご意見はWebmasterまでお寄せ下さい。
更新日: