尝试从notepad ++ .NET插件创建一个新选项卡

时间:2013-05-08 07:10:02

标签: c# plugins notepad++ scintilla

我正在编写Notepad ++插件,需要为新文件创建一个新选项卡。我无法在文档中找到任何涉及此内容的内容。

我最接近的是:

IntPtr curScintilla = PluginBase.GetCurrentScintilla();
IntPtr documentPtr = Win32.SendMessage(curScintilla, SciMsg.SCI_CREATEDOCUMENT, 1, 1);
Win32.SendMessage(curScintilla, SciMsg.SCI_SETDOCPOINTER, 0, documentPtr);

但这在当前标签中起作用(我认为它正在创建一个新文档并将当前标签指向该标签)。

我正在阅读http://www.scintilla.org/ScintillaDoc.html的“多个观点”部分,但我无法获得上述内容。我通常不在C#甚至Windows中工作,所以我可能会遗漏一些明显的东西。我尝试查看现有插件的示例,但大多数插件似乎是用C ++编写的,而不是C#。

任何指导意见。

感谢。

2 个答案:

答案 0 :(得分:0)

我没有经历过scintilla。但我用简单的方法。我使用它进行创建,您可能需要查找有关发送消息的更多信息。

如果在开始之前目录中不存在该文件,请创建该文件。否则它会要求用户确认。

该过程的参数应与第一个和下一个标签不同:

File.Create(yourNewFile); //or yourNextNewFile in case of second, third, so on..
Process notepadPlus = new Process();

notepadPlus.StartInfo.FileName = "notepad++.exe";

对于第一个文件用作(新会话的新实例 - 没有任何旧标签):

notepadPlus.StartInfo.Arguments = @"-multiInst -nosession yourNewFile";

对于下一个文件,请使用as(仅创建新选项卡):

notepadPlus.StartInfo.Arguments = @"yourNextNewFile";

/* Start the process */
notepadPlus.Start();

答案 1 :(得分:0)

您必须向Scintilla控件发送消息,而不是向记事本本身发送消息。 像这样:

Win32.SendMessage(PluginBase.nppData._nppHandle, NppMsg.NPPM_MENUCOMMAND, 0, NppMenuCmd.IDM_FILE_NEW);

更多信息here,包括使用过的常量。