这里先声名一下,不知道为什么,在2000下找不到开始按钮。
先获取桌面窗口句柄
cwnd* pwnd = getdesktopwindow();
crect rctdesktop,rcstart;
pwnd->getwindowrect(rctdesktop);
获取任务栏窗口句柄
point pnt;
pnt.x=0; //先取下边
pnt.y=rctdesktop.height()-1;
next_way:
pwndtaskbar = cwnd::windowfrompoint(pnt); //取位置的类句柄
cstring strclassname;
getclassname(pwndtaskbar->getsafehwnd(),strclassname.getbuffer(255),255);
strclassname.releasebuffer();
if(strclassname.comparenocase("wndclass_desked_gsk")!=0&&strclassname.comparenocase("button")!=0)
{
switch(i)
{
case 0: //取左边、上边
pnt.x=0;
pnt.y=0;
i++;
goto next_way;
case 1: //取右边
pnt.x=rctdesktop.width()-1;
pnt.y=0;
i++;
goto next_way;
default:
messagebox("你的系统是不是有什么问题,怎么没有任务栏? @o@???");
exit(0);
}
}
获取开始按钮窗口
pstartbutton = null;
if(strclassname.comparenocase("button")!=0)
{
cwnd *ptempwnd=findwindowex(pwndtaskbar->getsafehwnd(),null,"button",null);
pstartbutton = cwnd::fromhandle(ptempwnd->getsafehwnd());
}
else
pstartbutton=pwndtaskbar;
if(pstartbutton==null)
messagebox("找不到开始按钮!");
创建窗口并替换
//建立新的按钮
colormap crmp = { rgb(255,0,255),::getsyscolor(color_btnface) };
bmstart.loadmappedbitmap(idb_newstart,0,&crmp,1);
crect rct;
pstartbutton->getwindowrect(rct);
pwndtaskbar->screentoclient(rct);
btstart.create("",ws_child | ws_visible | bs_bitmap,rct,pwndtaskbar,idc_startbutton);
btstart.setbitmap((hbitmap)bmstart);
btstart.setmsgreceiver(this);
btstart.setid(idc_startbutton);
onchangestartbutton();
下载源代码