ひきこもりプログラマ

C++のこととか。

広告

※このエリアは、60日間投稿が無い場合に表示されます。記事を投稿すると、表示されなくなります。

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

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()関数内で,「自分の子供がフォーカスを持っていたら自分自身に移す」という処理を書いて事なきを得ました。

ジャンル:
ウェブログ
コメント   この記事についてブログを書く
この記事をはてなブックマークに追加
« ボリューム D:\\ は現在使用... | トップ | Windows Installerでのアンイ... »
最近の画像もっと見る

コメントを投稿

Program」カテゴリの最新記事

関連するみんなの記事

トラックバック

この記事のトラックバック  Ping-URL