↑右がリソースエディタで貼ったツリーコントロールで、
左が↓のコードで貼ったツリーコントロール。
// m_TreeはCTreeCtrl型 m_Tree.CreateEx(WS_EX_CLIENTEDGE, WS_CHILD | WS_VISIBLE | TVS_SHOWSELALWAYS, CRect(10, 10, 200, 200), this, 0); m_Tree.InsertItem(_T("ああああ"));
見てお判りの通りWS_EX_CLIENTEDGEが付きません。
CTreeCtrl::CreateExのソースを見てみると、変なことやってますので、そりゃ付かないですね。
BOOL CTreeCtrl::CreateEx(DWORD dwExStyle, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID) { BOOL bRet = Create(dwStyle, rect, pParentWnd, nID); if (bRet && dwExStyle != 0) { bRet = ModifyStyleEx(0, dwExStyle); } return bRet; }
かと言って
m_Tree.CreateEx(0, WS_CHILD | WS_VISIBLE | TVS_SHOWSELALWAYS, CRect(10, 10, 200, 200), this, 0); m_Tree.ModifyStyleEx(0, WS_EX_CLIENTEDGE, SWP_FRAMECHANGED); m_Tree.InsertItem(_T("ああああ"));
こんなコードにしても、↓のようにビジュアルテーマ(?)が適用されません。
(WS_BORDERだとちょっと濃い枠が付くため、これもちょっと違います。)
回避方法としては、
m_Tree.CWnd::CreateEx(WS_EX_CLIENTEDGE, WC_TREEVIEW, _T(""), WS_CHILD | WS_VISIBLE | TVS_SHOWSELALWAYS, CRect(10, 10, 200, 200), this, 0); m_Tree.InsertItem(_T("ああああ"));
というように、CWnd::CreateExを直接呼び出してしまう事ぐらいでしょうか。
これで一応リソースエディタで貼った物と同じ枠が付きます。
MFCのバグ一覧とかどっかにまとまってたりしないのかな・・・。