> この現象は移動後に限り起きるわけではなく、
> 初期表示の状態で、移動をまったくしていないときも再現します。
おかしいですね。
私は以下のコードで試しましたが、少なくとも初期配置の状態では
うまく表示されましたよ。
class CMyGroupBox : public CButton
{
public:
CMyGroupBox();
BOOL Create(LPCTSTR lpszCaption, DWORD dwStyle,
const RECT& rect, CWnd* pParentWnd, UINT nID);
//{{AFX_VIRTUAL(CMyGroupBox)
public:
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
protected:
virtual void PreSubclassWindow();
//}}AFX_VIRTUAL
public:
virtual ~CMyGroupBox();
protected:
//{{AFX_MSG(CMyGroupBox)
afx_msg UINT OnGetDlgCode();
afx_msg UINT OnNcHitTest(CPoint point);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CMyGroupBox::CMyGroupBox()
{
}
CMyGroupBox::~CMyGroupBox()
{
}
BEGIN_MESSAGE_MAP(CMyGroupBox, CButton)
//{{AFX_MSG_MAP(CMyGroupBox)
ON_WM_GETDLGCODE()
ON_WM_NCHITTEST()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BOOL CMyGroupBox::Create(LPCTSTR lpszCaption, DWORD dwStyle,
const RECT& rect, CWnd* pParentWnd, UINT nID)
{
// 強制的にオーナー描画
dwStyle &= ~0x0F;
dwStyle |= BS_OWNERDRAW;
// タブストップ属性をOFF
dwStyle &= ~WS_TABSTOP;
return CButton::Create(lpszCaption, dwStyle, rect, pParentWnd, nID);
}
void CMyGroupBox::PreSubclassWindow()
{
CButton::PreSubclassWindow();
// オーナー描画ボタンでなければならない
ASSERT((GetStyle() & 0x0F) == BS_OWNERDRAW);
}
void CMyGroupBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CDC dc;
dc.Attach(lpDrawItemStruct->hDC);
dc.DrawEdge(&lpDrawItemStruct->rcItem, EDGE_ETCHED, BF_RECT);
dc.Detach();
}
UINT CMyGroupBox::OnGetDlgCode()
{
return DLGC_STATIC;
}
UINT CMyGroupBox::OnNcHitTest(CPoint point)
{
return HTTRANSPARENT;
}
>おかしいですね。
>私は以下のコードで試しましたが、少なくとも初期配置の状態では
>うまく表示されましたよ。
ためさせていただいたところ、確かにうまく表示されていました。
で、ソースを参考にさせていただいて実際に使用しているソースを
詳しく調べてみました。
その結果、実際に使用しているソースではCWnd::CreateEx()を使用して
グループボックスを作成していたのですが、その拡張スタイルに
WS_EX_TRANSPARENTが含まれていたため、このような現象がおきていた
ということが確認できました。
拡張スタイルからWS_EX_TRANSPARENTをはずすことで正しいZオーダーで
表示されるようになりました。
お騒がせして申し訳ありませんでした。
回答してくださった囚人様、Kerry様、たいちう様、PATIO様
ありがとうございました。