ウィンドウのまばたきカーソルの形状をデフォルトの垂直 ( | ) から dos で使用されているような水平 ( _ ) に変更する方法。
それを気にする良い機能はありますか?
OS:win7
これは実際にはカーソルではなくキャレットと呼ばれます。それがおそらく混乱の元であり、解決策を探してもあまり役に立たなかった理由です。NullPonyPointer のコメントは、この一般的な混乱も反映しています。関数は確かにマウスカーソルを変更したいものですが、キャレットを変更するには機能しません。SetCursor
幸いなことに、キャレットで動作する Windows 関数のグループ全体があります: CreateCaret
、、、、および. まばたき時間を操作する方法は他にもありますが、ユーザーの現在の設定 (これがデフォルトになります) に固執することをお勧めします。ShowCaret
HideCaret
SetCaretPos
DestroyCaret
まず、背景を少し。キャレットとキャレットの使用に関する 2 つの MSDN の紹介記事を読むことを強くお勧めします。しかし、ここに簡単な要約があります: キャレットはウィンドウによって所有されています。特に、現在フォーカスがあるウィンドウ。このウィンドウは、テキスト ボックス コントロールのようなものになる可能性があります。ウィンドウがフォーカスを受け取ると、使用するキャレットを作成し、フォーカスを失うと、そのキャレットを破棄します。明らかに、これを手動で行わなければ、デフォルトの実装を受け取ります。
では、サンプルコードです。私はキャンディ マシンのインターフェイスが好きなので、関数でラップします。
bool CreateCustomCaret(HWND hWnd, int width, int height, int x, int y)
{
// Create the caret for the control receiving the focus.
if (!CreateCaret(hWnd, /* handle to the window that will own the caret */
NULL, /* create a solid caret using specified size */
width, /* width of caret, in logical units */
height)) /* height of caret, in logical units */
return false;
// Set the position of the caret in the window.
if (!SetCaretPos(x, y))
return false;
// Show the caret. It will begin flashing automatically.
if (!ShowCaret(hWnd))
return false;
return true;
}
次に、WM_SETFOCUS
、EN_SETFOCUS
、または同様の通知に応答して、CreateCustomCaret
関数を呼び出します。WM_KILLFOCUS
、EN_KILLFOCUS
、または別の同様の通知に応答して、 を呼び出しますDestroyCaret()
。
または、CreateCustomCaret
ビットマップからキャレットを作成することもできます。次のオーバーロードを提供する場合があります。
bool CreateCustomCaret(HWND hWnd, HBITMAP hbmp, int x, int y)
{
// Create the caret for the control receiving the focus.
if (!CreateCaret(hWnd, /* handle to the window that will own the caret */
hBmp, /* create a caret using specified bitmap */
0, 0)) /* width and height parameters ignored for bitmap */
return false;
// Set the position of the caret in the window.
if (!SetCaretPos(x, y))
return false;
// Show the caret. It will begin flashing automatically.
if (!ShowCaret(hWnd))
return false;
return true;
}