独自に作成したウィンドウコントロールにキャレットを表示します。
キャレットの表示はWindows APIを用います。
用いるAPIは以下になります
- CreateCaret
- DestroyCaret
- SetCaretpos
- ShowCaret
- HideCaret
コード
コンポーネント側
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Security.Permissions;
using System.Drawing;
using System.Runtime.InteropServices;
namespace WinformVisualComponent
{
public partial class VisualComponent : Control
{
private static int counter = 0;
[DllImport("user32.dll")]
static extern bool CreateCaret(IntPtr hWnd, IntPtr hBitmap, int nWidth, int nHeight);
[DllImport("user32.dll")]
static extern bool DestroyCaret();
[DllImport("user32.dll")]
static extern bool SetCaretPos(int X, int Y);
[DllImport("user32.dll")]
static extern bool ShowCaret(IntPtr hWnd);
[DllImport("user32.dll")]
static extern bool HideCaret(IntPtr hWnd);
public VisualComponent()
{
InitializeComponent();
}
public VisualComponent(IContainer container)
{
container.Add(this);
InitializeComponent();
}
public void CreateShowCaret()
{
CreateCaret(this.Handle, IntPtr.Zero, 2, 16);
SetCaretPos(32, 32);
ShowCaret(this.Handle);
}
public void CaretHide()
{
HideCaret(this.Handle);
}
}
}
解説
public void CreateShowCaret()
{
CreateCaret(this.Handle, IntPtr.Zero, 2, 16);
SetCaretPos(32, 32);
ShowCaret(this.Handle);
}
CreateCaret APIを呼び出し、キャレットを作成します。第一引数にキャレットを表示するコントロールのウィンドウハンドル、第二引数はNULLを第三引数はキャレットの幅、第四引数はキャレットの高さを与えます。キャレットの作成後SetCaretPos APIを呼び出しキャレットの表示位置を設定します。表示位置の設定後にShowCaret APIを呼び出しキャレットをコントロールに表示します。
public void CaretHide()
{
HideCaret(this.Handle);
}
HideCaret APIを呼び出しキャレットを非表示にします。
アプリケーション側
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WinformVisualComponent
{
public partial class SubFormCaret : Form
{
public SubFormCaret()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
visualComponent1.CreateShowCaret();
visualComponent1.Focus();
}
private void button2_Click(object sender, EventArgs e)
{
visualComponent1.CaretHide();
}
}
}
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2024-01-06
作成日: 2011-12-01