Ejemplo n.º 1
0
            // 現在の秀丸の編集中のテキストで、カーソルがある行だけのテキスト。
            // 元が何の文字コードでも関係なく秀丸がwchar_tのユニコードで返してくれるので、
            // String^型に入れておけば良い。
            private static String GetLineText()
            {
                if (version < 866)
                {
                    OutputDebugStream(ErrorMsg.MethodNeed866);
                    return("");
                }

                HmCursurPos p = GetCursorPos();

                String        curstr  = "";
                IntPtr        hGlobal = pGetLineTextUnicode(p.lineno);
                HGlobalStatus hgs     = HGlobalStatus.None;

                if (hGlobal != null)
                {
                    try
                    {
                        IntPtr ret = GlobalLock(hGlobal);
                        hgs    = HGlobalStatus.Lock;
                        curstr = Marshal.PtrToStringUni(ret);
                        GlobalUnlock(hGlobal);
                        hgs = HGlobalStatus.Unlock;
                        GlobalFree(hGlobal);
                        hgs = HGlobalStatus.Free;
                    }
                    catch (Exception e)
                    {
                        OutputDebugStream(e.Message);
                    }
                    finally
                    {
                        switch (hgs)
                        {
                        // ロックだけ成功した
                        case HGlobalStatus.Lock:
                        {
                            GlobalUnlock(hGlobal);
                            GlobalFree(hGlobal);
                            break;
                        }

                        // アンロックまで成功した
                        case HGlobalStatus.Unlock:
                        {
                            GlobalFree(hGlobal);
                            break;
                        }

                        // フリーまで成功した
                        case HGlobalStatus.Free:
                        {
                            break;
                        }
                        }
                    }
                }
                return(curstr);
            }
Ejemplo n.º 2
0
            // columnやlinenoはエディタ的な座標である。
            private static HmCursurPos GetCursorPos()
            {
                if (version < 866)
                {
                    OutputDebugStream(ErrorMsg.MethodNeed866);
                    return(new HmCursurPos(-1, -1));
                }

                int column = -1;

                int lineno  = -1;
                int success = pGetCursorPosUnicode(ref lineno, ref column);

                if (success > 0)
                {
                    HmCursurPos p = new HmCursurPos(lineno, column);
                    return(p);
                }

                return(new HmCursurPos(-1, -1));
            }