网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > VC++ > 正文
制作风格独特的按钮—用VC6扩展CButton类
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/15
下载{$ArticleTitle}原创论文样式
* pFont = GetFont();


ASSERT(pFont);


LOGFONT lf;


pFont->GetLogFont(&lf);


lf.lfUnderline = TRUE;


fUnderline.CreateFontIndirect(&lf);


}


pOldFont = pDC->SelectObject(&fUnderline);


}


else pDC->SetTextColor(GetSysColor(COLOR_BTNTEXT));


pDC->DrawText(strText, rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE);


if (pOldFont) pDC->SelectObject(pOldFont);


}


}


2.定制的消息处理函数


void OnMouseMove(UINT nFlags, CPoint point)


{


//设置一个定时器


SetTimer(1,10,NULL);


//





}


当鼠标光标移到按钮上时,执行此函数,定时器将发送一个 WM_TIMER消息到消息队列。


由OnTimer(UINT nIDEvent)函数处理这个消息。


void OnTimer(UINT nIDEvent)


{


//处理WM_TIMER消息


static bool pPainted = false;


POINT pt;


GetCursorPos(&pt);


CRect rect;


GetWindowRect (rect);


if (bLBtnDown)


{


KillTimer (1);


if (pPainted) InvalidateRect (NULL);


pPainted = FALSE;


return;


}


if (!rect.PtInRect (pt))


{


bHighlight = false;


KillTimer (1);


if (pPainted)


InvalidateRect(NULL);


pPainted = false;


return;


}


else


{


bHighlight = true;


if (!pPainted)


{


pPainted = true;


InvalidateRect(NULL);


}


}


//


CButton::OnTimer(nIDEvent);


}


BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)


{


//当鼠标光标移到按钮上时,改变光标的形象


if (bHighlight)


{


::SetCursor(hHand);


return true;


}


//





}


int OnCreate(LPCREATESTRUCT lpCreateStruct)


{





CFont * pFont = GetFont();


ASSERT(pFont);


LOGFONT lf;


pFont->GetLogFont(&lf);


lf.lfUnderline = TRUE;


fUnderline.CreateFontIndirect(&lf);





}


这个函数由框架在显示出按钮之前自动调用,我在这里初始化在按钮上显示的字体。


void OnLButtonUp(UINT nFlags, CPoint point)


{


bLBtnDown = false;


if (bHighlight)


{


bHighlight = false;


InvalidateRect(NULL);


}





}


当按下按钮又放开时调用这个函数。


void OnLButtonDown(UINT nFlags, CPoint point)


{


bLBtnDown = true;





}


当按下按钮时调用这个函数。


BOOL OnEraseBkgnd(CDC* pDC)


{


COLORREF cr = GetSysColor(COLOR_3DFACE);


int r = GetRValue(cr);


int g = GetGValue(cr);


int b = GetBValue(cr);


if (r > 1) r -= 2;


if (g > 1) g -= 2;


if (r <3 && g < 3 && b < 253) b +=2;


COLORREF cr1 = RGB(r,g,b);


CRect rc;


GetClientRect(rc);


pDC->FillSolidRect(rc, cr1);





}


当按钮的背景需要重画时,应用程序框架调用此函数。编译并运行PROJECT LinkBtn

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号