2

我正在编写一个 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#。

任何指导表示赞赏。

谢谢。

4

2 回答 2

1

我没有经历过闪烁。但我使用了简单的方法。我用它来创建,您可能需要查找更多信息以发送消息。

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

该过程的参数应该与第一个和下一个选项卡不同:

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();
于 2013-05-08T08:44:47.680 回答
1

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

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

此处提供更多信息,包括使用的常量。

于 2014-12-08T22:07:33.243 回答