今更ですがソース公開します。v2.5のをGitHubとかじゃなくてそのまんまzipに固めてアップしておきます
コードくっそ汚いですが。。。画像のプレビューとか設定保存のとことかスマートにできると思うんですけどそこは素人なので許して
ダウンロード
とは言ってもソース見ても分かりにくいと思います。正直自分が見てもわかりにくいです。
なので重要な部分だけここに載せておきます
まず仕組みですが、新規にフォームを作成してその新規フォームの設定とかを色々変えています。
フォームを起動するときはこんな感じで呼び出す
あんまり自分でも何やってるかわからない。
忘れたけど多分ここら辺のリンクから参考にしてます。
クロスヘアを作るときはこんな感じ
GraphicsPath クラス (System.Drawing.Drawing2D) - MSDN - Microsoft
※この記事はもうちょっと修正予定です。とりあえず暫定的に公開します。
コードくっそ汚いですが。。。画像のプレビューとか設定保存のとことかスマートにできると思うんですけどそこは素人なので許して
ダウンロード
とは言ってもソース見ても分かりにくいと思います。正直自分が見てもわかりにくいです。
なので重要な部分だけここに載せておきます
まず仕組みですが、新規にフォームを作成してその新規フォームの設定とかを色々変えています。
Public Const HWND_TOPMOST = (-1) Public Const SWP_NOSIZE = &H1& Public Const SWP_NOMOVE = &H2& Public Const GWL_EXSTYLE As Long = (-20) Public Const WS_EX_LAYERED = &H80000 Public Const WS_EX_TRANSPARENT = &H20 Private Const LWA_COLORKEY = &H1 Public Const LWA_ALPHA = &H2 Const TOPMOST_FLAGS As UInteger = (SWP_NOSIZE Or SWP_NOMOVE) <DllImport("user32.dll", SetLastError:=True)> _ Private Shared Function SetWindowPos(ByVal hWnd As IntPtr, _ ByVal hWndInsertAfter As IntPtr, _ ByVal X As Integer, _ ByVal Y As Integer, _ ByVal cx As Integer, _ ByVal cy As Integer, _ ByVal uFlags As UInteger) As Boolean End Function <DllImport("user32.dll")> _ Private Shared Function SetWindowLong(hWnd As IntPtr, _ <MarshalAs(UnmanagedType.I4)> nIndex As Integer, _ dwNewLong As IntPtr) As Integer End Function <DllImport("user32.dll", SetLastError:=True)> _ Private Shared Function GetWindowLong(hWnd As IntPtr, _ <MarshalAs(UnmanagedType.I4)> nIndex As Integer) As Integer End Function <DllImport("user32.dll")> _ Private Shared Function SetLayeredWindowAttributes(hwnd As IntPtr, crKey As UInteger, bAlpha As Byte, dwFlags As UInteger) As Boolean End Function↑で宣言
フォームを起動するときはこんな感じで呼び出す
SetLayeredWindowAttributes(Form2.Handle, 0, 255, LWA_ALPHA) SetWindowPos(Form2.Handle, HWND_TOPMOST, 0, 0, 0, 0, _ TOPMOST_FLAGS)
あんまり自分でも何やってるかわからない。
忘れたけど多分ここら辺のリンクから参考にしてます。
Visual Basic Develop Tips -ウィンドウを半透明にする
http://www.alato.ne.jp/kazu-/vb/tip22.htm
クロスヘアを作るときはこんな感じ
Dim points() As Point = _ {New Point(17, 16), _ New Point(2, 17), _ New Point(17, 18), _ New Point(17, 32), _ New Point(18, 18), _ New Point(32, 17), _ New Point(18, 16), _ New Point(17, 2)} Dim types() As Byte = _ {Drawing.Drawing2D.PathPointType.Line, _ Drawing.Drawing2D.PathPointType.Line, _ Drawing.Drawing2D.PathPointType.Line, _ Drawing.Drawing2D.PathPointType.Line, _ Drawing.Drawing2D.PathPointType.Line, _ Drawing.Drawing2D.PathPointType.Line, _ Drawing.Drawing2D.PathPointType.Line, _ Drawing.Drawing2D.PathPointType.Line} 'GraphicsPathの作成 Dim path As New Drawing2D.GraphicsPath(points, types) Form2.Region = New Region(path)GraphicsPathの説明はこの辺から
GraphicsPath クラス (System.Drawing.Drawing2D) - MSDN - Microsoft
パスを使って図形を描く: .NET Tips: C#, VB.NET - DOBON.NET
※この記事はもうちょっと修正予定です。とりあえず暫定的に公開します。