void RESOURCE_Dlg::MakeTree(HTREEITEM hitem,IMAGE_RESOURCE_DIRECTORY* lpIMAGE_RESOURCE_DIRECTORY)
{
WORD nCount = lpIMAGE_RESOURCE_DIRECTORY->NumberOfIdEntries + lpIMAGE_RESOURCE_DIRECTORY->NumberOfNamedEntries;
IMAGE_RESOURCE_DIRECTORY_ENTRY* lpRESOURCE_DIRECTORY = (struct _IMAGE_RESOURCE_DIRECTORY_ENTRY *)(lpIMAGE_RESOURCE_DIRECTORY + 1);
for (int i = 0 ; i < nCount; i ++)
{
if (lpRESOURCE_DIRECTORY->DataIsDirectory == 1)
{
CString csTemp;
DWORD RESOURCEAdder = lpRESOURCE_DIRECTORY->OffsetToDirectory + (DWORD)m_lpIMAGE_RESOURCE_DIRECTORY;
csTemp.Format("资源编号%d : 目录地址%p",lpRESOURCE_DIRECTORY->Id,lpRESOURCE_DIRECTORY->OffsetToDirectory + m_dwMemImageBase);
HTREEITEM newhitem = m_TreeRESOURCE.InsertItem(csTemp,hitem);
MakeTree(newhitem,(struct _IMAGE_RESOURCE_DIRECTORY *)RESOURCEAdder);
}
else
{
CString csTemp;
DWORD RESOURCEAdder = lpRESOURCE_DIRECTORY->OffsetToDirectory + (DWORD)m_lpIMAGE_RESOURCE_DIRECTORY;
IMAGE_RESOURCE_DATA_ENTRY * lpRESOURCE_DATA = (struct _IMAGE_RESOURCE_DATA_ENTRY *)(lpRESOURCE_DIRECTORY->OffsetToDirectory + (DWORD)m_lpIMAGE_RESOURCE_DIRECTORY);
csTemp.Format("数据地址%p,数据长度%p",lpRESOURCE_DATA->OffsetToData,lpRESOURCE_DATA->Size);
m_TreeRESOURCE.InsertItem(csTemp,hitem);
}
lpRESOURCE_DIRECTORY++;
}
return;
}
BOOL RESOURCE_Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_TreeRESOURCE.DeleteAllItems();
HTREEITEM hitem = m_TreeRESOURCE.InsertItem("资源表");
MakeTree(hitem,m_lpIMAGE_RESOURCE_DIRECTORY);
SetWindowLong(m_hWnd,GWL_STYLE,
GetWindowLong(m_hWnd,GWL_STYLE)|TVS_CHECKBOXES|TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
翻了下当时写的作业,希望对你有帮助。
按你这函数原型估计很少人那样写。
上传的附件: