VB6.0用掲示板の過去のログ(No.1)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [過去ログ] [管理用]

投稿日: 2004/08/07(Sat) 14:49
投稿者とも
Eメール
URL
タイトルタスクバーに消したはずのアイコンが残る


初めて投稿させていただきます。
vb6(sp5) Xp homeにて開発しています。
うまくいかない原因がつかめず困っています。なんでもよいのでご意見いただけたら助かります。

フォームを5つ持ち、フォーム1から5、5から1へ遷移可能な画面を作成しています。
各フォームはvbmodalでshowしています。
フォーム1から5へ遷移する場合、移動元を非表示にしています。
(例えば、フォーム2から3へ遷移するとき、フォーム2および、フォーム2のタスクバーのアイコンを非表示にしています。
つまり、ウィンドウズ上にはひとつのフォームおよびタスクバーにひとつのアイコンのみ表示ということです。
フォーム3から2へ遷移する場合は、フォーム3をunloadしています。)

現状、フォーム2から3へ遷移する場合に10回に1回ぐらい(出る頻度ばらばら)で、
フォーム2のアイコンがタスクバーに残ってしまう現象が出ています。

この現象を解消しようと、ログをとってイベントの発生順序が狂っていないかどうか調べたのですが、
問題なさそうでした。また、タスクバーのアイコン表示非表示はこちらの過去ログ
「アクティブなウィンドウだけをタスクバーに表示」を参考にしているので、
この問題に対する実装の方向性はまちがっていないと思っているのですが、うまくいっていません。

具体的には以下のような実装をしています。

フォーム1から5のForm_Activateイベントにて下記関数(AppTasklistA)呼び出し(フォーム起動時1回のみ)

フォーム2から3を呼び出す場合
'自分自身のフォーム2非表示+タスクバーアイコン削除
call DelTasklistA Me
'フォーム3呼び出し
form3.show vbmodal
'自分自身のフォーム2表示+タスクバーアイコン追加
call AppTasklistA Me

Public Sub DelTasklistA(ByRef p_frmForm As Form)
    'ウィンドウ非表示
    Call ShowWindow(p_frmForm.hWnd, CST_SW_HIDE)
    
    '以下過去ログのサンプル流用
    Dim objTaskbar As New TaskbarList
    objTaskbar.HrInit
    objTaskbar.DeleteTab p_frmForm.hWnd
    Set objTaskbar = Nothing
Exit Sub

Public Sub AppTasklistA(ByRef p_frmForm As Form)
    'alt+tabにて表示される切り替えダイアログにアイコンが表示されるようウィンドウスタイルにWS_EX_APPWINDOWを追加
    Call SetWindowLong(p_frmForm.hWnd, GWL_EXSTYLE, GetWindowLong(p_frmForm.hWnd, GWL_EXSTYLE) Or WS_EX_APPWINDOW)
    
    'ウィンドウ表示
    Call ShowWindow(p_frmForm.hWnd, CST_SW_SHOW)
    
    '以下過去ログのサンプル流用
    Dim objTaskbar As New TaskbarList
    objTaskbar.HrInit
    objTaskbar.AddTab p_frmForm.hWnd
    objTaskbar.ActivateTab p_frmForm.hWnd
    Set objTaskbar = Nothing
Exit Sub

気づいた点等ありましたらご意見いただけたら助かります。
よろしくお願いいたします。


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- Web Forum -