Re: Избавляемся от контекстного меню IE
От: openbook  
Дата: 04.05.05 11:45
Оценка:
Здравствуйте, Тимофей Чадов, Вы писали:

ТЧ>Статья:

ТЧ>Избавляемся от контекстного меню 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;
}

Компилятор все устраивает, но эффекта никакого. Что еще нужно сделать?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.