| 发表于:2007-04-20 17:02:12 楼主 |
void cnewbutton::drawitem(lpdrawitemstruct lpdrawitemstruct) { cdc* pdc = cdc::fromhandle(lpdrawitemstruct-> hdc); uint nstate = lpdrawitemstruct-> itemstate; crect buttonrect; getclientrect(buttonrect); if (iswindowenabled()) nstate &= ~ods_disabled; else nstate ¦= ods_disabled; drawbutton(pdc, nstate, buttonrect); drawcolorlight(pdc); drawtext(pdc); } void cnewbutton::drawbutton(cdc* pdc, uint nstate, crect rect) { /* cbrush brush(rgb(212,223,243)),*oldbrush=null; brush.createobject(); oldbrush=pdc-> selectobject(&brush); pdc-> fillrect(rect,&brush); pdc-> selectobject(oldbrush); brush.deleteobject(); */ colorref upcol,downcol,edgecol;////////////////////// edgecol=rgb(0,0,0); bool brevers = false; if ((nstate & ods_selected) == ods_selected) { // pressed upcol=rgb(128,128,128); edgecol=rgb(128,128,128); downcol=rgb(255,255,255); brevers = true; } else if ((nstate & ods_disabled) == ods_disabled) { // disabled// in the future maybe } else { // normal upcol=rgb(255,255,255); downcol=rgb(128,128,128); } cpen* poldpen = null; cpen pen1; cpen pen2; pen1.createpen(ps_solid, 1, upcol); poldpen=pdc-> selectobject( &pen1 ); pdc-> moveto(1,rect.height()-1); pdc-> lineto(1,1); pdc-> lineto(rect.width()-1,1); pdc-> moveto(0,rect.height()-1); pdc-> lineto(0,0); pdc-> lineto(rect.width()-1,0); pdc-> selectobject( poldpen ); pen1.deleteobject(); pen2.createpen(ps_solid, 1, downcol); poldpen =pdc-> selectobject( &pen2 ); pdc-> moveto(rect.width()-1,0); pdc-> lineto(rect.width()-1,rect.height()-1); pdc-> lineto(0,rect.height()-1); pdc-> moveto(rect.width()-2,1); pdc-> lineto(rect.width()-2,rect.height()-2); pdc-> lineto(0,rect.height()-2); pdc-> selectobject( poldpen ); pen2.deleteobject(); pen1.createpen(ps_solid, 1, edgecol); poldpen = pdc-> selectobject(&pen1); if (brevers) { pdc-> moveto(1,rect.height()-2); pdc-> lineto(1,1); pdc-> lineto(rect.width()-2,1); } else { pdc-> moveto(rect.width()-1,0); pdc-> lineto(rect.width()-1,rect.height()-1); pdc-> lineto(-1,rect.height()-1); } pdc-> selectobject( poldpen ); pen1.deleteobject(); } void cnewbutton::drawcolorlight(cdc* pdc)//绘制带白底的绿色灯 { crect rect; int h,w; getclientrect(rect); h=rect.height()/10; w=rect.width()/4; if ((m_txtcaption!= " ")) { cpen penwhite; penwhite.createpen(ps_solid,1,rgb(255,255,255));//白 cpen *oldpen=pdc-> selectobject(&penwhite); cbrush *oldbr=null; cbrush brgreen(rgb(0,255,0));//绿 brgreen.createobject(); oldbr=pdc-> selectobject(&brgreen); pdc-> ellipse(rect.left+w,rect.top+h,rect.left+w*3,rect.top+h+2*w);//绿色灯 pdc-> selectobject(oldbr); brgreen.deleteobject(); pdc-> selectobject(oldpen); penwhite.deleteobject(); penwhite.createpen(ps_solid,5,rgb(255,255,255)); oldpen=pdc-> selectobject(&penwhite); pdc-> moveto(rect.left+w+6,rect.top+h+6); pdc-> lineto(rect.left+w+6,rect.top+h+6); pdc-> selectobject(oldpen); penwhite.deleteobject(); } } void cnewbutton::ontimer(uint nidevent) { crect rect; int h,w; cbrush *oldbrush=null; getclientrect(rect); h=rect.height()/10; w=rect.width()/4; cclientdc dc(this); if(!bon) { cpen penwhite; penwhite.createpen(ps_solid,1,rgb(255,255,255)); cpen *oldpen=dc.selectobject(&penwhite); cbrush brdarkred(rgb(255,0,128)); brdarkred.createobject(); oldbrush=dc.selectobject(&brdarkred); dc.ellipse(rect.left+w,rect.top+h,rect.left+w*3,rect.top+h+2*w);//红色灯 dc.selectobject(oldbrush); brdarkred.deleteobject(); dc.selectobject(oldpen); penwhite.deleteobject(); penwhite.createpen(ps_solid,5,rgb(255,255,255)); oldpen=dc.selectobject(&penwhite); dc.moveto(rect.left+w+6,rect.top+h+5); dc.lineto(rect.left+w+7,rect.top+h+5); dc.selectobject(oldpen); penwhite.deleteobject(); } else { cpen penwhite; penwhite.createpen(ps_solid,1,rgb(192,192,192));//灰 cpen *oldpen=dc.selectobject(&penwhite); cbrush brred(rgb(255,0,0)); oldbrush=dc.selectobject(&brred); dc.ellipse(rect.left+w,rect.top+h,rect.left+w*3,rect.top+h+2*w);//红色灯 dc.selectobject(oldbrush); brred.deleteobject(); dc.selectobject(oldpen); penwhite.deleteobject(); penwhite.createpen(ps_solid,5,rgb(192,192,192)); oldpen=dc.selectobject(&penwhite); dc.moveto(rect.left+w+6,rect.top+h+5); dc.lineto(rect.left+w+7,rect.top+h+5); dc.selectobject(oldpen); penwhite.deleteobject(); } bon=!bon; cbutton::ontimer(nidevent); } 在另一sdh_devicedlg.cpp如何清除drawcolorlight(pdc);和ontimer绘制告警灯. //光盘a开关按钮 void csdh_devicedlg::onga() { hbitmap hbitmap1 = ::loadbitmap(afxgetinstancehandle(),makeintresource (idb_red)); hbitmap hbitmap2 = ::loadbitmap(afxgetinstancehandle(),makeintresource (idb_green)); switch(num%2) { case 0 ://关 m_switch.setwindowtext( "光盘a关闭... "); send_a_frame_to_device(device_addr,0x08,3,0x64,0xa0,1); m_ga.setbitmap(hbitmap1); //////清除语句写在这里 |
|
|
|
|