现在的位置: 首页 > 综合 > 正文

关于位图按钮的两个问题

2018年02月08日 ⁄ 综合 ⁄ 共 1087字 ⁄ 字号 评论关闭

关于位图按钮的两个问题:
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

 

 

抱歉!评论已关闭.