あれから色々とフォントを変えたりしましたが
文字化けも治りませんでした。
ですが、前何処かで拾ってきたソースをそのまま使ってみると
紙の送り出し、印字、カットまで全てやってくれました・・・が
文字がかなり汚いです
ちなみに汚い方で印字したものが下記のソースになります(99.9%コピペで申し訳ない・・・)
/* USBとプリンタを接続してから起動 */
#uselib "comdlg32.DLL"
#func global PrintDlg "PrintDlgA" var
#func global CommDlgExtendedError "CommDlgExtendedError"
#uselib "gdi32.dll"
#func global SetMapMode "SetMapMode" int,int
#func global SetWindowOrgEx "SetWindowOrgEx" int,int,int,nullptr
#func global SetViewportOrgEx "SetViewportOrgEx" int,int,int,nullptr
#func global SetWindowExtEx "SetWindowExtEx" int,int,int,nullptr
#func global SetViewportExtEx "SetViewportExtEx" int,int,int,nullptr
#func global ScaleViewportExtEx "ScaleViewportExtEx" int,int,int,int,int,nullptr
#func global StartDoc "StartDocA" int,var
#func global StartPage "StartPage" int
#func global BitBlt "BitBlt" int,int,int,int,int,int,int,int,int
#func global EndPage "EndPage" int
#func global EndDoc "EndDoc" int
#cfunc global GetDeviceCaps "GetDeviceCaps" int,int
#func global DeleteDC "DeleteDC" int
;-----------------------------------------------------------------------------------
#module
#deffunc img_prt str docname,int v,int v3
mref bm,96+v : mref stt,64:mref ref,65
#define ctype MAKEDWORD(%1=0,%2=0) (%2<<16)|%1
;//PRINTDLG構造体
;// 最初の MAKEWORDは何ページ目〜何ページ目のデフォルト値
;// 次のMAKEWORDは文書が何ページ目から何ページ目まであるか
;// (ユーザーがこれを超えて指定するとエラーが出る)
;// その他は自分で PRINTDLG をgoogleして意味を調べること。
dim pd,17 : pd=66, hWnd, 0,0, 0, $100|$100000|4, MAKEDWORD(1,1),MAKEDWORD(1,1),1
PrintDlg pd ; プリント設定ダイアログを出す
if stat=0{
CommDlgExtendedError
if stat!0{
ref="エラーが発生しました"
if stat=$1004{ref="デバイス ドライバのロードに失敗しました"}
if stat=$1007{ref="デバイス ドライバが見つかりません"}
if stat=$1008{ref="デフォルトのプリンタが見つかりません"}
stt=-1:return
}else{
ref="キャンセルされました":stt=0:return
}
}
;// ダイアログが閉じられてなおかつエラーしていないとき↓
PrinterHDC = pd.4 ;// プリンタデバイスコンテキスト
DisplayHDC = bm.4 ;// ディスプレイ(コピー元)デバイスコンテキスト
DisplaySzX = bm.1 ;// サイズX,Y (ピクセル)
DisplaySzY = bm.2
prtx = GetDeviceCaps(PrinterHDC,8) ;// プリンタDCの幅・高さ取得
prty = GetDeviceCaps(PrinterHDC,10)
prtx.1=GetDeviceCaps(PrinterHDC,88);// プリンタDCの解像度取得
prty.1=GetDeviceCaps(PrinterHDC,90)
prtx.2=GetDeviceCaps(DisplayHDC,88);// 画像の縦横解像度取得
prty.2=GetDeviceCaps(DisplayHDC,90)
;::::::::::ここからプリンタに情報を渡す作業。
SetMapMode PrinterHDC ,7
SetWindowOrgEx PrinterHDC, 0,0
SetViewportOrgEx PrinterHDC, 0,0
SetWindowExtEx PrinterHDC, DisplaySzX,DisplaySzY
if v3=0 {
SetViewportExtEx PrinterHDC, DisplaySzX,DisplaySzY
ScaleViewportExtEx PrinterHDC, prtx.1, prtx.2, prty.1, prty.2
}
else {
SetViewportExtEx PrinterHDC, prtx,prty
}
dim dci,5:vDOCNAME = DOCNAME:dci = 20, varptr(vDOCNAME) ;// DOCINFO構造体
prm=pd.4; プリンタDCに転送開始
StartDoc PrinterHDC, dci
if stat<0 { DeleteDC PrinterHDC : stt = -1 : ref="エラーが発生しました" }
StartPage PrinterHDC
;// PrinterHDC に対してAPI描画する。
BitBlt PrinterHDC ,0,0,DisplaySzX,DisplaySzY, DisplayHDC, 0,0, $CC0020
EndPage PrinterHDC
EndDoc PrinterHDC
DeleteDC PrinterHDC : stt = 1
return
#global
buffer 0,300,600,,0,0
font "",15
mes "1234123412341234\n1234123412341234\n1234123412341234\n1234123412341234\n1234123412341234\n1234123412341234\n"
img_prt "",0
</@re>
https://gyazo.com/83b98ae99d163c298ea46e1d6aea60aa