Windows 構造体は、Windows OS のユーザ インタフェース要素にアクセスするためのメソッドを提供します。
特に指定のない限り、これらのメソッドは、3ds Max 2008 以降で使用可能です。
従来、Avguard 拡張機能として提供されていた機能です。
このメソッドは、3ds Max メイン ウィンドウの HWND を整数(Pointer 値)で返します。
このメソッドは、MS Windows デスクトップの HWND を整数(Pointer 値)で返します。
windows.sendMessage <int HWND> <int message> <int messageParameter1> <int messageParameter2>
最初の引数で指定された HWND に Win32 メッセージを送信します。
2 番目の引数はメッセージ ID です。通常は 16 進数で指定します。
3 番目と 4 番目の引数はメッセージのパラメータです。パラメータを指定しない場合は、プレースホルダとして 0 を渡します。
windows.postMessage <int HWND> <int message> <int messageParameter1> <int messageParameter2>
引数の値を渡しながら、Windows の PostMessage 関数を呼び出します。
windows.processPostedMessages()
Windows の保留中のメッセージを取得して 3ds Max に送信するメッセージ ポンプを実行します。
このメソッドを呼び出すと、保留されているメッセージがすべて処理されます。これを MAXScript ループ内部で使用すると、時間のかかる計算によって 3ds Max の応答がなくなる場合に Windows 7で発生する「ホワイト スクリーン」を防ぐことができます。
このメソッドは、指定された HWND の再帰的な子ウィンドウの配列を返します。
指定された HWND が 0 である場合は、 (再帰的にではなく) 最上位のデスクトップ ウィンドウのみを返します。
親 HWND が指定されている場合は、直接の親が指定されたウィンドウであるウィンドウのみを返します。
HWND として #max が指定されている場合は、3ds Max メイン ウィンドウに関連付けられている HWND が使用されます。
指定された HWND が存在しない場合は、 undefined 値が返されます。
配列の各要素はウィンドウに対応し、8 要素の配列が含まれます(3ds Max 2008 では最初の 5 要素のみ)。
これらの配列の各要素は、ウィンドウに関する次の情報を表します。
2: 親の HWND。所有者は除く(GetAncestor(hWnd,GA_PARENT))
3: 親または所有者の HWND。子のウィンドウの場合、戻り値は親のウィンドウのハンドル。最上位のウィンドウの場合、戻り値は所有者のウィンドウのハンドル。(GetParent(hWnd))
4: クラス名の文字列(GetClassName(hWnd, className, bufSize)) - 最大 255 文字
5: ウィンドウ テキストの文字列(GetWindowText(hWnd, windowText, bufSize)) - 最大 255 文字
6: 所有者の HWND (GetWindow(hWnd,GW_OWNER))
7: ルート ウィンドウの HWND。親のウィンドウを順番にたどって特定されるルート ウィンドウ(GetAncestor(hWnd,GA_ROOT))
8: 所有ルート ウィンドウの HWND。GetParent で返される親および所有者のウィンドウを順番にたどって特定される所有ルート ウィンドウ(GetAncestor(hWnd,GA_ROOTOWNER))
このメソッドは、指定された HWND を親とし、特定のウィンドウ テキストを持った子ウィンドウを返します。子ウィンドウは再帰的に検索されます。
指定された HWND が 0 である場合は、(再帰的にではなく) 最上位のデスクトップ ウィンドウのみを返します。
親 HWND が指定されている場合は、直接の親が指定されたウィンドウであるウィンドウのみを検索します。
HWND として #max が指定されている場合は、3ds Max メイン ウィンドウに関連付けられている HWND が使用されます。
指定された HWND が存在しない場合は、 undefined 値が返されます。
指定されたテキストを持った子ウィンドウが見つからない場合は、 undefined が返されます。
マッチするものが見つかると、8 要素の配列が返されます。要素の意味の詳細については、上記の windows.getChildrenHWND() メソッドの説明を参照してください。
windows.getHWNDData {<int HWND>|#max}
HWND として #max が指定されている場合は、3ds Max メイン ウィンドウに関連付けられている HWND が使用されます。
指定された HWND が存在しない場合は、undefined 値が返されます。
マッチするものが見つかると、8 要素の配列が返されます。要素の意味の詳細については、上記の windows.getChildrenHWND() メソッドの説明を参照してください。
3ds Max 2011 以降では、ロールアウトやロールアウト コントロールで読み取り専用の .hwnd プロパティが公開されることに注意してください。
ロールアウトの場合は、このプロパティに、そのロールアウトに関連付けられたウィンドウの HWND が格納されます。ロールアウトが開いていない場合は 0 になります。
ロールアウト ユーザ インタフェース コントロールの場合は、そのロールアウトを含むロールアウトのウィンドウの HWND の配列が格納されます。ロールアウトが開いていない場合は空の配列になります。
windows.setWindowPos <int HWND> <int x> <int y> <int width> <int height> <bool repaint>
HWND によって指定されたウィンドウの位置を、2 番目と 3 番目の引数によって指定された X および Y 座標に設定します。
また、ウィンドウの幅および高さを 4 番目と 5 番目の引数として渡された値に設定します。
6 番目の引数を True に設定すると、そのウィンドウも再描画されます。
windows.setWindowPos <int HWND> <Box2 rect> <bool repaint>
HWND によって指定されたウィンドウの位置を、2 番目の Box2 引数によって与えられた座標およびサイズに設定します。
3 番目の引数を True に設定すると、そのウィンドウも再描画されます。
<Box2 rect>windows.getWindowPos <int HWND>
HWND 引数によって指定されたウィンドウの左上隅の位置、および幅と高さを返します。
<Point2>windows.clientToScreen <int HWND> <int x> <int y>
<Point2>windows.clientToScreen <int HWND> <Point2 clientCoord>
座標を、最初の引数によって指定されたウィンドウのクライアント領域から、画面の左上隅からの相対座標に変換します。
<Point2>windows.screenToClient <int HWND> <int x> <int y>
<Point2>windows.screenToClient <int HWND> <Point2 screenCoord>
座標を、左上隅を基準にした画面領域から、最初の引数によって指定されたウィンドウのクライアント領域に変換します。
windows.snapshot {<int_HWND>|#max} captureAlpha:<bool> gammaCorrect:<bool> captureScreenPixels:<bool>
指定された HWND のビットマップ スナップショットを作成します。
指定された HWND が 0 の場合、Windows デスクトップのスナップ ショットが取得されます。
引数が #max に設定されている場合は、3ds Max メイン ウィンドウに関連付けられている HWND が使用されます。
captureAlpha : オプション キーワード引数が指定され、True に設定されている場合、ビューポートアルファもキャプチャされます。指定されないまたは False に設定された場合、返されたイメージには、アルファおよび RGB チャンネルのみが含まれます。
gammaCorrect: オプション キーワード引数が指定されないまたは True に設定されている場合、ガンマ補正が返されたビットマップ値に対して実行されます。False に設定した場合は、ガンマ補正は実行されません。
captureScreenPixels: オプションキーワード引数が True に設定されている場合、ウィンドウのデスクトップ ピクセルが指定したウィンドウの領域内にキャプチャされます。
「Viewport.GetViewportDib()」および「gw.getViewportDib()」も参照してください。
windows.addChild <int_HWND> <int_HWND>
最初の引数として渡された HWND を持つ ActiveX コントロールを、2 番目の引数として渡された HWND を持つウィンドウの子にします。
最初の引数に MAXScript のコントロールやロールアウトを指定することはできません。必ず ActiveX コントロールを指定する必要があります。
ActiveX コントロールは 3ds Max 9 以降では廃止されたと見なされることから、このメソッドも廃止と見なされることがあります。