1

背景を透明にできる独自のネイティブ win32 C++ チェックボックスを作成しようとしています。アイデアは、ウィンドウ/ウィジェットを Windows XP スタイルのチェックボックスとまったく同じように見せることですが、背景を透明にすることができます。

私の問題:テキスト ボックスに目盛りを描画すると、「目盛り」の線がピクセル化されてギザギザに見えます - どのように見えるかについては、下の図を参照してください。実際のチェックボックスのチェックのように滑らかに見えません。

左のチェックボックスは私のもので、右は複製しようとしているデフォルトのウィンドウです。 ここに画像の説明を入力

目盛りを滑らかにし、ピクセル化しないようにするにはどうすればよいですか。目盛りを描画するために使用できる Win32 GDI 関数は何ですか。GDI で目盛りを描画する代わりに、ビットマップ イメージを使用する必要がありますか? 現在、目盛りを描画するために PolylineTo() を使用しています。PolylineToEx() を使用する必要がありますか?

アドバイスをいただければ幸いです。

目盛りを描画するためのコード (このコードは WM_PAINT にあります):

 HGDIOBJ hPen      = CreatePen(PS_SOLID, 2, RGB(45,45,45)); //ExtCreatePen(PS_COSMETIC, dwPenStyle[i], 1, &lb, 0, NULL); 
 HGDIOBJ hPenOld   = SelectObject(hdc, hPen); 
 POINT tickPnts[3] = {{3,((height-CHECK_RECTH)/2)+6}, {5,((height-CHECK_RECTH)/2)+9}, {9,((height-CHECK_RECTH)/2)+2}};
 MoveToEx(hdc, tickPnts[0].x, tickPnts[0].y, NULL);
 PolylineTo(hdc, tickPnts, 3);
 SelectObject(hdc, hPenOld); 
 DeleteObject(hPen); 
4

2 に答える 2

2

Windows はMarlettフォントを使用して、チェックボックスのチェックマーク、ウィンドウ フレーム ボタン、およびその他のスケーラブルな UI 要素をレンダリングします。アンチエイリアシングを使用してフォントをレンダリングし、エッジを滑らかにすることができます。

(とにかく、これは確かに真実でした。Windows 7 の新しいウィンドウ フレーム ボタンがフォントを使用しているかどうかはわかりませんが、フォントはまだ存在しています。)

GDI はアンチエイリアシングを行わないため、線がギザギザに見えます。

于 2012-06-13T12:50:00.600 に答える
-1

標準のチェックボックスは透明にすることができます。例については、このページを参照してください。

http://us.generation-nt.com/answer/transparent-background-color-checkbox-help-27571202.html

Winforms では、背景色を に設定するだけですTransparent

于 2012-06-13T12:34:39.787 に答える