на MFC делал так,
класс моей кнопки
class ElipsBtn :
public CButton
{
protected:
afx_msg void PreSubclassWindow();
DECLARE_MESSAGE_MAP()
};
void ElipsBtn::PreSubclassWindow()
{
CButton::PreSubclassWindow();
// Устанавливаем элиптический регион для кнопки
CRect rect;
GetClientRect(&rect);
CRgn rgn;
rgn.CreateEllipticRgn(0, 0, rect.Width(), rect.Height());
SetWindowRgn(rgn, TRUE);
}
//код вставленный в BOOL CMyElipsWndDlg::OnInitDialog()
//эта часть делает окно элипсным
CRect rect;
GetClientRect(&rect);
CRgn rgn;
rgn.CreateEllipticRgn(10, 40, rect.Width(), rect.Height());
SetWindowRgn(rgn, TRUE);
//эта должна делать кнопку элипсной, но не делает
// Привязываем вашу кнопку к пользовательскому классу
CButton* pButton = (CButton*)GetDlgItem(IDC_ELIPS_BTN); // ID вашей кнопки
if (pButton)
{
m_btnCustom.SubclassWindow(pButton->GetSafeHwnd());
}