Здравствуйте, Тимофей Чадов, Вы писали:
ТЧ>Статья:
ТЧ>Избавляемся от контекстного меню IEАвтор(ы): Тимофей Чадов
Дата: 24.08.2001
ТЧ>Авторы:
ТЧ> Тимофей Чадов
ТЧ>Аннотация:
ТЧ>Наверное, вам давно и порядком надоело контекстное меню, которое броузер выдает по умолчанию. На это есть весьма весомые причины. Забудем о таких практически безобидных командах, как Назад — Вперед. Мы переживем, хотя в нашем приложении они, в общем, и не нужны. Но предположим, что вы никому не хотите показывать исходный текст вашей странички (Показать в виде HTML), не говоря уж о такой вредной команде, как Показать в новом окне. Или, например, когда после (месяца, года) мучений ваш начальник (заказчик), случайно щелкнув правой клавишей и увидев эти знакомые словосочетания, восклицает: "Ха! Да чем же это вы занимались все это время? Это ведь не ваша разработка, а всем известный Internet Explorer"... Да, было бы гораздо лучше, если бы он произнес: "Эх! Да мои программисты, похоже, способны выиграть войну броузеров!" и даст вам хотя бы половину тех денег, которые вложило Microsoft в IE.
ТЧ>Словом, надеюсь, что я вас убедил. Настало время избавиться от этого ненавистного контекстного меню.
Прочитала вашу статью, в соответствии с ней чтобы убрать просмотр html кода
пишу в hpp файле
STDMETHOD(ShowContextMenu)(
/* [in] */ DWORD dwID,
/* [in] */ POINT *ppt,
/* [in] */ IUnknown *pcmdTarget,
/* [in] */ IDispatch *pdispReserved)
{
#define IDR_BROWSE_CONTEXT_MENU 24641
#define IDR_FORM_CONTEXT_MENU 24640
#define SHDVID_GETMIMECSETMENU 27
#define SHDVID_ADDMENUEXTENSIONS 53
HRESULT hr;
HINSTANCE hinstSHDOCLC;
HWND hwnd;
HMENU hMenu;
CComPtr<IOleCommandTarget> spCT;
CComPtr<IOleWindow> spWnd;
MENUITEMINFO mii = {0};
CComVariant var, var1, var2;
hr = pcmdTarget->QueryInterface(IID_IOleCommandTarget, (void**)&spCT);
hr = pcmdTarget->QueryInterface(IID_IOleWindow, (void**)&spWnd);
hr = spWnd->GetWindow(&hwnd);
hinstSHDOCLC = LoadLibrary(TEXT("SHDOCLC.DLL"));
hMenu = LoadMenu(hinstSHDOCLC,
MAKEINTRESOURCE(IDR_BROWSE_CONTEXT_MENU));
hMenu = GetSubMenu(hMenu, dwID);
// Iieo?aai iiaiai? aey ycueia eiae?iaee
hr = spCT->Exec(&CGID_ShellDocView, SHDVID_GETMIMECSETMENU, 0, NULL, &var);
mii.cbSize = sizeof(mii);
mii.fMask = MIIM_SUBMENU;
mii.hSubMenu = (HMENU) var.byref;
// Caiieiyai iai? Aea eiae?iaee
SetMenuItemInfo(hMenu, IDM_LANGUAGE, FALSE, &mii);
// Oaaeyai ioieo iai? Iieacaou a aeaa HTML
DeleteMenu(hMenu, IDM_VIEWSOURCE, MF_BYCOMMAND);
int iSelection = ::TrackPopupMenu(hMenu,
TPM_LEFTALIGN | TPM_RIGHTBUTTON | TPM_RETURNCMD, ppt->x, ppt->y, 0, hwnd, (RECT*)NULL);
// Ia?anueaai aua?aiio? eiiaiao ieio a?ioca?a
LRESULT lr = ::SendMessage(hwnd, WM_COMMAND, iSelection, NULL);
FreeLibrary(hinstSHDOCLC);
return S_OK;
}
Компилятор все устраивает, но эффекта никакого. Что еще нужно сделать?