Max環境 では、独自のウィンドウを持ち、オペレーティングシステムのイベント処理のできるオブジェクトを作ることができます。通常、これらのツールはユーザインターフェイスを書く仕事を容易にしてくれます。また、これらの管理も、パッチャーウィンドウ内に置くユーザインターフェイスオブジェクトを書くよりも多少シンプルです。
ウィンドウがMax オブジェクトが内部に持っているデータの「エディタ」である場合、オブジェクトが dblclick メッセージを受け取ったときにそのウィンドウを開かなければなりません(Max はノーマルオブジェクトに対して、シングルクリックメッセージを送信しません)。
Max は様々なオペレーティングシステムの様々なイベントに応答して、エクスターナルオブジェクトにメッセージを送信します。これらのメッセージについては、この章で後ほど詳しく説明します。このメッセージはMacintosh と Windows XP の両方のプラットフォームで動作します。これは、ウィンドウを持ったエクスターナルをクロスプラットフォームで開発するための手助けとなります
Macintosh 上では、オブジェクトは window メッセージへの応答が可能です。これは、Max が、内部にある個々のMacintosh ウィンドウレコードにそれへの参照を組み込むためです。Max はウィンドウ内でMacintosh イベントを感知すると、そのウィンドウの「持ち主」であるオブジェクトに適切なメッセージを送信します。
Windows XP 上では、ウィンドウを動作させるために2つの選択肢があります。QuickTime SDK for Windows を使うことによって、Macintosh スタイルのQuickDraw API を用いて描画することができるようになります。あるいは、Max からウィンドウのためのHWNDを取り出すことによって、ネイティブなWin32 API を呼び出し、これを使用することができます。最も柔軟に行なうためには、WINDPROC のサブクラスであるこのHWNDを使って、Max が提供するデフォルトの動作をオーバーライドすることができます。この方法についての詳細は、この章の終わりで説明します。
Max で独自のウィンドウを持つオブジェクトを動作させるためには、2つのことを知っておく必要があります。
A_CANT, 0
です。これは、Max がメッセージのアーギュメントの型をチェックできない、そしてチェックすべきでないということを指定します。(これらのメッセージは、型チェックを行われる t_atom として渡されることがないためです)ウィンドウメッセージは、割り込みレベルでオブジェクトに送られることは決してありません。これは覚えておいて下さい。
基本的なウィンドウ構造体は t_wind と呼ばれるものです。これらの1つは、wind_new を呼び出すことによって、あなたの生成関数で(または、ウィンドウをオープンしたいときに)作ります。wind_new に渡される、t_wind 構造体の定義とフラグは、インクルードファイル ext_wind.h で宣言されています。ウィンドウが作られ、表示されると、その持ち主であるMax オブジェクトにメッセージが送られるようになります。
ウィンドウシステムから送られるメッセージのリストは、次の項で示しています。個々のケースにおいて、現在のGrafPort をウィンドウにセットする呼び出しの内部ですべての動作を組み立てなければなりません。そして、描画が完了したときにそれをリストアしなければなりません。Macintosh では、wind_setport を使ってポートをセットし、windo_restoreport を使って古いポートをリストアします。Windows XP では、QuickTime SDK を使う場合、Max にエクスポートされた関数 XQT_wind_wetport を使ってポートをセットし、ポートのリストアには、 qtmlclient.lib からリンクされた XQT_SetPort を使います。
下の例は wind_new の呼び出しで返される t_windopub へのポインタがオブジェクトの m_winds フィールドに保存されているものと仮定しています。
Macintosh 上、あるいはネイティブな WIN32 を使った場合の描画ルーチンは次のようになります。
GrafPtr sp; if (sp == wind_setport(myobject->m_wind)) { /* ここで何かを描画します */ wind_restorepot(sp) }
Windows XP で、QuickTime SDK を使った場合は、次のようになります。
if (sp = XQT_wind_setport(myobject->m_wind)) { /* ここで何かを描画します */ XQT_SetPort(sp); }
Max オブジェクトでウィンドウを実装するために、次のようなメッセージが提供されています。重要であると思われる順に紹介します。
click |
||
click メッセージは、ウィンドウでマウスダウン(mouse-down)イベントが生じた場合に送られます。 | ||
バインディング |
||
addmess (myobject_click, "click", A_CANT, 0); | ||
宣言 |
||
void myobject_click (t_myobject *x, Point pt, short dblClick, short modifiers); | ||
pt | ローカル座標での、マウスクリックの位置 | |
dblClick | ダブルクリックなら0以外、そうでなければ0 | |
modifiers | このマウスダウンイベントによって GetNextEvent から返されるMacOS イベントレコードの modifiers フィールド。shift,option,command,capslock,control キーが押されていたかどうかを示します。 | |
click メソッドでは、指定された場所でマウスダウンイベントを処理しなければなりません。関数 wind_defaultscroll は、オブジェクトがスクロールバーを含むイベントを処理する場合の手助けとなります。また、はマウスのドラッグ操作を処理するためには、wind_drag を使われなければなりません。これらの2つの関数については後述します。 |
update |
||
update メッセージは、ウィンドウが再描画された場合に送られます。 | ||
バインディング |
||
addmess (myobject_update, "update", A_CANT, 0); | ||
宣言 |
||
void myobject_update (t_myobject *x); | ||
このメッセージは、ウィンドウの内容を描画することによって生じる update イベントに応答する必要があることを示します。ウィンドウにスクロールバーやグロウアイコンがある場合、Maxはスクロールバーの描画(Max はウィンドウ上で DrawContols を呼び出します)や、ウィンドウのグロウアイコンの処理を引き受けてくれます。また、ウィンドウ内部にある、影響を受ける領域の消去も行なってくれます。これは覚えておいて下さい。 |
key |
||
key メッセージは、ウィンドウが最前面に表示されていて、ユーザがキーを押した場合に送られます。 | ||
バインディング |
||
addmess (myobject_key, "key", A_CANT, 0); | ||
宣言 |
||
void myobject_key (t_myobject *x, short key, short modifiers short keycode); | ||
key | 押されたキーのアスキーコード | |
modifiers | このキーイベントによって、GetNextEvent から返されるMacOS イベントレコードの modifiers フィールド。shift,option,command,capslock,control キーが押されていたかどうかを示します。 |
|
keycode | 押されたキーの、Macintosh キーコード | |
このメッセージは、キーダウン、またはオートキーイベントに応答することを可能にします。Windows XP では、キーイベントは Macintosh の 修飾キーとキーコードに読みかえられます。詳細は、関連した Macintosh の開発ドキュメントを参照して下さい。 |
cursor |
||
cursor メッセージは、カーソルの調節や、ウィンドウ内にマウスがある場合にその位置を反映して表示させることを可能にします。 | ||
バインディング |
||
addmess (myobject_cursor, "cursor", A_CANT, 0); | ||
宣言 |
||
void myobject_cursor (t_myobject *x, Point pt,short modifiers, short active); | ||
pt | ローカル座標での、現在のマウスの位置 | |
modifiers | このキーイベントによって、GetNextEventから返されるMacOS イベントレコードの modifiers フィールド。shift,option,command,capslock,control キーが押されていたかどうかを示します | |
active | ウィンドウがアクティブ(最前面)でなければ0、アクティブならば0以外の値になります。 | |
cursor メソッドは、カーソルがウィンドウ上にある間は、繰り返し呼び出されます。マウスの位置はローカル座標として pt に渡されます。また、修飾キーの状態やウィンドウのアクティブ/非アクティブの状態は、 modifiers および active にそれぞれ報告されます。一般的に、ウィンドウはカーソルがテキストエディットのフィールドのような特定の場所にある場合に、その位置を調節するために cursor メソッドを使います。カーソルをセットするためには、wind_setcursor を使うことができます。 パッチャーはまた、ウィンドウ内でテキストが編集されている場合にTEIdleを呼び出したり、マウスがインレットやアウトレットの上に来たときにそれをハイライトさせたりするために cursor メソッドを利用しています。cursor 関数は、マウスが押し下げられ、wind_drag を呼び出している間でも呼び出しを受けるという点に注意して下さい。 |
cursorout |
||
cursorout メッセージは、カーソルがウィンドウの境界の長方形の領域から離れた場合に応答して、カーソルやウィンドウの表示を調節することを可能にします。 | ||
バインディング |
||
addmess (myobject_cursor, "cursorout", A_CANT, 0); | ||
宣言 |
||
void myobject_cursorout (t_myobject *x, Point pt, short modifiers, short active); | ||
pt | ウィンドウを離れた時点でのマウス位置のローカル座標 | |
modifiers | このマウスダウンイベントによって、GetNextEvent から返されるMacOS イベントレコードの modifiers フィールド。shift,option,command,capslock,control キーが押されていたかどうかを示します | |
active | ウィンドウがアクティブ(最前面)でなければ0、アクティブならば0以外の値になります。 | |
cursolout メソッドはカーソルがウィンドウの中から外へ出た時に一度呼び出されます。ローカル座標で表されるマウス位置が pt に渡され、修飾キーの状態とウィンドウのアクティブ/非アクティブの状態が、それぞれ modifiers と active を通して報告されます。一般的に、ウィンドウは、カーソルがウィンドウの境界から出たときに cursolout メソッドを使ってそれを調整します。カーソルは wind_setcursol を使ってセットすることができます。 |
widle |
||
widdle メッセージによって、カーソルがアイドルタイムの間にオブジェクトのウィンドウ内を移動したかとうかを知ることができます。 | ||
バインディング |
||
addmess (myobject_widle, "widle", A_CANT, 0); | ||
宣言 |
||
void myobject_widle (t_myobject *x); | ||
cursor メッセージにメッセージがバインドされている場合、これを使う必要はないでしょう。 |
activate |
||
説明 | ||
バインディング |
||
activate メッセージを利用すると、ウィンドウが最前面になったときや、最前面でなくなったときに、ウィンドウの外観を変えることが可能になります。 | ||
宣言 |
||
void myobject_activate (t_myobject *x, short active); | ||
active | ウィンドウがアクティブになれば0以外、アクティブでなくなれば0になります。 | |
一般的な activate イベントへの応答は active の値に応じて、選択している何かをハイライトしたり、ハイライトを止めたりすることです。Max はスクロールバーの使用可/不可を受け持ちます。 |
close |
||
ウィンドウを閉じなければならない場合に、close メッセージが送られます。 | ||
バインディング |
||
addmess (myobject_close, "close", A_CANT, 0); | ||
宣言 |
||
void myobject_close (t_myobject *x); | ||
このメッセージはユーザがウィンドウを閉じたい場合にオブジェクトに送られます。ウィンドウを閉じることによってオブジェクトのデータが破壊されないようにオブジェクトを書いて下さい。それによって、ユーザは何かを失うのではないかという心配をせずにウィンドウを閉じることができます。後々、wind_new で他のウィンドウを作成するつもりならば、freeobject(これは CloseWindow を実行します)を呼び出して、ウィンドウのメモリを開放します。そうでない場合、次のように t_syswind に対してsyswindow_hide を使う必要があります。。 syswindow_hide(wind_syswind(myobject->m_wind))); Max は単に、ユーザがウィンドウを閉じたがっているということを報告するに過ぎません。このメッセージに対して、好きな方法で応答することができますが、もしウィンドウを開いたままにしておくと、ユーザが終了するときに問題が起きるかもしれません。 |
scroll |
||
スクロールバーが動かされて、ウィンドウの内容をスクロールする必要がある場合に、scroll メッセージが送られます。 | ||
バインディング |
||
addmess (myobject_scroll, "scroll", A_CANT, 0); | ||
宣言 |
||
void myobject_scroll (myObject *x); | ||
Max はユーザがスクロールバーを動かすと、このルーチンを呼び出します。このとき、t_wind の w_xoffset(水平方向)と w_yoffset(垂直方向)フィールドをチェックして、以前に保存した値と比較し、それに従ってウィンドウをスクロールする必要があります。 |
vis and invis |
||
vis メッセージはウィンドウが表示されるようになった瞬間に送られ、invis メッセージはウィンドウが非表示になった瞬間に送られます。 | ||
バインディング |
||
addmess (myobject_vis, "vis", A_CANT, 0); |
||
宣言 |
||
void myobject_vis (t_myobject *x); |
||
これらのメッセージに応答して、適当な動作を行なうことができます。例えば、vis メッセージを受け取ったときにウィンドウのユーザインターフェイスを初期化することなどがあります。 |
oksize |
||
oksize メッセージは、ウィンドウの新しいサイズを確認するために送られます。 | ||
バインディング |
||
addmess (myobject_oksize, "oksize", A_CANT, 0); | ||
宣言 |
||
void myObject_oksize (t_myobject *x, short *hsize,short *vsize); | ||
hsize | 提示されたウィンドウの横幅のサイズ(水平サイズ)。横幅を修正しようと思う場合は、新しいhsizeの値を返します。そうでない場合は、そのまま変更せずにおきます。 | |
vsize | 提示されたウィンドウの高さのサイズ(垂直サイズ)。高さを修正しようと思う場合は、新しいvsizeの値を返します。そうでない場合は、そのまま変更せずにおきます。 | |
oksize メソッドによって、実際にウィンドウのサイズが変更される前に、サイズをチェックし、できるかぎりの調整を行なうことができます。(下記の wsize メッセージを参照)。提示されたサイズはhsize と vsize に渡されます。これらを好きな値にセットすることができます。ウィンドウが「セル」を持っていて、ウィンドウのサイズがセルの数の正確な倍数であって欲しい場合には、oksize メッセージを利用したいと思うでしょう。下で述べるように、明らかに、oksize メッセージは wsize メッセージより前に送られます。 |
wsize |
||
ウィンドウのサイズが変更されたときに、wsize メッセージが送られます。 | ||
バインディング |
||
addmess (myobject_wsize, "wsize", A_CANT, 0); | ||
宣言 |
||
void myObject_wsize (t_myobject *x, short hsize,short vsize); | ||
hsize | ウィンドウの新しい横幅(水平サイズ) | |
vsize | ウィンドウの新しい高さ(垂直サイズ) | |
ユーザがウィンドウのサイズを変更したときに、wsize メッセージを通して報告されます。新しいウィンドウの大きさは、hsize と vsise として渡されます。ウィンドウにスクロールバーがある場合、それらを動かし、サイズ変更し、再描画する必要があります。 |
otclick |
||
ユーザがウィンドウのタイトルバー上で [option]+クリックしたときに、otclickメッセージが送られます。 | ||
バインディング |
||
addmess (myobject_otclick, "otclick", A_CANT, 0); | ||
宣言 |
||
void myObject_otclick (MyObject *x); | ||
otclick は 「Option-Title-Click」を表しています。例えば、パッチャーウィンドウがサブパッチウィンドウから、ポップアップメニューによって親ウィンドウに戻ることができるのは、このメソッドを実装しているためです。otclick メソッドを実装していない場合は、[option]+クリックを行なった際に、ユーザが期待するような通常のドラッグ動作を実行します。 |
mouseup |
||
ウィンドウ内でマウスアップイベントが生じた時に、mouseup メッセージが贈られます。 | ||
バインディング |
||
addmess (myobject_mouseup, "mouseup", A_CANT, 0); | ||
宣言 |
||
void myobject_mouseup (t_myobject *x, Point where,short modifiers); | ||
where | ローカル座標で表された、マウスアップイベントが生じた位置 | |
modifiers | このマウスアップイベントによって、GetNextEventから返されるMacOS イベントレコードの modifiers フィールド。shift、option、command、,capslock、,control キーが押されていたかどうかを示します |
これらのメッセージは、ウィンドウがアクティブウィンドウの状態にある時に、ユーザがメニューからアイテム(項目)を選択した場合に送られます。
chkmenu |
||
chkmenu メッセージは、メニューの表示や使用を行なうためのイベントが発生したとき、メニューが描画される直前に送られます。chkmenu メッセージは、指定された標準のメニューアイテムの有効または無効を指定するために送られます。 | ||
バインディング |
||
addmess (myobject_chkmenu, "chkmenu", A_CANT, 0); | ||
宣言 |
||
void myobject_chkmenu (t_myobject *x, t_menuinfo *mi); | ||
mi | メニューのアイテムを使用可にする必要がある場合に値を入れる t_menuinfo 構造体デフォルトではすべてのアイテムは有効になっています。後述するこの構造体の記述を参照して下さい。 |
|
ウィンドウがアクティブウィンドウになると、Max はウィンドウのメニューを、そのウィンドウが応答できるアイテムに基づいたものに更新します。あなたは、すべて0の値に初期化された Menuinfo 構造体へのポインタを渡されます。もし、ユーザが特定のメニューアイテムを選んだ時にメッセージを送って欲しいときは、Menuinfo構造体の該当のアイテムに1をセットし、そのアイテムが使用可能になるようにします。Menuinfo 構造体は short による整数の配列で、ext_menu.h で宣言されています。次に示すものは、あなたが利用できるメニューコマンドです。 |
Field | Message | Commands | |
i_cut | cut,copy, clr | Cut, Copy, and Clear?Edit menu | |
i_paste | paste | Paste?Edit menu | |
i_dup | dup | Duplicate?Edit menu | |
i_save | saveto | Save and Save As…?File menu | |
i_pastepic | pastepic | Paste Picture?Edit menu | |
i_edit | edit | Edit?View menu | |
i_range | dialog | Get Info…?Object menu | |
i_lineup | lineup | Align?Max menu | |
i_fixwidth | fixwidth | Fix Width?Object menu | |
i_size | font | A Size in the Font menu | |
i_hide | hide | Hide on Lock?Object menu | |
i_show | show | Show on Lock?Object menu | |
i_selectall | selectall | Select All?Edit menu | |
i_find | find | Find…?Edit menu | |
i_findagain | find | Find Again?Edit menu | |
i_replace | find | Replace?Edit menu | |
i_print | Print…?File menu | ||
i_font | font | A Font in the Font menu | |
i_color | wcolor | Color… ?Object menu | |
i_savecoll | savecoll | Save As Collective…?File menu | |
i_noclick | noclick | Ignore Click?Object menu | |
i_respond | respondtoclick | Respond to Click?Object menu | |
i_front | bfront | Bring to Front?Object menu | |
i_back | back | Send to Back?Object menu | |
i_lockbg | lockbg | Lock Background?View menu | |
i_showbg | showbg | Show Background?View menu | |
i_includebg | includebg | Include in Background?Object menu | |
i_excludebg | excludebg | Rm. from Background?Object menu | |
i_coloritem | N/A current color | item?Object menu | |
i_setorigin | setorigin | Set Origin?View menu | |
i_restoreorigin | restoreorigin | Restore Origin?View menu | |
i_name | wobjectname | Name…?Object menu | |
i_showconnections | showconnections | Show/Hide Connections?View menu | |
i_showpals | howpalette Show/Hide | Object Palette?View menu | |
i_pastereplace | pastereplace | Paste Replace?Edit menu |
上に掲げたメニューメッセージのうち、saveto, font, savecoll,showconnections, showpalette, find の各メッセージは、オブジェクトへの通常のポインタ以外に追加のアーギュメントを持っています。これらのメッセージについての詳細は、注目すべきこれらのメニューメッセージと共に以下で述べています。
undo |
||
ユーザが Edit メニューからUndo を選択した場合に、undo メッセージが送られます。 | ||
バインディング |
||
addmess (myobject_undo, "undo", A_CANT, 0); | ||
宣言 |
||
void myobject_undo (t_myobject *x); | ||
このメッセージを受け取るためには、Undo メニューアイテムを明確に有効にし、テキストをセットしなければなりません。これによって 後述するようなundoitem メッセージに応答することができます。メニューアイテムのテキストをあなた自身でセットして以降、オブジェクトが undoitem メッセージを受け取った場合、それを把握することはあなたの責任になります。あなたがundo または redo を実行しなければならないとしても、これはそれほど難しいことではありません。undoitem メソッドを実装しない場合、あなたのウィンドウがアクティブウィンドウになった時に、Undo メニューアイテムは常に無効になります。 |
undoitem |
||
undoitem メッセージによって Edit メニューの Undo アイテムを使用可にし、そのテキストを設定することができます。 | ||
バインディング |
||
addmess (myobject_undoitem, "undoitem", A_CANT, 0); | ||
宣言 |
||
void myobject_undoitem (t_myobject *x, char *text); | ||
text | Edit メニューの Undo アイテムのテキストの内容をセットするためのC文字列。文字列を空に設定(text[0]=0)すると、Undoアイテムは無効になります。この場合、テキストはUndoです。 |
pastepic |
||
ユーザが Edit メニューから Paste Picture を選択した場合に、pastepic メッセージが送られます。 | ||
バインディング |
||
addmess (myobject_pastepic, "pastepic", A_CANT, 0); | ||
宣言 |
||
void myobject_pastepic (t_myobject *x); | ||
ピクチャデータは、まだクリップボードにあります。あなたの責任は、そのデータを(Mac OS の GetScrap ルーチンを使って)コピーし、それを使って何かの処理を行なうことです。 |
saveto |
||
ユーザが File メニューから Save または Save As... を選択した場合に、saveto メッセージが送られます。 | ||
バインディング |
||
addmess (myobject_saveto, "saveto", A_CANT, 0); | ||
宣言 |
||
void myobject_saveto (t_myobject *x, char *filename, short path); | ||
filename | データを書き込むファイル名を表すC文字列。これは作られる必要があります。 | |
path PathID | ファイルの場所を指定します。 | |
あなたのウィンドウがアクティブウィンドウであるときに、ユーザが File メニューからSave As... を選択した場合、ユーザが標準ファイル保存ダイアログボックスでファイル名とボリュームを指定した後、このメッセージに応答します。この時点ではファイルは開かれもしませんし、作られもしません。あなたはファイルを作り、開き、書き出し、閉じなければなりません。wind_settitle を使ってウィンドウのタイトルを変えたいとも思うかも知れませんが、これは、wind_new に WKEEPT ビットをオンにした引数 flags を渡していない限り、自動的に行なわれます。 ユーザが File メニューから Save を選んだ場合、Max は既にファイル名とボリュームを知らされていて、あなたの saveto メソッドが呼び出されます。 あなたのウィンドウ内に保存しておく価値のあるものがない場合、このメソッドを実装する必要はありません。この場合、chkmenu メソッドで saveto を有効にしないで下さい。 |
dialog |
||
ユーザが Max メニューから Get Info... を選択した場合に、dialog メッセージが送られます。 | ||
バインディング |
||
addmess (myobject_dialog, "dialog", A_CANT, 0); | ||
宣言 |
||
void myobject_dialog (t_myobject *x); | ||
dialog メソッドはパッチャーウィンドウ内で、選択されたパッチャーオブジェクトに info メッセージを送るために使われます。既に述べたように、あなたのオブジェクトはinfo メッセージに応答することができますが、これは通常、内部の値をセットしたダイアログボックスを用意することによって行なうことができます。 dialog メッセージはあなたのウィンドウがアクティブウィンドウで、ユーザが Maxメニューから Get Info... を選択した場合に送られます。あなたのメソッドはオブジェクトの info メソッドと同じダイアログを表示することができます。あるいは、あなたのウィンドウが選択可能な項目を持っている場合には、その選択された項目によってダイアログを設定することも可能です。 |
font |
||
font メッセージは、ユーザが Font メニューから a new font または font size を選択した場合に送られます | ||
バインディング |
||
addmess (myobject_font, "font", A_CANT, 0); | ||
宣言 |
||
void myobject_font (myObject *x, short size, short fontnum); | ||
size | 変更があれば、新しいフォントサイズ。そうでない場合は -1。 | |
fontnum | メニューから1つ選択された場合は、新しいフォントのナンバ。そうでない場合は-1。 | |
ユーザがウィンドウのデフォルトフォントを変更した場合、または Size メニューを選んでサイズを変更した後に、オブジェクトはこのメッセージを受け取ります。カレントのサイズは、t_wind の w_fontsize フィールドをチェックすることで確認できます。デフォルトのフォントは w_realfont フィールドに保存されています。font メッセージから直接フォントとサイズの情報を取得するためには、メソッドは上のように宣言されなければなりません。fontnum あるいは size のどちらかが -1 の場合、その値はユーザによって変更されていないため、ウィンドウで選択されている、あるいは選択されていないテキストについて、その特徴を変えるべきではありません。 chkmenu メッセージに応答する際に、フォントメニューが表示されたときに特定のフォントまたはサイズがチェックされるように指定することができます。これは、i_font と i_size に値を設定して、あなたのウィンドウで使われるカレントの値とすることによって可能になります。 |
help |
||
help メッセージは、ユーザが Max メニューから Help... を選択した場合に送られます。 | ||
バインディング |
||
addmess (myobject_help, "help", A_CANT, 0); | ||
宣言 |
||
void myobject_help (t_myobject *x); | ||
あなたの help メソッドはヘルプファイルを開くか、何か他のヘルプとなるような動作によって応答することができます。 |
find |
||
find メッセージは、ユーザが Find ダイアログを使用している場合に送られます。 | ||
バインディング |
||
addmess (myobject_find, "find", A_CANT, 0); | ||
宣言 |
||
void myobject_find (myObject *x, void *search, void *replace); | ||
replace | ウィンドウの中で現在選択されている内容の代わりを指定している Binbuf。replace が 0 ならば、検索を実行するだけです。 |
|
このメッセージは、あなたのウィンドウがアクティブでユーザがFind ダイアログの Find をクリックした後、あるいは、Edit メニューから Find Again や Replace from が選択された後に送られます。もし、あなたが何かを「検索する」場合には、おそらく、次のchkmenu メッセージを受け取ったときに、Find Again...アイテムを有効にしておく必要があるでしょう。 search と replace の両方が0以外ならば、最初の置換のときにウィンドウ内で選択されていたものを、もう一度検索します。検索、あるいは置換の内容をテキストに変換したい時は、binbuf_totext を使います。 |
okclose |
||||||||||||
okclose メッセージは、標準の「閉じる前に保存しますか?」というアラートが表示される前に送られます。 | ||||||||||||
バインディング |
||||||||||||
addmess (myobject_okclose, "okclose", A_CANT, 0); | ||||||||||||
宣言 |
||||||||||||
void myobject_okclose (t_myobject *x, char *prompt, short *result); | ||||||||||||
prompt | 標準の体裁を変更する場合は、この"Save changes?" アラートのテキストのC文字列を修正します。 | |||||||||||
result | 下に述べるような、ウィンドウを閉じる時に行なわれる動作を示す0から4までのコード。 | |||||||||||
このメッセージを実装することにより、オブジェクトは、ウィンドウの w_dirty フィールドが0以外の場合に、このアラートを表示する標準の動作以上のことを行うことができるようになります。例えば、prompt を修正してアラートの文字を変更することができます。また、アラートをスキップするために特定の値をresult に返したり、ウィンドウを(ウィンドウを所有するオブジェクトが開放されない限り)まったく閉じることができないようにしたりすることができます。後にあげた動作は、もしあなた自身のSave Changes アラートを表示したい場合には適切でしょう。 result がとることのできる値は次のようなものです。
|
print メッセージは、ユーザがFile メニューから Print... を選択し、標準のプリントダイアログが表示された時に送られます。 | ||
バインディング |
||
addmess (myobject_print, "print", A_CANT, 0); | ||
宣言 |
||
void myobject_print (t_myobject *x, THPrint hPrint, GrafPtr yourPort, short *result); | ||
hPrint | InsideMacintoshに記載されている標準の Mac OS の THPrint | |
yourPort | ウィンドウのグラフポート(GrafPort)。印刷中はこのポートには描画できませんが、ポート矩形についてなどのポート情報にアクセスすることは便利かもしれません。 | |
result | 印刷中にエラーに遭遇した場合は、ここに0以外の値をセットします。これは、メソッドが呼び出される時には0にセットしておきます。 | |
ユーザが File メニューから Print... を選択し、標準のプリントダイアログが表示されて、OK がクリックされた時に、このメッセージがウィンドウに送られます。ユーザが印刷したいと思うドキュメントのそれぞれのコピーごとに print メッセージを受け取ります。 このメソッドでは、あなたは、ウィンドウを「ドキュメント」として印刷します。エラーが発生すると、result に0以外の値がセットされます。 次のものは、ウィンドウを1ページに印刷するためのいくつかのシンプルなコードの概要です。これは、ウィンドウサイズが用紙サイズより大きくても心配ありません。プリントマネージャの呼び出しはページの印刷の前後に必要である点に注意して下さい。 void myobject_print (myObject *x, THPrint hp, GrafPtr port, short *res) { TPPrPort printPort; Rect printRect; printPort = PrOpenDoc(hp,0L,0L); SetPort(printPort); TextFont(port->txFont); TextSize(port->txSize); printRect = (**hp).prInfo.rPage; PrOpenPage(printPort,0L); /* ここでウィンドウを印刷します */ PrClosePage(printPort); PrCloseDoc(printPort); *res = 0; } タイプされたコマンドピリオドをチェックするようなコードをを加えた、より良いものにしようと思うかもしれません。このケースでは、ドキュメントの追加のコピーが印刷されないように、result が0以外の値にセットされなければなりません。 |
以下にあげる関数は、オブジェクトのウィンドウと共に使うためのものです。これらのルーチンのほとんどのものに用いられる t_wind 構造体は、次のようなものです。
typedef struct wind { t object w_ob // object header short w_x1; // location of window short w_x2; short w_y1; short w_y2; short w_xoffset; // scroll offsets short w_yoffset; short w_scrollgrain; // scroll grain in pixels short w_refcount; // reference count char w_vis; // visible char w_titled; // has a title char w_grow; // has a grow region char w_close; // has a close region char w_scrollx; // has an x scroll region char w_scrolly; // has a y scroll region> char w_dirty; // dirty flag (can save) char w_scratch; // no complain on close char w_bin; / binary save char w_font; // text font char w_fsize; // font size char w_fontindex; // old font index field (unused) WindowRecord w_wind; // Mac OS window data (not always // present, need to check w_local) short w_vsmax; // vertical scroll max ControlHandle w_vscroll; // vertical scroll bar short w_hsmax; // horizontal scroll max ControlHandle w_hscroll; // horizontal scroll bar void *w_assoc; // associated object void *(*(w_idle))(); // window idle function (unused) char w_name[80]; // filename = window title short w_vol; // Path ID file location short w_proc; // window proc id (0 = normal) char w_keeptitle; // set window title on saveas char w_canon; // slot in canonical list of // locations char w_silentgrow; // don't draw grow icon but allow // grow char w_color;// try to make color window if you // can char w_bits; // number of bits (i.e. 2 for // b&w) char w_divscrollx; // divided horiz scroll bar char w_zoom; // has zoom rect short w_realfont; // real font index short w_hsleft; // left of scroll bar Rect w_oldsize; // internal use short w_oldproc; // internal use char w_select; // always select on click char w_frame; // internal use long w_flags; // internal use WindowPtr w_wptr;// contains pre-existing window or // ptr to w_wind long w_local; // is OS window stored in w_wind? Rect w_growbounds; // optional grow bounds for a // b window char w_helper; // is part of Extras menu } t_wind;
wind_new |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
新規にウィンドウを作る場合に、wind_new を使います。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
t_wind *wind_new (void *assoc, short left, short top, short right, short bottom, short flags); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
assoc | このウィンドウを所有するオブジェクト。たいていの場合、これはあなたのオブジェクトへのポインタになります。オブジェクトに複数のウィンドウを持たせる場合に、ウィンドウメッセージを受け取るための、媒介となるオブジェクトを作りたいと思うかもしれません。この方法を使えば、ウィンドウを区別することができます。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
left | ウィンドウの左端のグローバル座標。 left と top が 0 の場合、ウィンドウは、他のウィンドウとの関係で、順序良く「規範的な」場所に置かれます。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
top | ウィンドウの上端のグローバル座標 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
bottom | ウィンドウの下端のグローバル座標 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
right | ウィンドウの右端のグローバル座標 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
flags | ウィンドウの動作とアピアランスを決定するための定数ビットマップ(下記のリストを参照) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
wind_new は新しい t_wind オブジェクトを返します。可視フラグ WVIS がセットされない場合、Mac OS や Windows 上での実際のウィンドウは作られません。 |
wind_vis |
||
ウィンドウを可視にしたり、最前面に表示させる場合に、wind_vis を使います。 | ||
void wind_vis (t_wind *window); | ||
window | 可視にされるウィンドウ | |
wind_vis はウィンドウを見えるようにします。既にウィンドウが可視の状態の場合、wind_vis はSelectWindow を呼び出してウィンドウをアクティブウィンドウにします。MacOS ウィンドウを可視にしたい場合は、syswindow_show を使います。 |
wind_invis |
||
ウィンドウを非表示にする場合に、wind_invis を使います。 | ||
void wind_invis (t_wind *window); | ||
window | 非表示にされるウィンドウ | |
ウィンドウが可視の場合、wind_invis はウィンドウを隠します。ウィンドウが可視でない場合には、wind_invis は何もしません。wind_invis が実際の OS のウィンドウオブジェクトを破棄してしまうことを覚えておいてください。もし、OS による破棄をせずに、ウィンドウを残したまま見えないようにしたい時には、代わりに wind_syswind の戻り値でsyswindow_hide を使って下さい。wind_invis が Wind 構造体によって占められているメモリを実際に開放するわけではないという点にも注意が必要です。wind_invis を使った後、 wind_vis を呼び出すと、Mac OS または Windows XP の別のウィンドウを作ります。 |
wind_setgrowbounds |
||
選択されたウィンドウの境界の最小値と最大値を制限する場合に、wind_setgrowbounds を使います。 | ||
void wind_setgrowbounds(t_wind *window, short minx,short miny, short maxx, short maxy); | ||
window | 境界を設定されるウィンドウ | |
minx | ウィンドウの最小の幅 | |
miny | ウィンドウの最小の高さ | |
maxx | ウィンドウの最大の幅 | |
maxy | ウィンドウの最大の高さ |
wind_defaultscroll |
||
スクロールバーでマウスクリックがあったかどうかを見て、クリックがあればデフォルトの方法でそれを処理する場合に、wind_defaultscroll を使います。 | ||
void wind_defaultscroll (t_wind *window, Point pt, short pagesize); | ||
window | マウスがクリックされるウィンドウ | |
pt | ローカル座標で表されたマウスクリックの場所。あなたのclick メソッドに渡されます。 | |
pagesize | ユーザがスクロールバーでページングによって上げ下げした場合の、スクロールバーの増加、減少の値。ページングはバーのつまみ部分の外側に点在する部分をクリックすることです。pagesize に0を渡すと、デフォルトのページングルーチンが使われます、この場合ユーザがバーに点在する領域をクリックすると、スクロールバーの最大、または最小で表される値の場所へ進みます。 | |
ウィンドウがスクロールバーを持っている場合、click メソッドの中で wind_defaultscroll を使います。これは、pt がスクロールバー内かどうかをチェックします。スクロールバー内の場合、wind_defalutscroll はデフォルトのスクロールバールーチンを実行し、1を返します。そうでない場合、wind_defaultscroll は0を返します。 |
wind_dirty |
||
ウィンドウが保存されていないデータを持っているかどうかを記録するために、wind_dirty を使います。 | ||
void wind_dirty (t_wind *window); | ||
window | dirty ビットをセットされるウィンドウ. | |
wind_dirty はウィンドウの dirty ビットをセットします。これにより、ウィンドウが閉じられる際に、ユーザに対し、変更したデータを保存するかどうかを尋ねます。ユーザが保存したい場合には、あなたのsaveto メソッドが呼び出されます。 |
wind_drag |
||||||||||||
ウィンドウ内のマウスドラッグを追跡するために、wind_drag を使います。 | ||||||||||||
void wind_drag (method dragfun, void *arg, Point start); | ||||||||||||
dragfun | カーソルおよびマウスボタンの追跡処理を扱うプロシージャ。定義は下記を参照して下さい。 | |||||||||||
arg | ドラッグプロシージャに渡される引数。通常、これはあなたのオブジェクトになります。 | |||||||||||
start | ドラッグが開始された場所。たいていの場合、あなたのclick メソッドの引数 Point として渡されます。 | |||||||||||
wind_drag の使用によって、通常次のような形の典型的なループプログラムを置き換えます。 do { GetMouse(&pt); /* do something here to track the mouse*/ } while (StillDown()); マウスが動くたびに、呼び出したい関数(dragfun)へのポインタを渡します。これによって、dragfun は指定された引数 arg 、マウスの位置、マウスボタンが押されているかどうか、という情報と共に呼び出されます。マウスボタンが上がると、drag 関数はもう一度呼び出されます。drag 関数は次のように宣言する必要があります。
上で述べたように、wind_drag は通常マウスが移動した場合にだけ、あなたのdrag 関数を呼び出します。マウスが移動していなくてもdrag 関数を呼び出したい場合には、wind_dragの前に、wind_nowoorymove を呼び出します。drag ルーチンはマウスボタンが離された時にもう一度呼び出されます(そして、button が0になります)。ドラッグルーチンは、描画がカレントのグラフポートで行なわれたかどうか確認するために、 wind_setport (下記を参照)を使う必要があります。 。 |
wind_inhscroll |
||
Point がウィンドウの水平スクロールバーにあるかどうかをテストするために、wind_inhscroll を使います。 | ||
short wind_inhscroll (t_wind *window, Point pt); | ||
window | テストされる、スクロールバーを持ったウィンドウ | |
pt | マウスクリック位置 | |
wind_inhscroll は、pt が水平スクロールバー内にあれば true を、そうでなければ false を返します。これは、クリックが水平スクロールバーで行なわれたものか、垂直スクロールバーで行なわれたものかを識別し、それによって wind_defaultscroll に異なった引数 pagesize を渡すために用いられます。 |
wind_noworrymove |
||
wind_drag の次の呼び出しをセットするために、wind_noworrymove を使います。これによってカーソルが変化しない場合でも drag 関数が呼び出されます。 | ||
void wind_noworrymove (void); | ||
より詳しい情報は、wind_drag の解説を参照して下さい。 |
wind_setcursor |
|||||||||||||||||||||||||||||||||||||
カーソルを変更する場合に、wind_setcursor を使います。 | |||||||||||||||||||||||||||||||||||||
void wind_setcursor (short curs); | |||||||||||||||||||||||||||||||||||||
curs | 次のような定義済みカーソルのうちの1つ | ||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||
wind_setcursor はカーソルが以前どのようにセットされていたかを追跡します。そのため、カーソルに何か変化があると、wind_setcursorに以前の引数をセットしようとしても、新しいカーソルを見ることができないでしょう。これの解決法は、希望するカーソル定数で呼び出す前に、wind_setcursor(0) を呼び出しておくことです。カーソルを独自のカーソルにセットすることを、Max に対して直接知らせる場合には、 wind_setcursor(-1) を使います。 |
wind_setport |
||
カレントのグラフポートをウィンドウにセットする場合に、wind_setport を使います。 | ||
GrafPtr wind_setport (t_wind *window); | ||
window | カレントのグラフポートをセットされるウィンドウ | |
カレントのグラフポートをウィンドウに結びつけられたポートにセットする便利な関数です。成功すると、関数から以前のグラフポートへのポインタが返されます。そうでない場合、wind_setport は NIL を返します。ウィンドウでの描画やイベント処理の前に、この関数を呼び出さなければなりません。そして、終了後に関数の戻り値に対して wind_restoreport を呼び出します。次はその例です。 GrafPtr sp; if (sp = wind_setport(myWind)) { /* ここで描画します */ wind_restoreport(sp); } 注:QuickTime SDK for Windows XP を使う場合、この代わりにXQT_wind_setport を使わなければなりません。(後述) |
XQT_wind_setport (QuickTime SDK を使用したWindows XPの場合のみ使用) |
||
カレントのグラフポートをウィンドウにセットする場合に、XQT_wind_setport を使います。 | ||
GrafPtr XQT_wind_setport(t_wind *window); | ||
window | カレントグラフポートにセットされるウィンドウ | |
QuickTime SDK QuickDraw グラフポートをウィンドウに結び付けられたポートにセットするために便利な関数です。成功すると、関数から以前のグラフポートへのポインタが返されます。そうでない場合、 XQT_wind_setport は NIL を返します。ウィンドウでの描画やイベント処理の前に、この関数を呼び出さなければなりません。そして、終了後に関数の戻り値に対して XQT_SetPort を呼び出します。次はその例です。 GrafPtr sp; if (sp = XQT_wind_setport(myWind)) { /* ここで描画します */ XQT_SetPort(sp); } |
wind_syswind |
||
t_wind から t_syswind を取り出す場合に、wind_syswind を使います。 | ||
t_syswind *wind_syswind(t_wind *window); | ||
window | 問い合わせを受けるウィンドウ | |
返された t_syswind の使い方は、下のSyswindow API セクションを参照して下さい。 |
wind_gethwnd (Windows XP のみ) |
||
Windows に特有の関数を使用するエクスターナルを書いている時に、Max の t_wind に結びつけられた、Windows 特有の HWND ウィンドウハンドルを取得する場合に、wind_gethwnd を使います。 | ||
HWND wind_gethwnd (t_wind *window); | ||
window | 問い合わせを受けるWindows のウィンドウハンドル | |
与えられた HWND に結び付けられた Max の t_wind がない場合、関数は NIL を返します。 |
wind_installidletask |
||||||||
ウィンドウにアイドルタイムのタスクをインストールするために、wind_installidletask を使います。 | ||||||||
void *wind_installidletask (t_wind *w, method m, void *myobj, long flags); | ||||||||
w | アイドルタスクと結び付けられたウィンドウ | |||||||
method | タスクを取り扱うハンドル | |||||||
myobj | あなたのオブジェクトのインスタンスへのポインタ | |||||||
flags | アイドルタスクが呼び出された時のためのオプション。引数 flags は以下のようなオブションからなっています。
|
|||||||
wind_installidletask はあなたのオブジェクトのウィンドウのために、アイドルタスクをインストールし、タスクへのポインタを返します。タスクは、あなたが提供するメソッドを呼び出します。これは、flags で示されますが、widle 関数か、ウィンドウのcursor関数、または、両方です。ウィンドウのcursor関数内のタスクを呼び出す場合、タスク関数は 引数 Point も受け取ります。あなたは、おそらくオブジェクト生成関数の中でこの関数を呼び出す必要があるでしょう。そして、オブジェクトのインスタンス消滅関数(free 関数)内で wind_removeidletask によってタスクを取り除く必要があるでしょう。 |
wind_removeidletask |
||
wind_installidletask でインストールしたアイドルタイムタスクを取り除く場合に、wind_removeidletask を使います。 | ||
void *wind_removeidletask (t_wind *w, void *task); | ||
task | wind_installidletaskによって返されるタスクへのポインタ | |
wind_removeidletask は、渡されたタスクを取り除きます。 |
wind_setsmax |
||
ウィンドウのスクロールバーの最大値をセットするために、wind_setsmax を使います。 | ||
void wind_setsmax (t_wind *window, short hmax, short vmax); | ||
window | スクロールバーを持っているウィンドウ | |
hmax | 水平スクロールバーの新しい最大値 | |
vmax | 垂直スクロールバーの新しい最大値 | |
スクロールバーの最小値はいつも0です。この関数はウィンドウが可視の場合でも、不可視の場合でも使うことができます。 |
wind_setsval |
||
ウィンドウのスクロールバーの値をセットするために、wind_setsval を使います。 | ||
void wind_setsval (t_wind *window, short hval, short vval); | ||
window | スクロールバーを持っているウィンドウ | |
hval | 水平スクロールバーの新しい値 | |
vval | 垂直スクロールバーの新しい値 | |
この関数はウィンドウが可視の場合でも、不可視の場合でも使うことができます。 |
wind_settitle |
||
ウィンドウのタイトルを変更する場合に、wind_settitle を使います。 | ||
void wind_settitle (t_wind *window, char *title, short brackets); | ||
window | タイトルを変更されるウィンドウ(訳注:原文はWindow containing the scroll barsとなっています)) | |
title | 新しいタイトルのC文字列 | |
brackets | 0以外の場合, タイトルは各カッコの中に表示されます。 | |
この関数は、ウィンドウが可視の場合でも、不可視の場合でも使うことができます。 |
wind_setundo |
||
Edit メニューのUndo項目のテキストをセットする場合に、wind_setundo を使います。 | ||
void wind_setundo (char *string, short undoable); | ||
string | Undo 項目の新しいテキスト (C文字列). | |
undoable | 0以外の場合, Undo 項目は使用可になります、そうでない場合は使用不可です。 |
wind_filename |
||
ウィンドウのタイトルと保存されるファイル名を変更する場合に、wind_filename を使います。 | ||
void wind_filename (t_wind *window, char *filename, short path, short bin); | ||
window | ファイル名が変更されるウィンドウ | |
filename | 新しいファイル名 (C string). | |
path | ファイルの場所を指定する、新しいパス ID | |
bin | 新しいデフォルトのファイルフォーマット設定。bin が0の場合、Save As ダイアログで Text が選択されます。bin が2の場合、Normal が選択されます。bin の値 1 はMax の「旧フォーマット」バイナリファイルのために使われていました。このフォーマットは現在サポートされていません。bin が -1 の場合、Save As ダイアログで、ユーザにファイルフォーマットの選択が表示されません。 | |
この関数はウィンドウのタイトルを変更し、それをファイル名とボリューム名として与えます。これは、ユーザがFileメニューから Save を選択した場合、 savetoメッセージへの引数として自動的に渡されます。 |
wind_setbin |
||
ウィンドウのファイルフォーマット設定を変更する場合に、wind_setbin を使います。 | ||
void wind_setbin (t_wind *queenie, short way); | ||
queenie | ファイルフォーマット設定を変更されるウィンドウ | |
way | 新しいデフォルトのファイルフォーマット設定、way が 0 の場合、Save As ダイアログでテキストが選択されます。way が 2 の場合、Normal が選ばれます。way(訳注:原文では bin となっています)の値 1 は、Max の「旧フォーマット」バイナリファイルの場合に使用されていましたが、このフォーマットは現在サポートされていません。way が -1 の場合、Save As ダイアログで、ユーザにファイルフォーマットの選択が表示されません。 |
wind_close |
||
ウィンドウを閉じる処理を開始する場合に、wind_close を使います。 | ||
short wind_close (t_wind *window); | ||
window | 閉じられるウィンドウ。 | |
通常、この関数の動作はユーザがクローズボックスをクリックするか、File メニューから Close を選択した場合に行われます。wind_closeはまず、ウィンドウのデータが変更されたかどうかをチェックします。変更されていて、ウィンドウの w_scratch フィールドがセットされていない場合、Save Changes ダイアログが表示され、希望する処理が選ばれます。wind_close が -1 を返した場合、ユーザがSave Changes ダイアログ、もしくはファイル保存ダイアログでキャンセルを選択してダイアログを抜け、ウィンドウが閉じられていないことを表します。 wind_close が 0 を返した場合、ウィンドウが閉じられたことを表します。この場合3つの状況が考えられます。1つめは、保存すべきデータが存在しない場合、2つめは、ユーザが変更を保存するよう指定し、正しく保存が行われた場合、3つめは、ユーザが変更を保存しない指定を行った場合です。 オブジェクトのインスタンス消滅関数(free 間数)が呼び出されたとき、オブジェクトのウィンドウ内のデータを保存するかどうかをユーザに尋ねたいとき、この関数と、次に述べる wind_nocancel とを組み合わせて使用する場合もあるでしょう。 |
wind_nocancel |
||
wind_nocancel を wind_close の前に使うことによって、ウィンドウが閉じられる際にユーザが“Save changes?”ダイアログをキャンセルできないようにします | ||
short wind_nocancel (void); | ||
wind_nocancel は呼び出された直後に表示される“Save changes?”ダイアログにだけ影響を及ぼします。 |
Syswindow API は、ウィンドウを管理するための多くのユーテリティ関数を提供します。これは、いくつかのMacintosh ウィンドウマネージャAPIと比較的よく似ています。Mac OS9 では、t_syswind ポインタは、実際に Macintosh の WindowPtr でしたが、Mac OSX と Windows XP では ブラックボックス(不透明な型)になっています。このことは、これらのルーチンと他のウィンドウルーチンを混用することは、もはや安全ではないということを意味しています。Max の t_wind オブジェクトのための、関連した t_syswind の値は、wind_syswind 関数を呼び出す事によって得られます。
syswindow_inlist |
||
ウィンドウを、Max のウィンドウリストから検索するために、syswindow_inlist を使います | ||
Boolean syswindow_inlist (t_syswind *wnd); | ||
wnd | t_syswind 構造体へのポインタ | |
ウィンドウが、Max のウィンドウリストに存在すれば TRUE を、そうでない場合は FALSE を返します。 |
syswindow_isvisible |
||
ウィンドウが可視の状態であるかどうかを調べるために、 syswindow_isvisible を使います。 (訳注:原文は“Use syswindow_isvisible to find if a window is in the Maxwindow list.”となっています) |
||
Boolean syswindow_isvisible (t_syswind *wnd); | ||
wnd | t_syswind 構造体へのポインタ | |
ウィンドウが可視ならば TRUE を、そうでない場合は FALSE を返します。 |
syswindow_isfloating |
||
ウィンドウがフロートウィンドウかどうかを調べるために、syswindow_isfloating を使います。(訳注:原文は“Use syswindow_isvisible to find if a window is in the Maxwindow list.”となっています) |
||
Boolean syswindow_isfloating (t_syswind *wnd); | ||
wnd | t_syswind 構造体へのポインタ | |
ウィンドウがフロートウィンドウならば TRUE を、そうでない場合は FALSE を返します。 |
syswindow_hide |
||
ウィンドウ非表示にするために、syswindow_hideを使います。 | ||
void syswindow_hide (t_syswind *wnd); | ||
wnd | t_syswind 構造体へのポインタ | |
指定されたウィンドウを隠します。 |
syswindow_show |
||
非表示にされているウィンドウを表示させるために、syswindow_show を使います。 | ||
void syswindow_show (t_syswind *wnd); | ||
wnd | t_syswind 構造体へのポインタ | |
指定されたウィンドウを表示させます。 |
syswindow_move |
||
選択されたウィンドウを移動させるために、syswindow_move を使います。 | ||
void syswindow_move(t_syswind *wnd, long x, long y,Boolean front); | ||
wnd | 移動させるウィンドウ | |
x | スクリーン上の水平位置 | |
y | スクリーン上の垂直位置 | |
front | ウィンドウを前面に移動させるかどうかのフラグ. | |
この関数は、与えられたウィンドウを、ピクセル単位で(x,y) 座標で定義されるスクリーン位置に移動させます。front フラグが0以外の場合、ウィンドウは前面に表示されるでしょう。Windows XP では、ウィンドウがフロートウィンドウでない場合はMax アプリケーションの MDI フレームウィンドウクライアント領域を基準とした位置に移動され、フローティングウィンドウの場合はスクリーン座標を基準として移動される点に注意して下さい。 |
syswindow_size |
||
ウィンドウのサイズを変更する場合に、syswindow_size を使います. | ||
void syswindow_size (t_syswind *wnd, long width, long height, Boolean update); | ||
wnd | サイズを変更されるウィンドウ | |
width | ウィンドウの新しい幅 | |
height | ウィンドウの新しい高さ | |
update | ウィンドウ更新のフラグ | |
この関数は与えられたウィンドウを、ピクセル値で与えられた height とwidth にサイズ変更します。update (訳注:原文は front になっています)フラグが0以外の場合、ウィンドウは続けて更新されます。 |
syswindow_wind |
||
t_syswind ポインタと結びつけられた t_wind 構造体を取得するために、syswindow_wind を使います。 | ||
struct wind *syswindow_wind(t_syswind *wnd); | ||
wnd | 問い合わせを受けるウィンドウ | |
t_syswind ポインタと結びつけられたMax の t_wind オブジェクトへのポインタを返します。 |
Windows XP では、Max は 全ての基本的な機能を取り扱うために、WNDPROC の実装を提供します。しかし、Max が扱わないメッセージを受けたり、Max が提供するデフォルトの実装を変更したいと思うかも知れません。ウィンドウのサブクラスを作ることによって、これが可能になります。ウィンドウのサブクラスの作成法に関する完全な説明は、このドキュメントの範囲を超えています。しかし、いくつかのガイドラインを提供します。