void onメインウィンドウ生成後(引数型 arg, 返値型 ret)

public static void onメインウィンドウ生成後(引数型 arg, 返値型 ret)
{
    nint hWind = (nint)(int)arg["ウィンドウハンドル"];
}

arg

  • ウィンドウハンドル : int型

    将星録のゲームウィンドウのハンドル。ウィンドウを移動させたりサイズを変更したりといったことに利用できる。

ret

なし

タイミング

  • 将星録のゲームのウィンドウが生成される直後に呼び出される。
    (内部的なインスタンスが確定された後、まだ実際に画面には表示されていない段階)

一般的用途

  • ここはゲーム起動における初期化処理をするのに適している
  • 後でウィンドウの位置やサイズを変更するため、ウィンドウハンドルを控えておくのに適している

例① 初期化に適している

static int 変数1 = 0;
static string 変数2 = "";
public static void onメインウィンドウ生成後(引数型 arg, 返値型 ret)
{
    変数1 = 100;
    変数2 = "メインウィンドウ生成後";
}

例② ウィンドウハンドルの取得

public static void onメインウィンドウ生成後(引数型 arg, 返値型 ret)
{
    デバッグ出力("メインウィンドウ生成後");
    IntPtr hWnd = (IntPtr)(int)arg["ウィンドウハンドル"];
}
  

例③ ウィンドウハンドルを控えておき、オープニングムービー時に1600x900にリサイズして画面中央に表示

[DllImport("user32.dll", SetLastError = true)]
public static extern bool MoveWindow(IntPtr hWnd, int x, int y, int nWidth, int nHeight, bool bRepaint);

static nint hWnd = 0;

public static void onメインウィンドウ生成後(引数型 arg, 返値型 ret)
{
    デバッグ出力("メインウィンドウ生成後");

    // 後でウィンドウの位置やサイズを変更するために控えておく
    hWnd = (nint)(int)arg["ウィンドウハンドル"];
}

public static void onムービー要求時(引数型 arg, 返値型 ret)
{
  // オープニングムービーが再生されるタイミングで、ウィンドウサイズを変更する。
  string ファイル名 = (string)arg["ファイル名"];
  if (ファイル名.ToLower().Contains("opening.avi")) {
      int width = 1600;
      int height = 900;

      // 画面の縦横サイズとウィンドウの縦横サイズから、移動先の位置を求める
      int newX = (Screen.PrimaryScreen.WorkingArea.Width - width) / 2;
      int newY = (Screen.PrimaryScreen.WorkingArea.Height - height) / 2;

      MoveWindow(hWnd, newX, newY, width, height, true);
  }
}