我正在编写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#。
任何指导意见。
感谢。
答案 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,包括使用过的常量。