• Как продвинуть сайт на первые места?
    Вы создали или только планируете создать свой сайт, но не знаете, как продвигать? Продвижение сайта – это не просто процесс, а целый комплекс мероприятий, направленных на увеличение его посещаемости и повышение его позиций в поисковых системах.
    Ускорение продвижения
    Если вам трудно попасть на первые места в поиске самостоятельно, попробуйте технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Если ни один запрос у вас не продвинется в Топ10 за месяц, то в SeoHammer за бустер вернут деньги.
    Начать продвижение сайта


  • Иллюстрированный самоучитель по Visual Studio .NET

    Класс-оболочка

    Обычно при создании приложения-контейнера для элемента ActiveX придерживаются следующей стратегии:

    1. Вставляют уже зарегистрированный элемент ActiveX в форму приложения контейнера, используя так называемую галерею объектов (Gallery).
    2. В одном из классов контейнера определяют переменную того же типа, что и класс-оболочка для внедренного элемента.
    3. Программируют поведение элемента, управляя им с помощью этой переменной.

    Первый шаг этого алгоритма вы уже выполнили, теперь введите в состав проекта два новых файла OpenGLh и OpenGLcpp, которые будут содержать коды класса-оболочки copenGL. Вот содержимое файла заголовков (OpenGLh):

    #pragma once
    //=========== COpenGL wrapper class
    class COpenGL: public CWnd
    {
    protected:
    DECLARE_DYNCREATE(COpenGL)
    public:
    //==== Метод для добывания CLSID нашего элемента
    CLSID const& GetClsidO
    {
    static CLSID const clsid =
    {
    0x519d9ed8, Oxbc4'6, 0x4367,
    { Ox9c, OxcO, 0x49, 0x81, 0x40, Oxf3, 0x94, 0x16 }
    };
    return clsid;
    }
    virtual BOOL Create(LPCTSTR IpszClassName,
    LPCTSTR IpszWindowName, DWORD dwStyle,
    const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL)
    {
    return CreateControl(GetClsid(), IpszWindowName,
    dwStyle, rect, pParentWnd, nID)
    }
    BOOL Create (LPCTSTR IpszWindowName, DWORD dwStyle,
    const RECT& rect, CWnd* pParentWnd, UINT nID, CFile* pPersist = NULL,
    BOOL bStorage = FALSE, BSTR bstrLicKey = NULL)
    {
    return CreateControl(GetClsidO, IpszWindowName, dwStyle, rect, pParentWnd, nID,
     pPersist, bStorage, bstrLicKey);
    }
    //====== Методы, экспонируемые элементом ActiveX
    public:
    void SetFillColor(unsigned long newValue);
    unsigned long GetFillColor();
    void GetLightParams(long* pPos);
    void SetLightParam(short Ip, long nPos);
    void ReadData();
    void SetFillMode(DWORD mode);
    void GetFillMode(DWORD* pMode);
    void GetQuad(BOOL* bQuad);
    void SetQuad(BOOL bQuad);
    };
    

    Самым важным моментом в процедуре вставки класса является правильное задание CLSID того класса OpenGL, который был зарегистрирован в операционной системе при создании DLL-сервера, то есть нашего элемента ActiveX. He пытайтесь сравнивать те цифры, которые приведены в книге, с теми, которые были приведены в ней же до этого момента, так как в процессе отладки пришлось не раз менять как классы, так и целиком приложения. Мне не хочется отслеживать эти жуткие номера. Если вы хотите вставить правильные цифры, то должны взять их из вашей версии предыдущего приложения ATLGL. Например, откройте файл ATLGL.IDL и возьмите оттуда CLSID для ко-класса OpenGL, то есть найдите такой фрагмент этого файла:

    [
    uuid(519D9ED8-BC46-4367-9CCO-498140F39416),
    helpstring ("OpenGL Class") ]
    coclass OpenGL
    {
    [default] interface IOpenGL;
    [default, source] dispinterface _IOpenGLEvents;
    };
    

    И скопируйте первую строку:

    uuid(519D9ED8-BC46-4367-9CCO-498140F39416),
    

    Но с вашими цифрами и вставьте ее в качестве комментария в файл OpenGLh нового проекта TestGL. Затем аккуратно, соблюдая формат, принятый для структуры CLSID, перенесите только цифры в поля статической структуры clsid, которую вы видите в методе GetClsid класса-оболочки. Цифры должны быть взяты из принесенной строки, но их надо отформатировать (разбить) по-другому принципу.

    Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.