我正在尝试获取光标所在的行号。但是我没有找到简单的方法来获得该线。相反,我试图获取当前位置,然后使用SCI_LINEFROMPOSITION
将其转换为行。
::SendMessage(nppData._nppHandle,SCI_GETCURRENTPOS,0,(LPARAM)&first);
::SendMessage(nppData._scintillaMainHandle,SCI_GETCURRENTPOS,0,(LPARAM)&second);
::SendMessage(nppData._scintillaSecondHandle,SCI_GETCURRENTPOS,0,(LPARAM)&third);
这些调用中的每一个都不会更改最后一个参数的值。很遗憾,我找不到SCI_GETCURRENTPOS
的示例。我能够将文本插入到文件中,因此我可以通过这种方式查看值:
std::wstringstream wss;
wss << "First value read" << first << std::endl;
wss << "Second value read" << second << std::endl;
wss << "Third value read" << third << std::endl;
insertTextIntoCurrentFile(wss.str().c_str());
我该如何获得当前行?在这种情况下,HWND
的预期SendMessage
是哪个?
答案 0 :(得分:2)
我能够通过搜索记事本加上讨论来解决这个问题。
答案是从SendMessage
读取返回值。
获取Scintilla HWND
:
int currentEdit;
::SendMessage(nppData._nppHandle, NPPM_GETCURRENTSCINTILLA, 0, (LPARAM)¤tEdit);
HWND curScint = (currentEdit == 0 ) ?
nppData._scintillaMainHandle:nppData._scintillaSecondHandle;
获取当前光标位置:
int cursorPosition = ::SendMessage(curScint,SCI_GETCURRENTPOS,0,0);
答案 1 :(得分:2)
以下答案是您的初始问题和您自己答案的组合的澄清版本(这使我找到了这个完整的解决方案)。
// Position of the cursor in the entire buffer
int cursorPosition = ::SendMessage(nppData._scintillaMainHandle, SCI_GETCURRENTPOS, 0, 0);
// Line position of the cursor in the editor
int currentLine = ::SendMessage(nppData._nppHandle, NPPM_GETCURRENTLINE, 0, 0);
// Column position of the cursor in the editor
int currentColumn = ::SendMessage(nppData._nppHandle, NPPM_GETCURRENTCOLUMN, 0, 0);
答案 2 :(得分:0)
这是一种无需调用SendMessage()
的方法,只需使用methods from standard Scintilla API –伪代码如下:
currentLineNumber = editor.SCI_LINEFROMPOSITION(editor.SCI_GETCURRENTPOS())
这对于将代码保持在较高级别或用于其他语言(例如N ++ Python Script插件)中的脚本很有用,因为在这些语言中,调用已记录的API很容易,但是SendMessage()
的方式可能会更困难。 (经过测试-可以。)