青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

萬星星@豌豆莢 歡迎加入我們
一個吃軟飯的男人!!!!!我只想寫程序####
微博:http://weibo.com/wanlianwen
posts - 172,  comments - 1253,  trackbacks - 0

我對ole技術的了解源于com技術的學習,認識源于windows os上多年的編程,而深入理解卻來之多年的痛苦摸索、反復的體會,水到渠成的感覺終于有了。
記得很久以前有個人加我qq,說想學mfc,問有什么辦法。我告訴它,得花2、3年時間才能入門,他說算了還是不學。我不知道是不是害了他,或者過早斷送了他學習C++的路。小的時候很盼望長大,可以賺錢自立;記得學習編程的時候很希望自己能夠入門。這種希望都變成了現時,自己走過的路只有自己清楚。有人說java好,有人說linux下編程來錢,有人說鉆研技術沒錢途,這些道理我明白只是自己可能并沒有那么大夢想,或許很小的夢想都能滿足我。
對于我這個年齡的青年來說,ole技術真的很晦澀難懂,這并不是自夸。記得以前在公司的時候,有個boss對com很了解。我本身不太愛問別人技術細節問題,但是崇拜之情下我找了他:做控件的時候如何強制控制控件的尺寸。得到的答案是:具體你看看里面的代碼。當時我沒有弄明白,只是暫時放棄。第二次是在研一的時候,問一個高級工程師(30多歲),如何在控件里面獲取當前是設計時還是運行時。答案是:我回去看看在告訴你。結果是杳無音訊。我曾一度放棄com知識的進一步學習有一年,只是因為身邊少了一個導師(在后來遇到了),或許自己很笨。
不多說了,下面來看技術吧。
問題是這樣的:開發環境里面一般都是支持activex控件插入的,比如vb編輯器、vc編輯器、office系列產品,在mfc里面有ole文檔。
假設我們要做一個activex容器,支持activex的插入、設計時屬性編程的話,恐怕就需要一個載體(窗口),首先使其成為容器,支持插入,然后要提供idispatch接口為控件獲取環境屬性提供支持。為什么呢?我們首先來看看ATL.CComControlBase.GetAmbientUserMode方法:

HRESULT GetAmbientUserMode(BOOL& bUserMode)
    
{
        CComVariant var;
        HRESULT hRes 
= GetAmbientProperty(DISPID_AMBIENT_USERMODE, var);
        ATLASSERT(var.vt 
== VT_BOOL || FAILED(hRes));
        bUserMode 
= var.boolVal;
        
return hRes;
    }


進一步:

HRESULT GetAmbientProperty(DISPID dispid, VARIANT& var)
    
{
        HRESULT hRes 
= E_FAIL;
        
if (m_spAmbientDispatch.p != NULL)
            hRes 
= m_spAmbientDispatch.GetProperty(dispid, &var);
        
return hRes;
    }


其中m_spAmbientDispatch的獲取是在這里:

inline HRESULT CComControlBase::IOleObject_SetClientSite(IOleClientSite *pClientSite)
{
    ATLASSERT(pClientSite 
== NULL || m_spClientSite == NULL);
    m_spClientSite 
= pClientSite;
    m_spAmbientDispatch.Release();
    
if (m_spClientSite != NULL)
    
{
        m_spClientSite
->QueryInterface(IID_IDispatch,
            (
void**&m_spAmbientDispatch.p);
    }

    
return S_OK;
}


也就是activex控件在放到自己窩里面的時候設置的。這樣我們的容器就需要實現IDispatch以便控件查詢環境屬性。

// this for activex control AMBIENT query
STDMETHODIMP CActiveXCtrl::Invoke(
                  DISPID dispidMember, REFIID iid, LCID lcid,
                  WORD wFlags, DISPPARAMS
* pdpParams, VARIANT* pvarResult,
                  EXCEPINFO
* pExceptionInfo, UINT* piArgError)
{
    
if(dispidMember == DISPID_AMBIENT_USERMODE)
    
{
        VariantClear(pvarResult);
        pvarResult
->vt = VT_BOOL;
        pvarResult
->boolVal = VARIANT_FALSE;
        
return S_OK;
    }

    
return E_NOTIMPL;
}


這里只是簡單的返回activex控件的用戶模式為設計時。我有一個測試,代碼如下:

HRESULT OnDraw(ATL_DRAWINFO& di)
    
{
        RECT
& rc = *(RECT*)di.prcBounds;
        Rectangle(di.hdcDraw, rc.left, rc.top, rc.right, rc.bottom);

        SetTextAlign(di.hdcDraw, TA_CENTER
|TA_BASELINE);
        BOOL bUserMode 
= FALSE;
        HRESULT hr 
= GetAmbientUserMode(bUserMode);
        
if(bUserMode)
        
{
            LPCTSTR pszText 
= _T("ATL 3.0 : UserMode");

            TextOut(di.hdcDraw, 
                (rc.left 
+ rc.right) / 2
                (rc.top 
+ rc.bottom) / 2
                pszText, 
                lstrlen(pszText));
        }

        
else
        
{
            LPCTSTR pszText 
= _T("ATL 3.0 : DesignMode");
            TextOut(di.hdcDraw, 
                (rc.left 
+ rc.right) / 2
                (rc.top 
+ rc.bottom) / 2
                pszText, 
                lstrlen(pszText));
        }


        
return S_OK;
    }


運行效果如下:

微軟有一個控件叫owc11.chartspace.11,在設計時支持數據選擇,而運行時不支持,來看看運行效果:



posted on 2007-05-13 08:57 萬連文 閱讀(2598) 評論(2)  編輯 收藏 引用 所屬分類: ATL

FeedBack:
# re: OLE容器之環境屬性支持
2007-05-13 17:33 | doodle
WOW 很詳細, 仔細學習。。。

www.doodle8.cn 涂鴉基地,跟蹤最新的 web2.0 資源  回復  更多評論
  
# re: OLE容器之環境屬性支持
2014-07-01 12:52 | xuthus
你好,有沒有研究過C#下的OLE容器設計。
我正在做這方面的項目,不知道你有沒有興趣,有報酬。
郵箱:xuthus@sina.com,隨時聯系我。  回復  更多評論
  
簡歷下載
聯系我

<2011年4月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

常用鏈接

留言簿(66)

隨筆分類

隨筆檔案

相冊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一个人看的www久久| 精品成人乱色一区二区| 久久久99久久精品女同性| 免费人成网站在线观看欧美高清| 亚洲欧美日韩专区| 欧美日韩伦理在线免费| 一区二区三区在线观看视频| 亚洲风情在线资源站| 亚洲综合第一页| 亚洲欧美成人网| 国产欧美日韩精品专区| 亚洲九九精品| 中文久久乱码一区二区| 欧美三级黄美女| 亚洲中字黄色| 久久精品首页| 99在线精品观看| 在线亚洲美日韩| 国产欧美精品| 国产日韩欧美精品| 久久狠狠一本精品综合网| 午夜宅男欧美| 亚洲人成网站777色婷婷| 亚洲电影免费观看高清完整版在线| 亚洲色图自拍| 欲香欲色天天天综合和网| 欧美成人国产一区二区| 久久久久久高潮国产精品视| 国产欧美日韩免费| 欧美激情一区二区三区在线| 欧美 日韩 国产精品免费观看| 亚洲国产高清一区| 亚洲一区制服诱惑| 亚洲少妇一区| 欧美国产高清| 国产精品电影观看| 久久久蜜桃精品| 国产麻豆日韩欧美久久| 免费高清在线视频一区·| 欧美午夜宅男影院| 亚洲国产中文字幕在线观看| 欧美日韩高清在线观看| 欧美在线播放一区二区| 久久影院午夜论| 久久这里有精品15一区二区三区| 欧美日韩免费观看一区三区| 午夜精品久久久| 久久久久久网| 在线观看欧美亚洲| 久热精品视频在线免费观看| 亚洲国内欧美| 欧美二区在线播放| 亚洲人成人99网站| 99成人精品| 欧美日韩三级视频| 一区二区福利| 欧美一区二区播放| 亚洲成人在线视频播放| 午夜精品视频在线| 久久综合免费视频影院| 国产欧美精品va在线观看| 亚洲国产精品第一区二区| 国产精品成人一区二区| 99国内精品久久| 久久精品国产99| 亚洲免费高清视频| 国产日产欧产精品推荐色| 亚洲一区欧美一区| 欧美本精品男人aⅴ天堂| 亚洲免费一在线| 欧美高清视频| 午夜精品久久久久99热蜜桃导演| 男女av一区三区二区色多| 国产欧美日韩一区二区三区| 日韩午夜电影在线观看| 亚洲欧美变态国产另类| 国产一区二区精品| 欧美激情黄色片| 欧美3dxxxxhd| 一区二区av| 亚洲人成精品久久久久| 国产精品草草| 免费亚洲电影| 久久综合色播五月| 久久久久久穴| 久久成人免费日本黄色| 日韩视频免费观看高清完整版| 亚洲综合视频网| 一本久久综合亚洲鲁鲁| 国产欧美 在线欧美| 免费精品99久久国产综合精品| 一区二区高清在线观看| 欧美韩国日本一区| 欧美成人蜜桃| 亚洲精品免费一区二区三区| 亚洲一区bb| 欧美一区影院| 美女精品自拍一二三四| 久久国产99| 欧美不卡在线| 一区二区av在线| 亚洲一区图片| 久久婷婷蜜乳一本欲蜜臀| 久久精品毛片| 欧美乱在线观看| 国产精品丝袜xxxxxxx| 欧美日韩国产123区| 男人的天堂亚洲在线| 久久精品麻豆| 欧美三区美女| 国产精品午夜春色av| 亚洲欧美日韩国产| 久久蜜桃av一区精品变态类天堂| 欧美亚洲一级片| 亚洲国产精品成人精品| 亚洲美女精品久久| 欧美一区二区三区男人的天堂| 久久久久久亚洲精品不卡4k岛国| 美女国产精品| 黑人一区二区三区四区五区| 国产精品久久激情| 在线观看av不卡| 欧美一区三区三区高中清蜜桃| 久久久噜噜噜久久久| 亚洲国产精品久久人人爱蜜臀 | 欧美日韩福利在线观看| 欧美一区二区三区成人| 久热精品视频在线| 西西裸体人体做爰大胆久久久| 欧美高清不卡在线| 亚洲国产精品一区二区三区| 欧美视频在线一区二区三区| 国产精品免费看久久久香蕉| 欧美日本一道本在线视频| 国产亚洲在线| 久久久xxx| 久久久伊人欧美| 黄色日韩网站| 欧美国内亚洲| 欧美华人在线视频| 亚洲国产小视频| 激情成人综合| 久久综合伊人77777尤物| 亚洲欧美一区二区三区极速播放| 欧美风情在线| 亚洲在线1234| 久久婷婷久久| 亚洲欧美偷拍卡通变态| 亚洲欧美电影院| 亚洲韩国日本中文字幕| 欧美成人综合网站| 欧美激情一区二区三区| 狼人天天伊人久久| 一本色道88久久加勒比精品| 猛男gaygay欧美视频| 久久综合给合久久狠狠狠97色69| 一区二区三区在线视频播放| 欧美一区二区免费| 欧美jizzhd精品欧美喷水| 99综合精品| 另类激情亚洲| 久久久久久夜| 国产麻豆视频精品| 一片黄亚洲嫩模| 一本色道久久综合亚洲精品婷婷 | 久久爱另类一区二区小说| 国产一区二区三区黄| 欧美高清在线一区| 狠狠干综合网| 久久精品视频免费| 久久久久久久久久久一区| 欧美日韩国产成人| 亚洲精品日日夜夜| 久久免费午夜影院| 老牛嫩草一区二区三区日本| 欧美喷潮久久久xxxxx| 美女精品在线| 亚洲乱码一区二区| 国产精品久久久久久av下载红粉| 亚洲国产精品一区二区久| 今天的高清视频免费播放成人 | 91久久一区二区| 久久麻豆一区二区| 鲁大师成人一区二区三区| 国产精品久久久久久久久借妻| 一区二区三区自拍| 欧美在线视频不卡| 久久精品国产999大香线蕉| 国产精品乱人伦中文| 一级成人国产| 欧美日韩一区二区在线播放| 久久久xxx| 亚洲国产天堂久久综合| 久久一二三区| 亚洲国产欧美在线| 亚洲午夜精品国产| 国产精品夜色7777狼人| 亚洲丝袜av一区| 午夜精品久久久久久99热| 欧美日韩精品一本二本三本|