如题。在CListCtrl 对象调用 sortitem 时,sortitem的参数中的回调函数就不能正确执行。
解决方案 »
- 问问传输的小问题
- 如何多文档框架程序中创建的对话框只在本进程中前端显示
- 出来工作(vc开发 )两年了,投去的简历要我回复工资期望值,我不知道该填多少为好,大家给个见意吧.我现在浙江宁波
- ocx 静态调用 dll 问题,dllmain 冲突
- 初学者一个弱弱的绘图问题!
- 大家别砸我啊:如何把一个C写好的EXE,反编成C(或汇编)源码,再返回去?
- 奇怪了???我的 Office 2000 为什么是(Debug)版的
- OpenMP能提高某个线程的实时性吗
- NT&Win2K下如何强制关机?
- MFC的FTP文件操作类封装的怎么样?用它好还是用FTP的API好?哪个功能更强?
- 我想在没有使用MFC的程序里引用CWnd类,该怎么办啊?
- 很麻烦的问题
能不能贴出重现该问题的代码看看。
Capicom控件跟ListControl冲突的可能性不大。
CAPICOM::的方式。我认为可能还是别的地方有问题。
m_listTest.InsertColumn(0,"颁发给",LVCFMT_LEFT, 110,-1);
m_listTest.InsertColumn(1,"颁发者",LVCFMT_LEFT, 110,-1);
m_listTest.InsertColumn(2,"颁发者详细信息",LVCFMT_LEFT, 220,-1);
m_listTest.InsertColumn(3,"截至日期",LVCFMT_LEFT, 110,-1);
HRESULT hr = S_OK;
CListCtrl *pCertList;
pCertList=(CListCtrl *)GetDlgItem(IDC_TESTLIST);
pCertList->SetItemState(3, LVIS_SELECTED, LVIS_SELECTED);
//
// Initialize COM library.
//
CoInitialize(0);
try
{
//
// Open current user My store.
//
_bstr_t bstrName = _T("root");
CAPICOM::IStorePtr pIStore(__uuidof(CAPICOM::Store)); if (FAILED(hr = pIStore->Open(CAPICOM::CAPICOM_LOCAL_MACHINE_STORE,
bstrName,
CAPICOM::CAPICOM_STORE_OPEN_READ_ONLY)))
{
// ATLTRACE(_T("Error [%#x]: pIStore->Open() failed at line %d.\n"), hr, __LINE__);
throw hr;
} //
// Display all certificate in the store.
//
IUnknownPtr pIUnknown;
IEnumVARIANTPtr pIEnum;
_variant_t pDisp;
ULONG ulFetched; //
// Get _NewEnum of Certificates collection.
//
if (FAILED(hr = pIStore->Certificates->get__NewEnum(&pIUnknown)))
{
// ATLTRACE(_T("Error [%#x]: pIStore->Certificates->get__NewEnum() failed at line %d.\n"), hr, __LINE__);
throw hr;
} //
// Get IEnumVARIANT interface of _NewEnum.
//
if (FAILED(hr = pIUnknown->QueryInterface(IID_IEnumVARIANT, (void **) &pIEnum)))
{
// ATLTRACE(_T("Error [%#x]: pIUnknown->QueryInterface() failed at line %d.\n"), hr, __LINE__);
throw hr;
} //
// Now loop through all items in the collection.
int i=0;
while (pIEnum->Next(1, &pDisp, &ulFetched) == S_OK)
{
//
// Display the certificate.
//
CAPICOM::ICertificate *pCert;
pCert=(CAPICOM::ICertificate2Ptr)pDisp.pdispVal;
pCertList->InsertItem(i,((CAPICOM::ICertificate2Ptr)pDisp.pdispVal)->GetInfo(CAPICOM::CAPICOM_CERT_INFO_SUBJECT_SIMPLE_NAME),-1);
pCertList->SetItemText(i,1,((CAPICOM::ICertificate2Ptr)pDisp.pdispVal)->GetInfo(CAPICOM::CAPICOM_CERT_INFO_ISSUER_SIMPLE_NAME));
pCertList->SetItemText(i,2,pCert->IssuerName);
COleDateTime timenow(pCert->ValidToDate);
pCertList->SetItemText(i,3,timenow.Format(_T("%Y-%m-%d")));
i++;
pDisp.Clear();
}
}
catch (...)
{ } CoUninitialize();
void CViewlisttestDlg::OnColumnclickTestlist(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
m_listTest.SortItems(ListCompare,(LPARAM)&m_listTest);
*pResult = 0;
}
int CALLBACK ListCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
//通过传递的参数来得到CSortList对象指针,从而得到排序方式
CListCtrl* pV=(CListCtrl*)lParamSort;
//通过ItemData来确定数据
CString pInfo1=pV->GetItemText(lParam1,0);
CString pInfo2=pV->GetItemText(lParam2,0);
int iCompRes;
iCompRes=pInfo1.Compare(pInfo2);
return iCompRes ;
};
这个地方没有把pIStore创建起来,正在查找原因
找到再说了
regsvr32 capicom.dll