回 帖 发 新 帖 刷新版面

主题:自编画按钮函数

此按函数要在 WM_DRAWITEM:消息下调用。
示例:

LPDRAWITEMSTRUCT pdis;
static TCHAR *butText;      //按钮文字
static int butBkColor[3];    //按钮背景色
...
case WM_DRAWITEM:
    pdis = (LPDRAWITEMSTRUCT)lParam;
    defDrawButton(pdis,butText,butBkColor);
    break;
......

//这个函数可以实现彩色按钮的简单绘制,只需要3个参数即可,应该是比较有用的,分享一下。
//不过此程序可能有待改进,比如现在我就遇到一个问题 就是在按钮下无法快速点击,不知道为什么? 请各位朋友给我指点改进一下这些问题? 谢谢!

补充一下: 哪位朋友知道如何将该函数的第3个参数改成画刷类型,如下:
  void defDrawButton(LPDRAWITEMSTRUCT pdis,TCHAR *butText,HBRUSH butBkColor)
{
    .......
}

我试过好像都不行,提示的意思说 未定义。

//自绘按钮函数
    void defDrawButton(LPDRAWITEMSTRUCT pdis,TCHAR *butText,int butBkColor[])
    {

        RECT rc;
        HBRUSH HbuttonBackColor;
        int ixChar,iyChar;

        ixChar = LOWORD(GetDialogBaseUnits());
        iyChar = HIWORD(GetDialogBaseUnits());
    
        HbuttonBackColor = CreateSolidBrush(RGB(butBkColor[0],butBkColor[1],butBkColor[2]));

        FillRect(pdis->hDC,&pdis->rcItem,HbuttonBackColor);
        FrameRect(pdis->hDC,&pdis->rcItem,(HBRUSH)GetStockObject(BLACK_BRUSH));

        TextOut(pdis->hDC,
                (pdis->rcItem.right - pdis->rcItem.left)/2-lstrlen(butText)*ixChar/2,
                (pdis->rcItem.bottom - pdis->rcItem.top)/2-iyChar/2,
                butText,
                lstrlen(butText));

        if(pdis->itemState & ODS_SELECTED)

        {
            rc.left = pdis->rcItem.left -5;
            rc.top = pdis->rcItem.top -5;
            rc.right = pdis->rcItem.right +5;
            rc.bottom = pdis->rcItem.bottom +5;

            FillRect(pdis->hDC,&rc,(HBRUSH)GetStockObject(WHITE_BRUSH));

            rc.left  = pdis->rcItem.left+2;
            rc.top  = pdis->rcItem.top +2;
            rc.right = pdis->rcItem.right +2;
            rc.bottom = pdis->rcItem.bottom +2;
            pdis->rcItem = rc;
                    
            FrameRect(pdis->hDC,&pdis->rcItem,(HBRUSH)GetStockObject(BLACK_BRUSH));
            FillRect(pdis->hDC,&pdis->rcItem,HbuttonBackColor);
                    
            TextOut(pdis->hDC,
            (pdis->rcItem.right - pdis->rcItem.left)/4+2,
            (pdis->rcItem.bottom - pdis->rcItem.top)/4+2,
            butText,
            lstrlen(butText));
        }
                
        if(pdis->itemState & ODS_FOCUS)
        {
            pdis->rcItem.left += 4;
            pdis->rcItem.right -= 4;
            pdis->rcItem.top += 4;
            pdis->rcItem.bottom -= 4;

            DrawFocusRect (pdis->hDC, &pdis->rcItem);
                    
        }

    }

回复列表 (共1个回复)

沙发

寻找一直寻找机会的人!
一个趋势中的趋势的项目!
一个直销和传销终结者的项目!
一个帮助普通创业者成功的项目!
   我们在互联网上正在拓展一个生意项目,现在正在寻求合作伙伴。我们认为成功的关键是你是什么人?还有你和谁在一起。我们在乎的是--您是否是有激情、有梦想的人。有意者请跟我们联系,我们和您谈谈,给您讲解一些生意概念,或许我们可以合作。一个集即时网游、交友,娱乐游戏,网络品牌代理商城,互联网平台项目招商进行中……详情QQ空间资料
网商咨询 摩客天宇QQ 909065437 

我来回复

您尚未登录,请登录后再回复。点此登录或注册