Archive for the ‘ MFC ’ Category

WM_GETDLGCODE無限ループ:2

d:id:kuboon:20090901

なんだかいろんな人がいろんなことを言っているが、

http://www.tech-archive.net/Archive/InetSDK/microsoft.public.inetsdk.programming.webbrowser_ctl/2006-06/msg00038.html

に載っていたコードが実装しやすそうだったので入れてみたら直った。

一度直ればこっちのもんで、コード修正と実行を繰り返し、最終的に落ち着いたのは以下のコード。

LRESULT BrowserDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
if( (message==WM_SYSCOMMAND && wParam==SC_MINIMIZE) //最小化ボタン
||  (message==WM_ACTIVATE && wParam==WA_INACTIVE)   //フォーカスアウト
||  (message==WM_SHOWWINDOW && wParam==FALSE)		//不可視化
){
::SetFocus(NULL);
}
return CDialog::WindowProc(message, wParam, lParam);
}

WM_GETDLGCODE無限ループ

IWebBrowserを乗っけたダイアログ上でJavaAppletを開き、アプレット上のUIをいじっているとメインスレッドがフリーズ。

なんだろうと思ってブレークをかけてみると、ダイアログの子要素に対してWM_GETDLGCODEがものすごい勢いで投げまくられている状態。

で、調査した。

WM_GETDLGCODEのなんたるか:

http://msdn.microsoft.com/ja-jp/library/ms645425

http://support.microsoft.com/kb/83302/en

タブコントロールを使っている場合に同じ状況に陥るケースが頻繁に報告されている。僕には関係ない。次。

http://blog.goo.ne.jp/satomi_takeo/e/b058ef705da6ca88ec87db660878c789

あたりっぽいんだが、リンク先サイトが死んでいて状況を追えず。次。

http://www.guyswithtowels.com/articles/2002-08-15-1600.html#ModelessDialogs

具体的なコードも出ていて助かる。が、メッセージポンプはMFC側にあるので、この通りに実装するの難しそう。

WM_GETDLGCODE無限ループ

IWebBrowserを乗っけたダイアログ上でTextFieldを含んだJavaAppletを開き、そのあたりをいじっているとメインスレッドがフリーズ。

なんだろうと思ってブレークをかけてみると、ダイアログの子要素に対してWM_GETDLGCODEがものすごい勢いで投げまくられている状態。

で、調査した。

WM_GETDLGCODEのなんたるか:

http://msdn.microsoft.com/ja-jp/library/ms645425

http://support.microsoft.com/kb/83302/en

タブコントロールを使っている場合に同じ状況に陥るケースが頻繁に報告されている。僕には関係ない。次。

http://blog.goo.ne.jp/satomi_takeo/e/b058ef705da6ca88ec87db660878c789

あたりっぽいんだが、リンク先サイトが死んでいて状況を追えず。次。

http://www.guyswithtowels.com/articles/2002-08-15-1600.html#ModelessDialogs

具体的なコードも出ていて助かる。が、メッセージポンプはMFC側にあるので、この通りに実装するの難しそう。