円形の押しボタンを作成しようとしています。これまでの私のプロセスは次のとおりです。
BS_BITMAP スタイル ボタンを作成します。
hButton = CreateWindow(L"button",L"Label",WS_CHILD|WS_VISIBLE|BS_BITMAP,
122,363,65,65,hWnd,(HMENU)BUTTON_ID,NULL,NULL);
LoadImage でビットマップを読み込みます。ビットマップは正方形ですが、中央に円を表示したいだけです (これについては後で詳しく説明します)。
buttonImage = (HBITMAP)LoadImage(hInstance,L"button.bmp",IMAGE_BITMAP,65,65,
LR_LOADFROMFILE|LR_CREATEDIBSECTION);
ボタンの画像を設定します。
SendMessage(hButton,BM_SETIMAGE,IMAGE_BITMAP,(LPARAM)buttonImage);
円だけを表示するには、次を使用します。
hButtonRgn = CreateEllipticRgn(0,0,65,65);
SetWindowRgn(hButton,hButtonRgn,TRUE);
SetWindowRgn の MSDN ドキュメントには、「システムは、領域ハンドル hRgn によって指定された領域を所有している」と記載されているため、hButtonRgn をグローバルに定義し、再度使用しないことに注意してください。
問題は次のとおりです。
ボタンは、最初は円としてのみ表示されます。ただし、クリックして保持すると、完全な正方形のビットマップが表示され、円が空白で囲まれます。ただし、リリースすると、再び円のみが表示されます。
これが私の試みた解決策です:
ボタンがクリックされるとすぐに、ボタンの周りのメイン ウィンドウを再描画します。メイン ウィンドウの WndProc 内で、次の操作を行います。
case WM_PARENTNOTIFY:
if ((int)wParam == WM_LBUTTONDOWN)
{
PAINTSTRUCT ps;
BeginPaint(hWnd, &ps);
pRenderTarget->BeginDraw();
// paint the background surrounding the button in another function
pRenderTarget->EndDraw();
EndPaint(hWnd, &ps);
}
ただし、これには目に見える効果はありません。ボタンは、マウスを離すと円形に表示されますが、マウスを押したままにすると四角形に表示されます。
私が間違っていた場所についてのアイデアはありますか?