关于位图按钮的两个问题:
1、当给按钮装载背景图片并且设置Owner Draw属性后,调试出现:“User breakpoint called from code at 0x77f9f9df”的错误 。
解决方法:当按钮选择Owner Draw属性后,需要强制重载OnDrawItem,进行自绘,否则就会出现错误。
2、当点击按钮时,按钮没有状态反应。
解决方法:需要在OnDrawItem中对按钮进行自绘,在重绘函数中,根据按钮的不同状态,进行不同的绘制,示例代码如下:
void CXXXDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: Add your message handler code here and/or call default
if( nIDCtl == IDC_PREV || nIDCtl == IDC_NEXT
|| nIDCtl == IDC_FIRST || nIDCtl == IDC_LAST
|| nIDCtl == IDC_START || nIDCtl == IDC_STOP
|| nIDCtl == IDC_CLEAR || nIDCtl == IDC_FULLSCRI
|| nIDCtl == IDOK )
{
UINT uStyle = DFCS_BUTTONPUSH;
//是否按下去了?
if (lpDrawItemStruct->itemState & ODS_SELECTED)
uStyle |= DFCS_PUSHED;
CDC dc;
dc.Attach(lpDrawItemStruct->hDC);
//是否得到焦点
if(lpDrawItemStruct->itemState & ODS_FOCUS)
{
//画虚框
CRect rtFocus = lpDrawItemStruct->rcItem;
rtFocus.DeflateRect(2, 2);
dc.DrawFocusRect(&rtFocus);
}
return;
}
CXXXDialog::OnDrawItem(nIDCtl, lpDrawItemStruct);
}
更多技术文章请参看施昌权的个人网站: http://www.joyvc.cn