[[FrontPage]]
*Smirnoffとは [#q7a66e35]
Smirnoffとは、Spirytusの外部ウィンドウ表示システムが余りに使いにくかったため、新たに開発された外部ウィンドウ表示専用のDLLです。
現行バージョンは0.33で、以下のリファレンスに存在する関数でも未実装のモノがまだあるかもしれません。
*Smirnoffの特徴 [#o6eedbe8]
-ウィンドウを複数作り、それぞれに名前をつけることができる。
-ウィンドウ以外にバックバッファを作ることができる(Screenの解説を参照)
-エラー処理を行っているので安心
*概念・用語解説 [#t37cf822]
**WindowとScreen [#dbcf84f9]
WindowはCreateWindow関数で作られ、実際に画面上に描画される窓そのものである。これに対して、CreateScreen関数で作られるScreenはそのままでは実際に画面上に描画されず、BitBlt関数を使ってWindowに転送(描画)することによって画面に描画される。これ以外の描画についてはWindowとScreenは完全に互換である。
また、Windowを操作する関数の一部にはScreenに対しては使用することができないものがある。このリファレンスではWindowでもScreenでもよい場合にはDrawingHandle、Windowしか使えない場合にはWindowHandle、Screenのみの場合にはScreenHandleと表記する。
任意のDrawingHandleがWindowHandleなのかScreenHandleなのかを取得するにはGetWindowType関数を用いる。
**GDIHandle [#z6116c55]
GDIHandleとは、WindowやScreenに対してどのような色や幅(線の場合)で描画するのかを示す値である。GDIHandleには
-Pen:線描画に使う。CreatePenで作成
-Brush:塗りつぶし描画に使う。CreateBrushで作成
-Font:文字描画に使う。CreateFontで作成
の3種類がある。GDIHandleを作成したら、SelectObject関数でDrawingHandleに対して設定することで、そのDrawingHandleでの描画される色などを変えることができる。
また、DrawingHandleに対してPen,Brush,Fontはそれぞれ別々に設定されるので、Penをどう設定しても塗りつぶしの色は変わらないしBrushをどう設定しても線描画の色は変わらない。
なお、任意のGDIHandleがPenなのかBrushなのかFontなのかを取得するにはGetGDIHandleType関数を用いる。
*リファレンス [#se1bfe0d]
**総則 [#y6b6d8f5]
***number SMIRNOFF_VERSION [#u010dbbb]
DLLのバージョンが浮動小数で入っている。
***全ての関数は、リファレンスにvoid型と書いてあっても内部でエラーが発生した場合は、 [#t9e71ef7]
false, エラーメッセージ
の2つの値を返す。assertでそのまま拾えばエラーの内容を取得できる
**Window,Screen操作関係 [#t4dbf4cf]
***WindowHandle CreateWindow(width, height, name) [#qeb77d77]
窓を作成する。
-widdth:作成するWindowの幅。
-height:作成するWindowの高さ。
-name:作成するWindowの名前。タイトルバーに表示される
-return:作成したWindowHandle。詳しくはWindowとScreenの説明を見よ。
***ScreenHandle CreateScreen(BaseWindow, width, height) [#x934d94a]
Screen(内部描画バッファ)を作成する。
-baseWindow:描画対象となるウィンドウのWindowHandle。(ただし、実質的にはどのウィンドウのハンドルでもいい)
-width:作成するバッファの幅。
-height:作成するバッファの高さ。
-return :作成したScreenHandle。詳しくはWindowとScreenの説明を見よ。
***void DestroyWindow(DrawingHandle) [#b434d93a]
WindowやScreenを破棄する。
-DrawingHandle:破棄する窓かScreenのハンドル。
***void MoveWindow(WindowHandle, x, y) [#j04112b3]
窓を移動する
-WindowHandle:移動する窓のハンドル
-x:窓の左上の移動先のX座標(スクリーン座標)
-y:窓の左上の移動先のY座標(スクリーン座標)
***int,int GetWindowPos(WindowHandle) [#f9b835a4]
窓の位置を取得する
-return1:現在の窓の左上のX座標(スクリーン座標)
-return2:現在の窓の左上のY座標(スクリーン座標)
***void ResizeWindow(WindowHandle, width, height) [#zdac28ee]
Windowのサイズを変更する。クライアント領域がwidth*heightになるようにリサイズするので、フチなどを含めた実際のWindowのサイズはコレよりも大きくなる
-WindowHandle:リサイズする窓のハンドル
-width:リサイズ後の窓の幅
-height:リサイズ後の窓の幅
***int,int GetWindowSize(DrawingHandle) [#q61a5aaf]
WindowやScreenのサイズを取得する。取得するのはクライアント領域のサイズなので、Windowの場合は実際のサイズはコレよりも大きくなる
DrawingHandle:サイズを取得する窓のハンドル
return1:DrawingHandleの横幅
return2:DrawingHandleの高さ
***int GetWindowType(DrawingHandle) [#ud6d03cc]
任意のDrawingHandleがWindowなのかScreenなのかを取得する
DrawingHandle:調べるDrawingHandle
return:Windowならば0、Screenならば1
***int IsWindowActive(WindowHandle) [#jee369ef]
任意のWindowHandleがフォーカスされているかを取得する。
return:フォーカスされていれば1,それ以外なら0
***void ActivateWindow(WindowHandle) [#q0b5c6f3]
任意のWindowHandleをフォーカスする
***int, int GetMousePosition(WindowHandle) [#m755cce9]
任意のWindowHandleの左上隅から見たマウス座標を取得する
return:マウス座標X、マウス座標Ys
**GDIHandle操作関係 [#kdc7371e]
***GDIHandle CreatePen(color, width) [#vfe0ee5c]
ペンを作成する
-color:ペンの色
-width:ペンの幅
-return:作成したペンのGDIHandle
***GDIHandle CreateBrush(color) [#lde66357]
ブラシを作成する
-color:ブラシの色
-return:作成したブラシのGDIHandle
***GDIHandle CreateFont(size, isBold) [#n640060f]
フォントを作成する。フォントに色情報はないのでDrawTextで指定すること
-size:フォントサイズ
-isBold:0/falseなら太字にしない、1/trueなら太字にする
-return:作成したフォントのGDIHandle
***GDIHandle SelectObject(DrawingHandle, GDIHandle) [#qbe08662]
WindowやScreenに対して、描画に用いるGDIHandleを指定する
-DrawingHandle:ハンドルを指定するWindow,Screen
-GDIHandle:新たに設定するGDIHandle
-return:以前設定されていたGDIHandle
***void DeleteObject(GDIHandle) [#z8066b9d]
指定したGDIHandleを削除する。DrawingHandleに対して設定したまま削除してもOK
-GDIHandle:削除するGDIHandle
***int GetGDIHandleType(GDIHandle) [#qf27f878]
GDIHandleの種別(ペンなのかブラシなのか)を取得する
-GDIHandle:調べるGDIHandle
-return:ペンならば0,ブラシならば1,フォントならば2
***int GetTextWidth(DrawingHandle, string) [#n83c548e]
指定したDrawingHandleにおいてstringの文字列の横幅を取得する
-DrawingHandle:調べるDrawingHanlde
-string:幅を調べる文字列
-return:文字列の幅
***int GetTextHeight(DrawingHandle, string) [#cec2c6df]
指定したDrawingHandleにおいてstringの文字列の高さを取得する
-DrawingHandle:調べるDrawingHanlde
-string:高さを調べる文字列
-return:文字列の高さ
***int GetGDIHandleCount() [#zedc25f2]
現在作られているGDIHandleの総数を取得する。デバッグ用に。
return:現在作られているGDIHandleの総数
**描画関係 [#c1d887d5]
***総則 [#m9710413]
描画関数の座標系はDrawingHandleのクライアント座標、すなわちWindowであればタイトルやフチを含まない部分の左上、Screenであれば左上を原点とする。
***void DrawRectangle(DrawingHandle, x, y, width, height) [#y9683760]
長方形の縁を描画(塗りつぶさない)
DrawingHandle:描画先のDrawingHandle
x:長方形の左端の座標
y:長方形の上端の座標
width:長方形の幅
height:長方形の高さ
***void FillRectangle(DrawingHandle, x, y, width, height) [#uf9b9754]
長方形を塗りつぶし描画(縁はない)
DrawingHandle:描画先のDrawingHandle
x:長方形の左端の座標
y:長方形の上端の座標
width:長方形の幅
height:長方形の高さ
***void DrawText(DrawingHandle, x, y, color, string) [#xec73a23]
文字列を描画
DrawingHandle:描画先のDrawingHandle
x:文字列の左端のX座標
y:文字列の上端のY座標
color:文字列の色
string:表示する文字列
***void MoveTo(DrawingHandle, x, y) [#pb4fd0a9]
線描画のカレントポジションを移動する(_MOVE2Dの同類)
DrawingHandle:描画先のDrawingHandle
x:移動先のX座標
y:移動先のY座標
***void LineTo(DrawingHandle, x, y) [#kff688c5]
直線を描画するとともにカレントポジションを移動する(_LINE2Dの同類)
DrawingHandle:描画先のDrawingHandle
x:描画先のX座標
y:描画先のY座標
***void BitBlt(WindowHandle, ScreenHandle, x, y) [#h788f02f]
指定したWindowHandleの(x,y)の位置にScreenHandleの内容を転送する