1

最初に言っておきますが、私は今日の基準では古い技術を使用しています! これは、Visual Studio 2005 上の MFC で、WinXP で実行されている場合に発生します。(それが壊れていない場合.... ;-))

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

これは、最小化する前にダイアログの他の部分にアクセスした場合には発生しません。最小化が絶対的な最初のアクションである場合にのみ発生します。CTabCtrlを設定したOnInitDialogで起動時にこのタブを選択するように設定すると、他のタブにあるCListCtrlでも発生します。

OnSysCommand(...) に以下を追加することで、この問題の影響を実際に解決しました。

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

しかし、そのような奇妙な状況でのみ発生する問題を解決するためにコードを追加していることに悩まされています。この動作につながるセットアップで見逃したものがあると思わずにはいられません。そもそも何が原因なのか説明できる人はいますか?

4

1 に答える 1

0

私の説明は私が発見した事実に基づいていますが、これは私にとって学習経験でした。少し混乱してしまった場合は申し訳ありませんが、まだ頭の中で落ち着かせています.

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

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

そこで、CListCtrl から継承する独自の CListCtrl クラスを作成し、OnNotify をオーバーライドすると、そこに現れました。これらのメッセージに対して CListCtrl::On Notify が呼び出されないようにしただけで、機能し、サイズ変更機能はまったくありませんでした。

また、関連する可能性のあるZオーダーも試しました。前に説明しませんでしたが、このリストと別のリストは 2 つのタブにあり、互いにぴったり重なっています。タブを選択すると、各リストが順番に非表示および表示されます。もう一方のリストは、OnInitDialog のデフォルト表示を起動時に表示するように変更しても、表示に問題はありませんでした。

それは問題のあるものの下にありました。そのため、設定した OnInitDialog で Z オーダーを変更しても、何もしませんでした。そして、その2番目のリストでそれをこすることも、私が望んでいたようにデフォルトでサイズ変更できず、理由を見つけることができませんでした. それらのプロパティはまったく同じようにリストされており、コードのどこにも異なる側面が手動で設定されていませんでした。理論的には事実上同一でしたが、実際にはそうではありませんでした。とてもイライラします!!!

その結果、ヘッダーのサイズ変更の問題が解決されたので、表示の問題も解消されました。私と同様の症状を報告している他の数人にも、CListCtrl は少し不安定なものの 1 つであり、それを最大限に活用するには少しマッサージする必要があるように見えます。

このコントロールをよく知っている人にとって、それが理にかなっていることを願っています. 解決策が簡単だったことに驚きましたが、診断プロセスが非常に難しいことにも驚きました。もちろん、それは私が働いている老化システムに帰着するかもしれません. 現在、私はこれを楽しみのためだけに行っており、2005 年から時折使用するために VS を更新する費用は優先度が高くありません。一部の症状は他のビルドおよび実行環境では表示されないと確信していますが、Google が他の人のために見つけられるように、問題と私の解決策をどこかに記録しておく価値があるかもしれません。

于 2016-04-09T13:42:21.673 に答える