VC MFC对话框中按钮背景色以及大小设置

    因为项目需要,这段时间对VC中对话框稍微研究学习了一下,其中碰到一个问题,关于按钮背景色设置的问题。

    搜索资料,发现很多提到的是新建一个继承自CBUTTON的按钮类,然后重载OnDrawItem函数,再在自己的对话框中实例化此类,并绑定到自己的按钮控件上。实验后发现,不知是哪里的问题,按钮显示为灰色,字体没有。此方法失败。

     随后发现一个大神提供了一种简单的方法,在对话框类中添加ON_WM_DRAWITEM消息,然后在添加以下代码


void CMyDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
//checking for the button 
if(nIDCtl==IDC_Sign) 

CDC dc; 
RECT rect;


// Get the Button DC to CDC 
dc.Attach(lpDrawItemStruct ->hDC); 


//Store the Button rect to our local rect.
rect = lpDrawItemStruct->rcItem; 


dc.Draw3dRect(&rect,RGB(255,255,255),RGB(0,0,0)); 


        //Here you can define the required color to appear on the Button.
dc.FillSolidRect(&rect,RGB(100,100,255)); 


//This defines the state of the Push button either pressed or not. 
UINT state=lpDrawItemStruct->itemState;  


if((state & ODS_SELECTED)) 

dc.DrawEdge(&rect,EDGE_SUNKEN,BF_RECT); 

else 

dc.DrawEdge(&rect,EDGE_RAISED,BF_RECT); 



//Setting the Text Background color
dc.SetBkColor(RGB(100,100,255)); 
//Setting the Text Color
dc.SetTextColor(RGB(255,0,0)); 


//To store the Caption of the button.
TCHAR buffer[MAX_PATH]; 
//Intializing the buffer to zero 
ZeroMemory(buffer,MAX_PATH ); 


//Get the Caption of Button Window
::GetWindowText(lpDrawItemStruct->hwndItem,buffer,MAX_PATH);  


//Redraw the Caption of Button Window 
dc.DrawText(buffer,&rect,DT_CENTER|DT_VCENTER|DT_SINGLELINE);


dc.Detach(); // Detach the Button DC 



CDialog::OnDrawItem(nIDCtl, lpDrawItemStruct);
}

结果证明可行,注意在控件属性中选择OwnerDraw。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值