信ネタがなくても日記に書けることを……と考えて始めてみた趣味の開発日記。
そんなに苦労しないだろうとナメてたら、先日書いたように起動画面の見た目は何とかサックリできたものの、挙動部分の作り込みに入って異様に四苦八苦(>_<)
メモなのでちょっと専門的なことも書くと、画面の処理をフックしてタイトルなしの画面(非矩形なので)を動かしたりする細工をしているのですが、この細工で画面全体をタイトル扱いにする必要があるわけです。(↓こんな感じ(笑))

        Const WM_NCHITTEST As Integer = &H84        'クライアント領域にあるよー
        Const WM_NCRBUTTONDOWN As Integer = &HA4    '右クリックだよー
        Const WM_NCLBUTTONDOWN As Short = &HA1      '左クリックだよー
        Const WM_NCLBUTTONDBLCLK As Integer = &HA3  'ダブルクリックらすい
        Const HTCLIENT As Integer = 1
        Const HTCAPTION As Integer = 2

        MyBase.WndProc(m)                           '←これでマウスの状態を拾う

        'イベント処理
        Select Case m.Msg
            Case WM_NCHITTEST
                '画面上は全部タイトル扱い
                If m.Result.ToInt32() = HTCLIENT Then m.Result = New IntPtr(HTCAPTION)

            Case WM_NCRBUTTONDOWN
                '右クリックしたらコンテキストメニュー出してね
                Me.cmsMenu.Show(Me, Me.PointToClient(Cursor.Position))

            Case WM_NCLBUTTONDBLCLK
                'ダブルクリックしたら…(内緒)…してね(中略)Exit Sub
        End Select

        MyBase.WndProc(m)                           '←これで従来の処理に制御を戻す

ところがこれだと最初にマウスの状態を拾って制御するのでダブルクリックしたらウインドウのタイトル部分思って全画面化してしまうのです(^-^;(右クリックは問題なす)
マウスで左ボタンを押している時はタイトルでいいけど、ダブルクリックだとタイトルじゃない扱いでないと困る……左ボタンを押したときとダブルクリックで挙動を変えるあたりで、う〜ん(@_@)、といった感じ。


んがしかし、その辺りが解決しないまま信onで遊んでいるとき、キランとひらめきが降りてきましたですよ。ボタン関連の判定を済ませて、ダブルクリックじゃなければタイトル扱いすればいいんだ、と。
んで改良したのが↓

        Const WM_NCHITTEST As Integer = &H84        'クライアント領域にあるよー
        Const WM_NCRBUTTONDOWN As Integer = &HA4    '右クリックだよー
        Const WM_NCLBUTTONDOWN As Short = &HA1      '左クリックだよー
        Const WM_NCLBUTTONDBLCLK As Integer = &HA3  'ダブルクリックらすい
        Const HTCLIENT As Integer = 1
        Const HTCAPTION As Integer = 2

        'イベント処理
        Select Case m.Msg
            Case WM_NCRBUTTONDOWN
                '右クリックしたらコンテキストメニュー出してね
                Me.cmsMenu.Show(Me, Me.PointToClient(Cursor.Position))

            Case WM_NCLBUTTONDBLCLK
                'ダブルクリックしたら…(内緒)…してね(中略)Exit Sub

            Case Else
                MyBase.WndProc(m)       '←マウスの状態を拾いなおす
                '画面上は全部タイトル扱い
                If m.Msg = WM_NCHITTEST And m.Result.ToInt32() = HTCLIENT Then
                    m.Result = New IntPtr(HTCAPTION)
                    Exit Sub
                End If
        End Select

        MyBase.WndProc(m)                           '←これで従来の処理に制御を戻す

気づいてしまえば何ということはないんですが、一人で煮詰まっているとこんな簡単な事もひらめかないんですね(^-^;
ということで問題は無事に解決。ツール開発も次のステップに進むことができました。
いやぁ気分転換ってほんっとに大事ですね(^-^)b