トップページ > 記事閲覧
タスクバーが数秒反応しない
名前:だんごさん 日時: 2013/12/04 02:10

Http://dixq.net/forum/viewtopic.php?f=3&t=14264 こちらからやってきました。 Http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=1556 を参考にこれで透明ウィンドウを作り、DxLibで描画して壁紙のようなものを作っています。 ウィンドウスタイルはWS_EX_LAYERED(透明)WS_EX_TOOLWINDOW(ツールウィンドウ)です。 サイズはタスクバーを除いた作業領域を指定しました。 DxLib側は SetUseBackBufferTransColorFlag(TRUE)を使用し、 Http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=past&no=2220 を参考にpngを透過で表示させることに成功しました。 さて、このウィンドウがアクティブにされた時に必ずタスクバーが数秒反応しなくなります。 タスクバー自体は動いているようですが、マウスに反応しません。クリックすると数秒後に反応します。 また透明ウィンドウではなくても、WS_OVERLAPPEDWINDOWでもPOPUPでもこのようになります。 SetUseDirectInputFlag( false )をしてみましたが、やはりダメでした。 また最背面表示させるためにHWND_BOTTOMをアクティブ化された時に呼び出していますが、これを無効にしてもダメでした。 DxLib側で設定したものは以下の通りです。 初期化前: SetAlwaysRunFlag( true ); SetUseDirectInputFlag( false ); SetUseBackBufferTransColorFlag( true ); SetUserWindow( hWnd ); 初期化後: SetDrawValidAlphaChannelGraphCreateFlag( true ); ウィンドウ側はこちら hWnd = CreateWindowEx( WS_EX_LAYERED| WS_EX_TOOLWINDOW, szClassNme, "Name", WS_OVERLAPPEDWINDOW, 0, 0, GetSystemMetrics( SM_CXFULLSCREEN ), GetSystemMetrics( SM_CYFULLSCREEN ), NULL, NULL, hInstance, NULL); ShowWindow( hWnd, SW_SHOW ) ; UpdateWindow( hWnd ) ; どこが問題でタスクバーに影響するのでしょうか?
メンテ

Page: 1 |

Re: タスクバーが数秒反応しない ( No.1 )
名前:管理人 日時:2013/12/08 03:03

載せて頂いた情報の中では何故数秒間反応しないのかはわかりません よろしければ件の現象が発生するプログラムを、実行に必要なファイルと一緒に BQE00322(あっとまーく)nifty.com ( (あっとまーく)を@に置き換えてください ) に送って頂けないでしょうか? 直接手元で実行して現象を確認することができれば原因がわかるかもしれません
メンテ
Re: タスクバーが数秒反応しない ( No.2 )
名前:だんごさん 日時:2013/12/08 19:34

送信いたしました。 見苦しいコードで申し訳ないです
メンテ
Re: タスクバーが数秒反応しない ( No.3 )
名前:管理人 日時:2013/12/09 00:34

メールを拝見しました、ありがとうございます 少し調べたところ原因が分かりました SetUserWindow を使用する場合はプロセスに対するメッセージも処理しないと 件の現象が発生するようです なので、 if( PeekMessage( &msg, hWnd, 0, 0, PM_REMOVE ) ) { TranslateMessage( &msg ) ; DispatchMessage( &msg ) ; } こちらの部分にプロセス自体のメッセージを受け取るための hWnd の部分を NULL にした 同様のコードを加えて if( PeekMessage( &msg, hWnd, 0, 0, PM_REMOVE ) ) { TranslateMessage( &msg ) ; DispatchMessage( &msg ) ; } if( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) ) { TranslateMessage( &msg ) ; DispatchMessage( &msg ) ; } 更にメッセージは一度に沢山来ることもありますので while( PeekMessage( &msg, hWnd, 0, 0, PM_REMOVE ) ) { TranslateMessage( &msg ) ; DispatchMessage( &msg ) ; } while( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) ) { TranslateMessage( &msg ) ; DispatchMessage( &msg ) ; } if ではなく while にします これで私の環境では件の現象は発生しなくなりました よろしければお試しください
メンテ
Re: タスクバーが数秒反応しない ( No.4 )
名前:だんごさん(解決) 日時:2013/12/09 18:13

おお!ありがとうございました!! 無事に動きました。短時間でデバッグしていただきありがとうございました!
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存