hur.cn - 华软网

 热门搜索

按钮变色问题~DrawItem

  作者:未知    来源:网络    更新时间:2011/5/8
重载button  虚函数DrawItem() 只要让按钮颜色变化怎么弄啊?

void CBaseButton::DrawItem(LPDRAWITEMSTRUCT lpdraw)
{
CDC *pDC;
pDC=CDC::FromHandle(lpdraw->hDC);
pDC->SetBkColor(TRANSPARENT);
CString sCaption;
this->GetWindowText(sCaption);
pDC->SetTextColor(RGB(159,191,233));


这样没用啊~~~~~~~~~~运行了 但是没变色啊~~~~~~~~~
---华软 网友回答---
C++">// NOTE: CMyButton is a class derived from CButton. The CMyButton
// object was created as follows:
//
// CMyButton myButton;
// myButton.Create(_T("My button"), 
//      WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|BS_OWNERDRAW, 
//      CRect(10,10,100,30), pParentWnd, 1);
//

// This example implements the DrawItem method for a CButton-derived 
// class that draws the button's text using the color red.
void CMyButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
   UINT uStyle = DFCS_BUTTONPUSH;

   // This code only works with buttons.
   ASSERT(lpDrawItemStruct->CtlType == ODT_BUTTON);

   // If drawing selected, add the pushed style to DrawFrameControl.
   if (lpDrawItemStruct->itemState & ODS_SELECTED)
      uStyle |= DFCS_PUSHED;

   // Draw the button frame.
   ::DrawFrameControl(lpDrawItemStruct->hDC, &lpDrawItemStruct->rcItem, 
      DFC_BUTTON, uStyle);

   // Get the button's text.
   CString strText;
   GetWindowText(strText);

   // Draw the button text using the text color red.
   COLORREF crOldColor = ::SetTextColor(lpDrawItemStruct->hDC, RGB(255,0,0));
   ::DrawText(lpDrawItemStruct->hDC, strText, strText.GetLength(), 
      &lpDrawItemStruct->rcItem, DT_SINGLELINE|DT_VCENTER|DT_CENTER);
   ::SetTextColor(lpDrawItemStruct->hDC, crOldColor);
}

---华软网友回复---
我突然发现运行程序不会执行 DrawItem 这个函数。 怎么办?
---华软网友回复---
引用 2 楼 z8323664 的回复:
我突然发现运行程序不会执行 DrawItem 这个函数。 怎么办?

看上面的注释部分的
// CMyButton myButton;
// myButton.Create(_T("My button"), 
//      WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|BS_OWNERDRAW, 
//      CRect(10,10,100,30), pParentWnd, 1);

你的button的风格是Owner Draw吗?
---华软网友回复---
原来如此 ,困扰的问题解决了 真是谢谢了
---华软网友回复---
不过为什么要加那个 所有者呢?
---华软网友回复---
CDC::SetTextColor 
virtual COLORREF SetTextColor( COLORREF crColor );

Return Value

An RGB value for the previous text color.

Parameters

crColor

Specifies the color of the text as an RGB color value.

Remarks

Sets the text color to the specified color. The system will use this text color when writing text to this device context and also when converting bitmaps between color and monochrome device contexts. 


自己对照这个用法看看又没有问题?呵呵

---华软网友回复---
貌似有点清楚了,他会在运行的时候触发消息
---华软网友回复---
那我想给这Button换个形状该怎么办捏???
我看一本书上使用了DrawCircle(pDC,m_ptCenter,nRadius--,::GetSysColor(CoOLOR_3DDKSHADOW),::GetSysColor(COLOR_3DHIGHLIGHT));
可是compiler报错找不到DrawCircle这个函数
请指教,不胜感激      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。