ひきこもりプログラマ

C++のこととか。

フォーカスをもつウィンドウの親の親(の親の...)を非表示にすると無限ループ

2008-10-10 | Program

プロパティページの中に別のプロパティシートがあるようなダイアログを作っていたのですが。

Dialog
+ Property Sheet S1
 + Property Page P1A
  + Property Sheet S2
   + Property Page P2A
    + Control
 + Property Page P1B
  ...

Controlにフォーカスがある状態で,P1Bのタブをクリックすると,アプリケーションが無限ループに入ってしまいました。

デバッグしてみると,P1AがしきりにWM_GETDLGCODEという見慣れないメッセージを子ウィンドウに投げまくっていました。そこでこのメッセージについてぐぐってみたところ,[wx-dev] Endless WM_GETDLGCODE loopなるページが見つかりました。それによると,コントロールがフォーカスを持っているときに,その親の親(またはさらにそのずっと親)が非表示になることが無限ループの発生条件だそうです。ふーむ。

それについて言及しているMicrosoftのドキュメントを探したのですが見つからず。結局P1AのOnShowWindow()関数内で,「自分の子供がフォーカスを持っていたら自分自身に移す」という処理を書いて事なきを得ました。


最新の画像もっと見る

コメントを投稿