VC6.0工程转成64位VS2012,CListView问题咨询【急】
由于项目需要,将原来的VC6.0工程在64位WIN7系统下转成VS2012工程,用x64进行编译。
编译链接均已通过,运行时界面ListCtrl中通过InsertItem加入的内容无法显示。
经调试有下面几个问题:
1、执行到下面第二句时assert失败,没获取到LVS_OWNERDATA风格,而且listctrl中内容也没加进去。
不知道是否和风格相关,在之前手工设置下风格也没生效。
请问此问题如何解决,64位下是否有其它替代办法。
int i = ListCtrl.InsertItem(0,"01");
i = ListCtrl.SetItemText(0,0,"chetnao");
BOOL CListCtrl::SetItemText(int nItem, int nSubItem, LPCTSTR lpszText)
{
ASSERT(::IsWindow(m_hWnd));
ASSERT((GetStyle() & LVS_OWNERDATA)==0);
LVITEM lvi;
lvi.iSubItem = nSubItem;
lvi.pszText = (LPTSTR) lpszText;
return (BOOL) ::SendMessage(m_hWnd, LVM_SETITEMTEXT, nItem, (LPARAM)&lvi);
}
2、调用SetItemState函数不会自动调用OnSelectRow函数。
ListCtrl.SetItemState(0, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED);
3、OnGetdispinfo函数传入参数和所要值不一致。
void CCapItemFileListView::OnGetdispinfo(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
LV_ITEM* pItem= &(pDispInfo)->item;//这里取pItem时发现错位了4个字节,开始怀疑是前面LV_DISPINFO结构8字节对齐导致,改成一字节对齐后还未生效。
之后强制改成LV_ITEM* pItem= (LV_ITEM*)((char*)&(pDispInfo)->item + 4);
pItem中mask,iItem等内容均和32位下匹配,但是往pItem->pszText中赋值时失败,怀疑是该指针未分配内存,不知如何解决?该问题是否也是前面style问题导致?
if ( 0 == (pItem->mask & LVIF_TEXT) )
return;