我正在编写自己的控件。它包含插入符号。我使用
SetCaretPos()
函数来移动插入符号。当我在窗口内移动插入符号时效果很好:
但是当我为
SetCaretPos()
设置负 y 坐标时,插入符号会绘制在控制窗口之外:
SetCaretPos(10, -5);
然后我使用
IntersectClipRect()
函数创建新的剪切区域:
RECT rcClip, rcClient;
GetClientRect(hEditWnd_MultyLine, &rcClient);
CopyRect(&rcClip, &rcClient);
rcClip.left += 2;//add left margin
rcClip.right -= 2;//add right margin
rcClip.top += 2;//add top margin
rcClip.bottom -= 2;//add bottom margin
HDC _hdc = GetDC(mywnd_hwnd);
IntersectClipRect(_hdc, rcClip.left, rcClip.top, rcClip.right, rcClip.bottom);
ReleaseDC(mywnd_hwnd, _hdc);
它仅适用于像
FillRect()
这样的图形操作,但它对插入符号绘制没有影响 - 没有插入符号剪切:
我的问题是 - 当 y 坐标为负数时如何剪辑插入符号绘图? 我需要这个:
Afaik,你不能这么简单地做到这一点。剪切区域是 GDI 的一部分,插入符号属于“窗口”——本机控件。
从 WinForms 和 C# 提供的功能来看,我认为有几种方法可以做到这一点: