<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    京山游俠

    專(zhuān)注技術(shù),拒絕扯淡
    posts - 50, comments - 868, trackbacks - 0, articles - 0
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
    使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(一):快速起步
    使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(二):菜單、工具欄和對(duì)話(huà)框
    使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(三):視圖和透視圖

    看完這篇文章,可以開(kāi)發(fā)如下的界面:

    沒(méi)有嵌入Active X控件的視圖:
    rcp29.JPG

    嵌入瀏覽器控件,并顯示m.tkk7.com的主頁(yè):
    rcp30.JPG

    在Windows系統(tǒng)下,OLE和Active X控件是兩個(gè)非常吸引人的技術(shù),它們的基礎(chǔ)都是COM。OLE的體驗(yàn),就是平時(shí)我們可以把Excel表格嵌入Word文檔,或者把PDF嵌入瀏覽器顯示一樣,而Active X控件更是無(wú)處不在,做VB開(kāi)發(fā)和網(wǎng)頁(yè)開(kāi)發(fā)的人都應(yīng)該很熟悉。使用Windows系統(tǒng)中豐富的Active X控件資源,我們可以實(shí)現(xiàn)功能非常強(qiáng)大的程序。

    在Windows平臺(tái)下,SWT圖形工具包提供了對(duì)OLE的支持,Active X控件和OLE文檔都可以被很方便地嵌入SWT窗口部件或者JFace部件,在這里,我只討論將Active X控件插入視圖。

    在一個(gè)視圖中包含一個(gè)Active X控件需要兩個(gè)對(duì)象的支持,即一個(gè)OleFrame和一個(gè)OleClientSite對(duì)象。如果需要?jiǎng)?chuàng)建一個(gè)OLE應(yīng)用,需要先后創(chuàng)建他們。創(chuàng)建OleFrame對(duì)象比較簡(jiǎn)單,OleFrame類(lèi)定義在org.eclipse.swt.ole.win32中,創(chuàng)建OleFrame對(duì)象只需要簡(jiǎn)單的new就可以,如下:
    1OleFrame?frame?=?new?OleFrame(parent,?SWT.NONE);
    在這個(gè)構(gòu)造函數(shù)中,第一個(gè)參數(shù)指的是該OleFrame的母窗口部件,即Active X控件將要被嵌入的窗口部件。

    在OleFrame的基礎(chǔ)上就可以創(chuàng)建OleClientSite對(duì)象,創(chuàng)建該對(duì)象需要知道控件的programID,這個(gè)ID的信息存放在windows的注冊(cè)表中。在我們這篇文章的例子中,我們使用的是一個(gè)瀏覽器控件,那么我們?cè)趺粗罏g覽器控件的ProgID呢?我使用的是Visual Studio 2003自帶的OleView工具,如下圖:
    rcp26.JPG

    可以看到,Microsoft Web 瀏覽器的ProgID為Shell.Explorer.2,我們可以這樣創(chuàng)建OleClientSite對(duì)象:
    1OleClientSite?client?=?new?OleClientSite(frame,SWT.NONE,"Shell.Explorer.2");

    創(chuàng)建對(duì)象后,還需要激活,才能夠在RCP程序中對(duì)這些OLE對(duì)象進(jìn)行操作。如下:
    client.doVerb(OLE.OLEIVERB_SHOW);

    然后,我們需要操作這個(gè)Active X控件,調(diào)用它的方法,或者設(shè)置它的屬性。比如在此例中,我們需要調(diào)用瀏覽器控件的navigate方法,以便我們的瀏覽器控件顯示m.tkk7.com的主頁(yè)。對(duì)Active X控件的操作通過(guò)OleAutomation對(duì)象來(lái)實(shí)現(xiàn),創(chuàng)建OleAutomation對(duì)象的方法如下:
    OleAutomation?automation?=?new?OleAutomation(client);
    再通過(guò)automation.invoke()來(lái)調(diào)用Active X控件的方法,其中invoke方法有幾種重載形式,有只帶一個(gè)int參數(shù)的,也有帶int和Variant[]兩個(gè)參數(shù)的,其中的int參數(shù)表示要調(diào)用的Active X控件的方法的ID,Variant[]參數(shù)就是要傳遞給Active X控件的方法的參數(shù)。

    這里我們要說(shuō)一說(shuō)Variant類(lèi),這個(gè)類(lèi)提供了多個(gè)構(gòu)造函數(shù),可以方便的將int,float,long,double,string等等基本數(shù)據(jù)類(lèi)型封裝為Variant,比如我們要傳遞給瀏覽器控件的navigate方法的地址參數(shù):
    Variant?url?=?new?Variant("http://m.tkk7.com");

    那么我們?cè)趺床拍艿玫紸ctive X控件的方法的ID,還有它需要哪些參數(shù)呢?還是要借助前面提到的OleView.exe工具,如下圖:
    rcp27.JPG

    rcp28.JPG

    可以看到,Navigate方法的id為0x00000068,轉(zhuǎn)化為十進(jìn)制就是104,而它需要的參數(shù)第一個(gè)是一個(gè)字符串,其它的都是可選的,因此,我們可以這樣調(diào)用它的方法:
    Variant?url?=?new?Variant("http://m.tkk7.com/");
    automation.invoke(
    104,?new?Variant[]{url});

    下面,貼出本文例子中的視圖的代碼和菜單Action的代碼,在寫(xiě)這篇文章之前,我一直在探索怎樣從菜單控制視圖,后來(lái)發(fā)現(xiàn)是這樣:
    ?window.getActivePage.getViewReferences();
    雖然我不知道Eclipse中Page的概念究竟是什么,但是只要能找到我要操作的視圖就可以了。視圖的代碼如下:

    OleView.java
    ?1package?cn.blogjava.youxia.views;
    ?2
    ?3import?org.eclipse.jface.action.IMenuManager;
    ?4import?org.eclipse.jface.action.IToolBarManager;
    ?5import?org.eclipse.swt.SWT;
    ?6import?org.eclipse.swt.widgets.Composite;
    ?7import?org.eclipse.ui.part.ViewPart;
    ?8import?org.eclipse.swt.ole.win32.OleFrame;
    ?9
    10public?class?OleView?extends?ViewPart?{
    11????public?OleFrame?frame;
    12
    13????public?static?final?String?ID?=?"cn.blogjava.youxia.views.OleView";?//$NON-NLS-1$
    14
    15????/**
    16?????*?Create?contents?of?the?view?part
    17?????*?@param?parent
    18?????*/

    19????@Override
    20????public?void?createPartControl(Composite?parent)?{
    21????????frame?=?new?OleFrame(parent,?SWT.NONE);
    22????????
    23????????//
    24????????createActions();
    25????????initializeToolBar();
    26????????initializeMenu();
    27????}

    28
    29????/**
    30?????*?Create?the?actions
    31?????*/

    32????private?void?createActions()?{
    33????????//?Create?the?actions
    34????}

    35
    36????/**
    37?????*?Initialize?the?toolbar
    38?????*/

    39????private?void?initializeToolBar()?{
    40????????IToolBarManager?toolbarManager?=?getViewSite().getActionBars()
    41????????????????.getToolBarManager();
    42????}

    43
    44????/**
    45?????*?Initialize?the?menu
    46?????*/

    47????private?void?initializeMenu()?{
    48????????IMenuManager?menuManager?=?getViewSite().getActionBars()
    49????????????????.getMenuManager();
    50????}

    51
    52????@Override
    53????public?void?setFocus()?{
    54????????//?Set?the?focus
    55????}

    56
    57}

    58

    在這個(gè)視圖中,我創(chuàng)建了OleFrame對(duì)象,并讓它是public的,至于OleClientSite和OleAutomation對(duì)象,我們?cè)邳c(diǎn)擊菜單項(xiàng)后創(chuàng)建。菜單動(dòng)作的代碼如下:

    OpenFileAction.java
    ?1package?cn.blogjava.youxia.actions;
    ?2
    ?3
    ?4import?org.eclipse.jface.action.IAction;
    ?5import?org.eclipse.jface.viewers.ISelection;
    ?6import?org.eclipse.swt.SWT;
    ?7import?org.eclipse.swt.ole.win32.OLE;
    ?8import?org.eclipse.swt.ole.win32.OleClientSite;
    ?9import?org.eclipse.ui.IWorkbenchWindow;
    10import?org.eclipse.ui.IWorkbenchWindowActionDelegate;
    11import?org.eclipse.ui.*;
    12import?cn.blogjava.youxia.views.*;
    13import?org.eclipse.swt.ole.win32.OleAutomation;
    14import?org.eclipse.swt.ole.win32.Variant;
    15
    16public?class?OpenFileAction?implements?IWorkbenchWindowActionDelegate?{
    17
    18????IWorkbenchWindow?window;
    19????
    20????public?void?dispose()?{
    21????????//?TODO?自動(dòng)生成方法存根
    22
    23????}

    24
    25????public?void?init(IWorkbenchWindow?window)?{
    26????????//?TODO?自動(dòng)生成方法存根
    27????????this.window?=?window;
    28
    29????}

    30
    31????public?void?run(IAction?action)?{
    32????????//?TODO?自動(dòng)生成方法存根
    33????????
    34????????IViewReference[]?vfs?=?window.getActivePage().getViewReferences();
    35????????IViewPart?vw;
    36????????for(int?i=0;?i<vfs.length;?i++){
    37?????????????vw?=?vfs[i].getView(false);
    38?????????????if(vw.getTitle().equals("使用Active?X控件")){
    39????????????????????OleClientSite?client?=?new?OleClientSite(((OleView)vw).frame,SWT.NONE,"Shell.Explorer.2");
    40????????????????????client.doVerb(OLE.OLEIVERB_SHOW);
    41????????????????????OleAutomation?oa?=?new?OleAutomation(client);
    42????????????????????Variant?str?=?new?Variant("http://m.tkk7.com/");
    43????????????????????oa.invoke(104,?new?Variant[]{str});
    44????????
    45?????????????}

    46????????}

    47????????
    48????}

    49
    50????public?void?selectionChanged(IAction?action,?ISelection?selection)?{
    51????????//?TODO?自動(dòng)生成方法存根
    52
    53????}

    54
    55}

    56

    根據(jù)前面幾節(jié)將的內(nèi)容配置plugin.xml和修改Perspective.java的代碼,就可以看到文章開(kāi)頭的效果了。

    評(píng)論

    # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(四):在Windows中使用Active X控件  回復(fù)  更多評(píng)論   

    2007-08-14 14:48 by 同聲翻譯公司
    報(bào)考條件、考試程序及招生情況

      口譯專(zhuān)業(yè)屬應(yīng)用類(lèi)研究生,考試不同于其他專(zhuān)業(yè),具有很強(qiáng)的實(shí)踐性。據(jù)筆者了解,入學(xué)考試多不開(kāi)列參考書(shū)目,筆試也不考理論知識(shí)。筆試內(nèi)容多為段落改寫(xiě)、填空、寫(xiě)作、英漢雙向筆譯、綜合知識(shí)測(cè)試等實(shí)際操作的內(nèi)容。這些全靠考生平時(shí)的知識(shí)積淀和能力培養(yǎng)。

      該考試另外一個(gè)特殊性是該專(zhuān)業(yè)錄取時(shí)以考生的復(fù)試成績(jī)?yōu)橹鳌I虾M鈬?guó)語(yǔ)大學(xué)翻譯學(xué)院院長(zhǎng)柴明熲教授告訴筆者,學(xué)員在入學(xué)考試時(shí)除了要通過(guò)筆試外,口試即復(fù)試是選拔人才的重中之重。只有在復(fù)試中才能對(duì)英文聽(tīng)力理解和口語(yǔ)表達(dá)能力進(jìn)行客觀的考查。

      據(jù)了解,北外的復(fù)試包括:

      1.視譯:將一篇英文稿口頭翻譯成漢語(yǔ)。

      2.復(fù)述:先聽(tīng)兩遍英文錄音(時(shí)間:3—5分鐘,可作筆記),再將聽(tīng)到的內(nèi)容用英文復(fù)述一遍。

      3.面試。

      上外復(fù)試包括:

      1.演講:從考試委員會(huì)提供的若干題目中挑選其中之一,作2—3分鐘的即興演講。

      2.復(fù)述:聽(tīng)1—2分鐘的演講,然后以另一種語(yǔ)言用自己的話(huà)復(fù)述演講內(nèi)容。

      3.視譯:聽(tīng)一篇短文,瀏覽該文1分鐘,然后將其內(nèi)容口頭譯出。

      4.問(wèn)答與對(duì)話(huà)。

    # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(四):在Windows中使用Active X控件  回復(fù)  更多評(píng)論   

    2008-05-08 14:42 by hello
    尊敬的博主,你好!

    本人想在view中以ole或 activex方式使用word的 插入->對(duì)象。。。功能,即點(diǎn)擊view中一個(gè)按鈕,其響應(yīng)的事件是彈出word中的一個(gè)功能界面(即word的插入->對(duì)象。。。點(diǎn)擊所出來(lái)的界面 ),然后選中某個(gè)對(duì)象(如一個(gè)圖片對(duì)象)后,讓它顯示在我的view中的image控件上。不知道此功能能否實(shí)現(xiàn),該如何去做?
    另外還有一個(gè)怪現(xiàn)象想請(qǐng)教博主:
    1 本人的RCP項(xiàng)目名在開(kāi)機(jī)后出現(xiàn)報(bào)錯(cuò)(紅叉),但結(jié)果都可以運(yùn)行出來(lái),無(wú)任何錯(cuò)誤信息顯示于控制臺(tái)。(不知道是否與我前天晚上突然斷電有關(guān))
    2 我修改程序,在主菜單上加一個(gè)新的菜單項(xiàng),但運(yùn)行結(jié)果始終出不來(lái),也無(wú)報(bào)錯(cuò)提示(包名上的錯(cuò)誤依舊),但導(dǎo)出產(chǎn)品后運(yùn)行產(chǎn)品則出現(xiàn)正確的結(jié)果,即:菜單項(xiàng)出現(xiàn)。請(qǐng)問(wèn)這是什么原因啊?該如何解決次問(wèn)題?
    多謝指點(diǎn)了!!不甚感激!!
    emaiL:ljju123@163.com

    # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(四):在Windows中使用Active X控件  回復(fù)  更多評(píng)論   

    2008-05-15 17:40 by fy_kenny
    可能你的環(huán)境中缺少了某個(gè)包了.

    # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(四):在Windows中使用Active X控件  回復(fù)  更多評(píng)論   

    2008-08-14 09:03 by QQ:71163952
    如果我要在SWT中同時(shí)顯示兩個(gè)以上的IE界面,怎么辦。

    # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(四):在Windows中使用Active X控件  回復(fù)  更多評(píng)論   

    2009-04-02 17:20 by 創(chuàng)意產(chǎn)品網(wǎng)
    收藏先

    # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(四):在Windows中使用Active X控件  回復(fù)  更多評(píng)論   

    2010-12-15 19:23 by luobo
    真在了解olebrowser,謝謝了

    # re: 使用Eclipse RCP進(jìn)行桌面程序開(kāi)發(fā)(四):在Windows中使用Active X控件  回復(fù)  更多評(píng)論   

    2014-03-19 10:15 by tyl
    發(fā)現(xiàn)樓主寫(xiě)的很詳細(xì),學(xué)習(xí)了。謝謝。
    主站蜘蛛池模板: 亚洲精品国产福利一二区| 成年女人毛片免费视频| 手机看片国产免费永久| 久久国产乱子伦精品免费一| 国产精品永久免费10000| 午夜一区二区免费视频| 伊人久久综在合线亚洲91| 亚洲国产一区二区a毛片| 亚洲欧美日韩一区二区三区| 国产免费人成视频尤勿视频| 97热久久免费频精品99| 亚洲综合久久一本伊伊区| 国产精品偷伦视频免费观看了| 免费精品人在线二线三线区别| 国产精品亚洲二区在线观看| 亚洲日本久久久午夜精品| 大地资源网高清在线观看免费 | 中文成人久久久久影院免费观看| 久久亚洲国产成人影院网站 | 一本无码人妻在中文字幕免费| 日本亚洲国产一区二区三区| 黄色网址在线免费| 亚洲国产成人久久精品99 | 亚洲Av无码国产一区二区| 免费福利电影在线观看| 精品亚洲成a人片在线观看少妇| 日韩在线视频线视频免费网站| 真人做人试看60分钟免费视频| 亚洲午夜精品久久久久久app | 亚洲精品无码永久在线观看你懂的 | 日韩在线不卡免费视频一区| 中文字幕亚洲综合久久菠萝蜜| 免费观看成人久久网免费观看| 亚洲国产模特在线播放| 久9久9精品免费观看| 亚洲女同成av人片在线观看| 日本一区二区三区在线视频观看免费 | AV大片在线无码永久免费| 精品一区二区三区免费毛片| 毛片a级毛片免费观看品善网| 美女的胸又黄又www网站免费|