昨日に続きオスロアドベント3日目。もうひとシリーズ書きたい。
はじめに
恋声を大幅に拡張するアプリを作ってて、声のセットを変える機能をつけました。ただ、ゲーム中だと今、どの声に変換されているか確認できず、友人とオカマ声でボイチャをするやらかしをしたのでこのオーバーレイ作りました。完成版のアプリはこちらです。オーバーレイ自体は意外と簡単でした。
オーバーレイ的なFormをつくる
方針
オーバーレイは、以下のような特徴があります。それらを順番に実現します。
- 拡大・縮小とかの枠がない
- タスクバーに表示されない
- 必要なところは半透明、必要ないところは透明
- 指定の位置にある
- 常に画面の前面にある
- クリックは透過する
オーバレイをさせるFormをつくる
こんな感じのオーバーレイさせるフォームを作ります。(フォームデザイナで作ってもいいですが、そこまですることもないだろということでプログラムonlyです)
using System.Drawing;
using System.Windows.Forms;
using System.Drawing.Text;
using System;
class OverlayForm : Form
{
public Label lblMessage;
public OverlayForm() {
//表示する部品を作る
lblMessage = new Label
{
Anchor = AnchorStyles.Left,
Text = "オーバーレイふぉーむ",
AutoSize = true
};
//フォームの左上に設定
lblMessage.Left = 0;
lblMessage.Top = 0;
//フォームに表示
Controls.Add(lblMessage);
}
}
これでオーバーレイふぉーむ
と書かれたWindows Formが表示されます。
拡大・縮小の枠を消す
これ以降、全てOverlayForm(){}
の中に書いてあるものだと思ってください。
FormBorderStyle = FormBorderStyle.None;
これで拡大・縮小の枠が消えます。
タスクバーに表示させない
ShowInTaskbar = false;
これでタスクバーに表示されなくなります。
半透明にする
TransparencyKey = BackColor;
Opacity = 0.7;
TransparencyKey
で背景色の設定を、Opacity
で色のあるところの透明度を設定しています。
画面上の位置指定
StartPosition = FormStartPosition.Manual;
Location = new Point(0, 0);
StartPlsition = FormStartPosition.Manual;
で画面上の位置を指定できるようにして、Location
で位置指定します。
常に画面の前面に出す
TopMost = true;
これで常に画面の前面になるはずです。ただし、FPSゲームなどではチート対策等で無効になる場合があるので気を付けてください。(ゲームでも使える方法があったら教えてほしい)
クリックを透過させる
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x00000020;
return cp;
}
}
こいつだけ少し特殊で、OverlayForm(){}
の外側です。何をしているのかというと、Formを作るときに属性を追加しています。その結果、このFormにはクリックできず、下のフォームにクリックが移ります。
おわりに
オーバーレイってかっこいいけど悪用しないでね。
←back
Windowsで他プロセスを操る