2012-04-22 38 views

回答

3

由於我把你帶入使用Scintilla的的(希望獎勵:-))麻煩誰的人,我在這裏。


比方說,我們創建了一個ScintillaView子類,命名爲ppScintillaEditor。 該文件應該有一個.mm擴展(如ppScintillaEditor.mm

的代碼將大致是這樣的......

接口

#import "Scintilla/ScintillaView.h" 

@interface ppScintillaEditor : ScintillaView 
{ 
    // your iVars 
} 

// your properties/methods/whatever 

現在,作爲實施部分,請記住放置一些初始化方法來正確設置視圖(例如伴隨着Scintilla-cocoa;我的意思是測試項目)


旁註:當然,你可以創建子類,類別或任何在頂部ScintillaView類,幾乎根據你所需要的 - 我舉個例子,有創建一個單獨的類別只是爲了你可以注意到,對於一些更先進的Scintilla操作,雖然它在那裏,但它可能需要一些拋光才能更可可友好,所以在這裏你去...)


現在,最後但並非最不重要......

決心"bunch of errors related to the C++ class keyword and so on",正如我在其他視頻迴應您的評論已經證明,所有你需要做的就是:

  • 轉到您的項目構建設置
  • 蘋果LL VM編譯器3.0 - 預處理
  • 選項預處理宏
  • 添加到這兩個調試發佈

    SCI_NAMESPACE SCI_LEXER 
    

就是這樣。 :-)


提示:上述由Scintilla的定義,以避免C和非C元素之間的衝突,像上面...因此,所需要的是,以通知預處理器,其餘是照顧....

1

,你會創造出具有界面的應用程序需要objc類,然後實現並添加實例變量和實施 - 一切的背後彙編防火牆,所以objC++源代碼不包含在頭。您的實施將提供任何必要的轉換。

它就像你已經完成,但你從你的包裝的標題中刪除scintilla頭 - 他們只對你的包裝的實現可見。

更新

解說了一種可能的方法:

MONScintillaWrapper.h

// no c++/scintilla sources should be included in this header 
#import <Foundation/Foundation.h> 

@interface MONScintillaWrapper : NSObject 

- (void)setBackgroundColor:(NSColor *)pColor;  

@end 

MONScintillaWrapper.mm

#進口「MONScintillaWrapper .H」

@implementation MONScintillaWrapper 
{ 
    scintilla::t_thing scintillaThing; 
} 

- (void)setBackgroundColor:(NSColor *)pColor 
{ 
...convert pColor to a scintilla color and pass that to scintillaThing... 
} 

@end 
+0

對不起,我仍然有點綠色遵循這一點。我的實現是'.mm'文件或'.m'文件?目前它只是一個'.m'文件,我必須將它重命名爲'.mm'才能使用? – horseyguy 2012-04-22 09:19:42

+0

yes - 此包裝器對象的'.mm'。然後在這裏聲明你的ivars(scintilla對象):'@implementation MONScintillaWrapper {scintilla :: t_thingy scintillaThingy; }'。這樣,你的程序的其餘部分不需要看你的scintilla ivars或C++源代碼。 – justin 2012-04-22 09:39:34

+0

擴展答案來說明這種方法。 – justin 2012-04-22 09:46:59