0

環境: Visual Studio 2008、Visual Studio Feature Pack、MFC ダイアログ アプリ、Windows XP、新しいコモン コントロール。

タブ コントロール上にあるリスト コントロールに問題があります。

問題を再現するには、ダイアログ ベースのアプリを作成するだけです。そのダイアログにタブ コントロールを配置し、そのタブ コントロールにリスト コントロールを配置します。プロジェクトにコードを追加する必要はありません。ビルドして実行するだけです。フォーカスをリスト ビューに設定し、ダイアログを最小化するか、別のウィンドウを前面に表示します。

ダイアログを前面に戻すと、リストが正しく描画されません。

私が試したことの 1 つは、リスト コントロールの set focus イベントを処理することですが、空のメソッド本体を残しました。つまり...

void CMyListControl::OnSetFocus(CWnd* window)
{
  // Default();
}

その後、再描画の問題はなくなりますが、リスト内の項目を選択できなくなります。Default への呼び出しのコメントを外すと、問題が再発します。

リストをタブの外に移動すると、問題はなくなります。タブまたはダイアログの別のコントロールにフォーカスを設定すると、問題は解決します。これは奇妙なものです。

実際、よく見ると、リスト自体が描画され、タブ コントロールによって隠されていることがわかります。

4

1 に答える 1

2

遅いことはわかっていますが、今日も同じ問題がありました。ListView の親をタブ コントロールに設定する必要があります。

hWndTab = CreateWindowEx(WS_EX_CLIENTEDGE, WC_TABCONTROL, NULL,
    WS_CHILD | WS_TABSTOP | WS_VISIBLE,
    0, 0, 0, 0, hWnd, (HMENU) IDC_TAB, hInstance, NULL);

hWndList = CreateWindowEx(WS_EX_CLIENTEDGE, WC_LISTVIEW, NULL,
    WS_CHILD | WS_TABSTOP | WS_VISIBLE | LVS_REPORT,
    0, 0, 0, 0, hWndTab, (HMENU) IDC_LIST, hInstance, NULL);

hWndList: hWndTab の親ウィンドウ ハンドラに注意してください。または、SetParent を使用できます。

于 2010-08-29T16:45:42.633 に答える