哪个牛人能看懂这段代码?????

reals 2004-03-09 10:55:21
if (item == dsoDialogNew)
{
OLEUIINSERTOBJECT oidlg = {0};
LPCLSID lpNewExcludeList = NULL;
int nNewExcludeCount = 0;
int nNewExcludeLen = 0;

oidlg.cbStruct = sizeof(OLEUIINSERTOBJECT);
oidlg.dwFlags = IOF_SELECTCREATENEW | IOF_DISABLELINK | IOF_DISABLEDISPLAYASICON | IOF_HIDECHANGEICON;
oidlg.hWndOwner = m_hwnd;
oidlg.lpszCaption = "Insert New Document Object";
oidlg.lpszFile = szFile;
oidlg.cchFile = MAX_PATH;

HKEY hkCLSID;
HKEY hkItem;
HKEY hkDocObject;
DWORD dwIndex = 0;
CHAR szName[MAX_PATH+1];

if(RegOpenKeyEx(HKEY_CLASSES_ROOT, "CLSID", 0, KEY_READ|KEY_ENUMERATE_SUB_KEYS, &hkCLSID) == ERROR_SUCCESS)
{
while(RegEnumKey(hkCLSID, dwIndex++, szName, MAX_PATH) == ERROR_SUCCESS)
{
if (RegOpenKeyEx(hkCLSID, szName, 0, KEY_READ, &hkItem) == ERROR_SUCCESS)
{
if ((RegOpenKeyEx(hkItem, "Insertable", 0, KEY_READ, &hkDocObject) == ERROR_SUCCESS))
{
RegCloseKey(hkDocObject);
if ((RegOpenKeyEx(hkItem, "DocObject", 0, KEY_READ, &hkDocObject) != ERROR_SUCCESS))
{
CLSID clsid;
LPWSTR pwszClsid = ConvertToLPWSTR(szName);
if ((pwszClsid) && SUCCEEDED(CLSIDFromString(pwszClsid, &clsid)))
{
if (lpNewExcludeList == NULL)
{
nNewExcludeCount = 0;
nNewExcludeLen = 16;
lpNewExcludeList = new CLSID[nNewExcludeLen];
}
if (nNewExcludeCount == nNewExcludeLen)
{
LPCLSID lpOldList = lpNewExcludeList;
nNewExcludeLen <<= 2;
lpNewExcludeList = new CLSID[nNewExcludeLen];
memcpy(lpNewExcludeList, lpOldList, sizeof(CLSID) * nNewExcludeCount);
delete [] lpOldList;
}

lpNewExcludeList[nNewExcludeCount] = clsid;
nNewExcludeCount++;
}
MemFree(pwszClsid);

} else RegCloseKey(hkDocObject);
}
RegCloseKey(hkItem);
}
}
RegCloseKey(hkCLSID);
}

oidlg.lpClsidExclude = lpNewExcludeList;
oidlg.cClsidExclude = nNewExcludeCount;

if (OleUIInsertObject(&oidlg) == OLEUI_OK)
{
if ((oidlg.dwFlags & IOF_SELECTCREATENEW) && (oidlg.clsid != GUID_NULL))
{
LPOLESTR posz;
BSTR bstr;
if (SUCCEEDED(ProgIDFromCLSID(oidlg.clsid, &posz)))
{
bstr = SysAllocString(posz);
hr = CreateNew(bstr);
SysFreeString(bstr);
CoTaskMemFree(posz);
}
}
else if ((oidlg.dwFlags & IOF_SELECTCREATEFROMFILE) && (szFile[0] != 0))
{
vT[0].vt = VT_BSTR;
vT[0].bstrVal = ConvertToBSTR(szFile);
vT[1].vt = VT_I4; vT[1].lVal = 1;

hr = Open(vT[0], vT[1], vT[2], vT[2], vT[2]);

VariantClear(&vT[0]);
}
else
{
MessageBeep(0);
}

}

if (lpNewExcludeList)
delete [] lpNewExcludeList;

}
...全文
22 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧