我做了个 List Control ,我希望在选择另一个item前,提示用户是否需要保存当前选择的item,如果选择的是Cancel那么还要选中旧的,但现在就是新旧两个都选中了
m_ListVmfPackage.SetItemState(m_ListOldSelected,0,LVIS_FOCUSED);
m_ListVmfPackage.SetItemState(m_ListOldSelected,LVIS_SELECTED,LVIS_SELECTED);
return;

解决方案 »

  1.   

    LVN_ITEMCHANGED消息
    void CGenericCameraVmfPropertyPage::OnItemChangedVmfPackageList(NMHDR *pNMHDR, LRESULT *pResult)
    NM_LISTVIEW*   pNMListView   =   (NM_LISTVIEW*)pNMHDR;   
    if (pNMListView->uChanged == 8 && pNMListView->uOldState == 1)
    {
    if (IsDirty())
    {
    switch(PromptForSave())
    {
    case GTK_RESPONSE_YES:
    SaveData();
    break;

    case GTK_RESPONSE_CANCEL:
    m_IsListChanged = true;
    m_ListOldSelected = pNMListView->iItem;
    return;
    break;
    default:
    break;
    }
    }
    } //if (pNMListView->uChanged == 8 && pNMListView->uOldState == 2 && m_IsListChanged == true)
    //{
    // m_ListVmfPackage.SetItemState(m_ListOldSelected,0,LVIS_FOCUSED);
    // m_ListVmfPackage.SetItemState(m_ListOldSelected,LVIS_SELECTED,LVIS_SELECTED);
    // return;
    //}
    if(pNMListView->uChanged == 8 && pNMListView->uNewState == 3 && m_IsListChanged == true)
    {
    m_ListVmfPackage.SetItemState(m_ListOldSelected,0,LVIS_FOCUSED);
    m_ListVmfPackage.SetItemState(m_ListOldSelected,LVIS_SELECTED,LVIS_SELECTED);
    m_IsListChanged = false;
    return;
    }
      

  2.   

    响应LVN_ITEMCHANGING消息,返回TRUE取消修改,返回FALSE允许修改。