2016-04-06 17 views
1

私は、今日の標準によって古い技術を使用していることを最初に言いましょう!これは、Visual Studio 2005のMFCでWinXPで実行されます。 (もしそれが '壊れていれば.... ;-))MFC CListCtrlが最小化復元後に表示されない

私は2つのタブを持つCTabCtrlを持つダイアログベースのアプリケーションを持っています。それぞれにはCListCtrlが含まれています。これらは通常の状況下では完全に機能します。それらは正しく配置され、必要に応じて表示および非表示になります。最初にアプリケーションを開くと、表示選択が正しいことになります。ダイアログを最小化して復元すると、CList Ctrlは表示されず、タブは空白になります。この問題を抱える唯一のコントロールです。 CTabCtrlの外側の別のCListCtrlが正しく表示されます。タブを入れ替えてもう一度やり直すと、もう一方のタブが表示され、最初のタブが通常通り表示されます。

最小化する前にダイアログの他の部分にアクセスすると、これは最小化が私が取る絶対的な最初の操作である場合にのみ起こります。また、このタブをOnInitDialogの起動時にCTabCtrlを設定する場所に設定すると、他のタブにあるCListCtrlも発生します。私は実際に私のOnSysCommand(...)に次のように追加することで、この問題の影響を解決した

if ((nID & 0xFFF0) == SC_RESTORE) 
{ 
    m_ctrlReadList.Invalidate(); 
} 

しかし、私は唯一起こる問題を解決するためにコードを追加しているというバグを私にそのような奇妙な状況では私はこの動作に至っているセットアップで逃したことがあると思うのを助けることができません。誰でも最初に何が起こっているかについての説明を提供できますか?

+0

zオーダーに関連する問題でしょうか? –

+0

私は、あなたを助けるために関連するコードをもっと見る必要があると思います。 – rrirower

+0

1.ダイアログエディタで、他のコントロールがあるかどうかを確認します。 2.復元直後に、Spy ++を使用して同じ状況を確認します – Ajay

答えて

0

私の説明は、私が見つけたことの事実に基づいていますが、これは私のための学習経験でしたので、少し混乱させてしまったら、私はまだそれを私の心に落ち着かせています。

この問題に伴い、関連性が高いと判明した別のものが見つかりました。私が書いているプログラムの性質から、私のCListCtrlsには固定幅ヘッダーが必要でした。今私はセットアップできなかったことが判明しました!私はちょうどユーザーがヘッダーの仕切りをつかんで、サイズを変更したり、自動サイズ調整するためにそれらをダブルクリックするのを防ぐ必要がありました。そして、これを設定するために、子供のCHeaderCtrlに基づいてCListCtrlの機能があります。まあ明らかにそうではありません。例えばLVS_EX_HEADERDRAGDROPは方法ではありません。

私は自分自身を許可するメッセージをキャプチャしようとしましたが、何を知っていますか?私はいくつかをトラップすることができますが、私は必要なものではありません。私はHDN_BEGINTRACKとHDN_DIVIDERDBLCLICKを探していました。 (これらのバージョンのAとWのバージョンを別々に扱う必要はありません!)CHeaderCtrlはCListCtrlの子ですが、メッセージをCListCtrlの親としてCDialogに返します。私はそこに、私のリストとヘッダーが明らかに使用するIDとして0の両方を使ってみました。それらの多くはまったく平野には現れませんでした。

私はCListCtrlから継承した独自のCListCtrlクラスを作成し、OnNotifyをオーバーロードしました。私は単にCListCtrl :: On Notifyがそれらのメッセージのために呼び出されるのを防ぎ、それは機能しませんでした。

私はZオーダーでも演奏していましたが、関連性がありました。以前は説明していませんでしたが、これと別のリストは2つのタブにあり、お互いに正確に並べられています。タブを選択すると、各リストが順番に表示され、表示されます。 OnInitDialogのデフォルト表示を起動時に表示するように変更した場合でも、他のリストには表示上の問題はありませんでした。

問題が発生しました。だから、私がそれらを設定したOnInitDialogのZオーダーを変更する - 何もしなかった!そして、その2番目のリストでそれをこすっても、私が欲しかったのと同じように、デフォルトでは元に戻すことができず、理由を見つけることができませんでした。それらのプロパティはまったく同じであり、異なるアスペクトが手作業で設定されたコードではどこにも存在しませんでしたが、理論的にはまったく同じですが、実際はそうではありませんでした。だからイライラする!!!

そして、その結果、ヘッダーのサイズ変更の問題が解決されたので、表示に関する問題も解決しました。 CListCtrlはややフレークなものの1つで、それを最大限に活用するために少しマッサージを必要としているように、自分自身と同様の症状を報告する人もいます。

このコントロールをよく知っているあなたの人には意味があることを願っています。私は解決策がどれほどシンプルかと驚いていましたが、診断プロセスがとても難しいことも私には驚きました。もちろん、私が働く高齢化のシステムに来るかもしれません。今日私はこれを楽しむためにのみ行い、時折の使用のためにVSを2005年から更新することの費用は最優先事項ではありません。私はいくつかの症状が他のビルド環境や実行環境では表示されないと確信していますが、Googleが他のユーザーを見つけるために問題と解決策を記録しておく価値があります。

関連する問題