Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
WM_SHOWWINDOWはいつ発生するのでしょうか?
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=9583#CommentId14362
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
mabzou
 (社会人)
投稿日時
2010/3/13 23:13:40
極々稀にWM_SHOWWINDOWメッセージが2回来てwndproc内で
落ちる事が有ります。
ソフトではこれを受け取れるようにwndprocを
記述すべきなのでしょうか?
Windowsもしくは、vbのバグなのでしょうか?
作りとしては、スプラッシュを3分程表示してから、フォーム表示をするのですが、
●スプラッシュ表示のタイミングは必ず。
●フォーム表示のタイミングで極々稀。(この時にWM_SHOWWINDOWが来ると落ちる)
上記タイミングでWM_SHOWWINDOWが送られてくるようです。
WM_SHOWWINDOWはどのようなタイミングで
来るのが正しいでしょうか?
スプラッシュ、フォームと表示の度に来る物でしょうか?
もし、稀に2回来るのならwndproc内で処理するのが正しいのでしょうか?
自分なりに対策してみたwndprocのコードを下記に示します。
2回目の所でMyBase.WndProc(m)すると落ちてしまうので、
2回以上メッセージが来たらMyBase.WndProc(m)しないようにしました。
このような対策は正当な方法なのでしょうか?
どうも、腑に落ちないというか気持ち悪いです。
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
Const WM_SHOWWINDOW As Integer = &H18 '24
Try
Select Case m.Msg
Case WM_SHOWWINDOW
RLogDebug("WM_SHOWWINDOW " & CStr(m.HWnd) & vbTab & CStr(m.Msg) _
& vbTab & CStr(m.WParam) & vbTab & CStr(m.LParam) & vbTab & CStr(m.Result))
If firsttime Then '1回目 スプラッシュ表示時に来る。
MyBase.WndProc(m)
firsttime = False
Else '2回目 極々稀にフォーム表示時に来る。
RLogDebug("WM_SHOWWINDOWが2回来た。") 'ここでMyBase.WndProc(m)するとcatchされてしまう。
End If
Case Else
MyBase.WndProc(m)
End Select
Catch ex As Exception
RLogDebug("WndProc(Exception) " & CStr(m.HWnd) & vbTab & CStr(m.Msg) _
& vbTab & CStr(m.WParam) & vbTab & CStr(m.LParam) & vbTab & CStr(m.Result))
End Try
End Sub