'カスケードで表示される一連のモードレスダイアログウィンドウを作成するアプリがあります。ユーザーは、任意のウィンドウをクリックして上部に表示し、操作できるようになっています。
これがスクリーンショットで、これが意図したとおりに機能していることを示しています。ユーザーは下から3番目のウィンドウをクリックし、上に移動しました。
ユーザーがこれを実行し、隠されたウィンドウの1つをクリックすると、ウィンドウが一番上に表示されないことを報告します。
これは、発生している問題を示すビデオです。これは、ノートブックウィンドウの通常のカスケードを示しており、期待どおりに動作します。次に、アプリケーションウィンドウのカスケードが表示されますが、ユーザーは選択したウィンドウを一番上に表示できません。選択したウィンドウの外観が変わり、選択されたことを示しますが、表示されないままになります。(ビデオは、関連する問題を示すことで終了しますが、今のところ無視することができます)
ユーザーは、この問題が自分が試した他のPCで発生したと報告しています。問題を再現できません。
私は完全に困惑していて、これを引き起こしている可能性があるものを推測することさえできません。
(私が持っていた理論の1つは、アプリがフリーズし、ペイントメッセージに応答しなくなったというものでした。ただし、ビデオでは、ユーザーが隠されたウィンドウをカスケードからドラッグすると、ウィンドウが正常にペイントされます。ウィンドウが選択されている場合、アプリはペイントメッセージを受け取らないか、無視します)
アプリはC++とwxWidgets2.9.4を使用して作成されており、Windows7で実行されます。
これはwxWidgets2.9の問題のようです。v2.8.12ライブラリを使用してビルドすると、ユーザーは正常に動作することを報告します。
これがウィンドウを作成するためのコードです。親がNULLであることに注意してください。(これにより、カスケードウィンドウを最小化せずにメインアプリケーションウィンドウを最小化できます。これは必須の機能です。)
cNewDataPopup::cNewDataPopup( cPatDataset& data )
: wxDialog(NULL,-1,L"New data",wxPoint(200,200),wxSize(570,242),
wxDEFAULT_DIALOG_STYLE|wxSTAY_ON_TOP )
, myData( data )
{