リストビューに三角マークを付けるには?

解決


コマッタ王子  2007-06-10 09:18:54  No: 65364  IP: 192.*.*.*

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 のプロジェクトプロパティに相違はありません。
上記のコードに不備があるのでしょうか?
どなたか、お気づきのことがあったら教えてください。お願いします。

編集 削除
瀬戸っぷ  2007-06-10 10:04:15  No: 65365  IP: 192.*.*.*

hdrItemの中身、初期化していないようですが?
memset(またはZeroMemory)で0クリアした上で、
hdrItem.maskを適切に設定してみては?

debugだとmaskメンバは0xccccccccに初期化されているかと思われます。
fmtメンバを有効とするHDI_FORMATビットが設定された状態になりますから、
debugビルドで成功したのでしょう。
releaseでは不定値となりますから……

編集 削除
コマッタ  2007-06-10 11:03:26  No: 65366  IP: 192.*.*.*

debug と release に、そんな違いがあるとは知りませんでした。

::ZeroMemory(&hdrItem, sizeof(HDITEM));
hdrItem.mask = HDI_FORMAT;

上の2行を追加したら、release ビルドでも見事に三角マークが付きました。
早速のご教授ありがとうございました。

編集 削除