4142|5

66

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

CButton的drawitem问题 [复制链接]

请问大侠,如果我派生了一个新button类,希望按钮表面能显示出自己的图案,都是些简单的线条.能不能用drawitem?里面画直线的函数我怎么调用呢?能不能给个简单的例子啊?谢谢

最新回复

按钮在Create的Style中必须带有BS_OWNERDRAW  详情 回复 发表于 2008-3-22 23:46
点赞 关注

回复
举报

53

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
http://www.codeproject.com/KB/mobile/ccebuttonst.aspx
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
我不需要图片的,只需要画些框框什么的
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

4
 
下面的代码或许能对你有所帮助:
void CButtonTR::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
        // TODO: Add your code to draw the specified item
        ASSERT(lpDrawItemStruct->CtlType==ODT_BUTTON);
        CRect rcButton(lpDrawItemStruct->rcItem);
        CDC * pDC=CDC::FromHandle(lpDrawItemStruct->hDC);       

        UINT nState = lpDrawItemStruct->itemState;
        CString strText;
        GetWindowText(strText);

        pDC->SetBkMode(TRANSPARENT);
        pDC->SetTextColor(m_crFont);

        PaintBk(pDC);

        if(m_bOver)
        {
                pDC->Draw3dRect(rcButton,GetSysColor(COLOR_3DHILIGHT),GetSysColor(COLOR_3DSHADOW));
        }

        if(nState & ODS_SELECTED)
        {
                //pDC->Draw3dRect(rcButton,GetSysColor(COLOR_3DSHADOW), GetSysColor(COLOR_3DHILIGHT));
                pDC->Draw3dRect(rcButton,RGB(255,0,0),RGB(255,0,0));
        }
        else
        {
                pDC->Draw3dRect(rcButton,RGB(255,255,0),RGB(255,255,0));
        }
       
        CSize szExtent = pDC->GetTextExtent(strText, lstrlen(strText));
        CPoint pt;
        switch(m_nTextAlign)
        {
        case BS_LEFT:
                pt.x=8;
                pt.y=rcButton.CenterPoint().y - szExtent.cy / 2;                       
                break;
        case BS_RIGHT:
                pt.x=rcButton.Width()-szExtent.cx-8;
                pt.y=rcButton.CenterPoint().y - szExtent.cy / 2;                       
                break;
        case BS_TOP:
                pt.x=rcButton.CenterPoint().x - szExtent.cx / 2;               
                pt.y=2;                       
                break;
        case BS_BOTTOM:
                pt.x=rcButton.CenterPoint().x - szExtent.cx / 2;               
                pt.y=rcButton.Height()-szExtent.cy-2;                       
                break;
        default:
                pt.x=rcButton.CenterPoint().x - szExtent.cx / 2;
                pt.y=rcButton.CenterPoint().y - szExtent.cy / 2;                                       
                break;
        }

//        CPoint pt( rcButton.CenterPoint().x - szExtent.cx / 2, rcButton.CenterPoint().y - szExtent.cy / 2);
//        CPoint pt(5,rcButton.CenterPoint().y - szExtent.cy / 2);
        CPoint ptIcon(-6,-2);
        CPoint ptText(12,0);
        if (nState & ODS_SELECTED)
                pt.Offset(1, 1);
        /*
        if(m_hIcon)
        {
                pDC->DrawState(pt+ptIcon,CSize(16,16),m_hIcon,DST_ICON,(HBRUSH)NULL);
                pDC->DrawState(pt+ptText, szExtent, strText, DSS_NORMAL, TRUE, 0, (HBRUSH)NULL);               
        }
        else
        {
                pDC->DrawState(pt, szExtent, strText, DSS_NORMAL, TRUE, 0, (HBRUSH)NULL);
        }
        */
}
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

5
 
谢谢jerry529.
我的功能基本实现了.可是button create的时候,也就是第一次画控件,怎么不调用DrawItem?而我在点鼠标的时候,才开始画?
还有我的颜色是变的,所以每次点鼠标,颜色不同,但是我感觉有时候点快了DrawItem没响应
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

6
 
按钮在Create的Style中必须带有BS_OWNERDRAW
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条
电源解决方案和技术 | DigiKey 应用探索站
当月好物、电源技术资源、特色活动、DigiKey在线实用工具,干货多多~

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表