Visual Studio 2005 +SP1, VC++, MFC, SDIアプリです。
子供のダイアログにリストビューを表示しています。
コラムをクリックしてソートしたときに、昇順・降順の三角マークを付けたくて、次のコードを書きました。
void CDialog1::OnLvnColumnclickMyListView(NMHDR *pNMHDR, LRESULT *pResult)
{
CHeaderCtrl* phdrCtrl;
phdrCtrl = m_myListView.GetHeaderCtrl();
HDITEM hdrItem;
phdrCtrl->GetItem(0, &hdrItem);
if (m_bUpward == FALSE)
hdrItem.fmt = hdrItem.fmt ^ HDF_SORTUP | HDF_SORTDOWN;
else
hdrItem.fmt = hdrItem.fmt ^ HDF_SORTDOWN | HDF_SORTUP;
phdrCtrl->SetItem(0, &hdrItem);
}
「debug」でビルトすると、三角マークがちゃんと付きますが、「release」でビルトすると、三角マークが付きません。
debug と release のプロジェクトプロパティに相違はありません。
上記のコードに不備があるのでしょうか?
どなたか、お気づきのことがあったら教えてください。お願いします。
hdrItemの中身、初期化していないようですが?
memset(またはZeroMemory)で0クリアした上で、
hdrItem.maskを適切に設定してみては?
debugだとmaskメンバは0xccccccccに初期化されているかと思われます。
fmtメンバを有効とするHDI_FORMATビットが設定された状態になりますから、
debugビルドで成功したのでしょう。
releaseでは不定値となりますから……
debug と release に、そんな違いがあるとは知りませんでした。
::ZeroMemory(&hdrItem, sizeof(HDITEM));
hdrItem.mask = HDI_FORMAT;
上の2行を追加したら、release ビルドでも見事に三角マークが付きました。
早速のご教授ありがとうございました。