15,980
社区成员




BOOL CMfc_button_colorDlg::OnInitDialog()//在初始化函数中
{
.....
.....
//创建按钮
CButton *plbtn=new CButton();
CString csTemp;
plbtn->Create(L"123",
WS_VISIBLE | WS_CHILD | BS_OWNERDRAW,
CRect(80,71,300,100),
this, 9528);//动态创建
GetDlgItem(9528)->ModifyStyle(0,BS_OWNERDRAW);//设置按钮的风格为自绘类型
.....
.....
}
//以下是为绘制按钮颜色与文字颜色的,对所有可绘制的按钮生效.
void CMfc_button_colorDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
//if(nIDCtl==IDC_BUTTON1) //checking for the button
//{
CDC dc;
RECT rect;
dc.Attach(lpDrawItemStruct ->hDC); // Get the Button DC to CDC
rect = lpDrawItemStruct->rcItem; //Store the Button rect to our local rect.
dc.Draw3dRect(&rect,RGB(0,0,0),RGB(255,0,0));
dc.FillSolidRect(&rect,RGB(100,100,255));//Here you can define the required color to appear on the Button.
UINT state=lpDrawItemStruct->itemState; //This defines the state of the Push button either pressed or not.
if((state & ODS_SELECTED))
{
dc.DrawEdge(&rect,EDGE_SUNKEN,BF_RECT);
}
else
{
dc.DrawEdge(&rect,EDGE_RAISED,BF_RECT);
}
dc.SetBkColor(RGB(100,100,255)); //Setting the Text Background color
dc.SetTextColor(RGB(255,0,0)); //Setting the Text Color
TCHAR buffer[MAX_PATH]; //To store the Caption of the button.
ZeroMemory(buffer,MAX_PATH ); //Intializing the buffer to zero
::GetWindowText(lpDrawItemStruct->hwndItem,buffer,MAX_PATH); //Get the Caption of Button Window
dc.DrawText(buffer,&rect,DT_CENTER|DT_VCENTER|DT_SINGLELINE);//Redraw the Caption of Button Window
dc.Detach(); // Detach the Button DC
//}
CDialog::OnDrawItem(nIDCtl, lpDrawItemStruct);
}