首页 IP地址查询 | Alexa排名查询 | 手机归属地查询
设为首页 收藏本站
  • 网络编程网络编程
  • 软件编程软件编程
  • 数据库技术数据库技术
  • 编程学院
  • 业界资讯 业界资讯
  • 源码中心源码中心
  • 会员中心会员中心
  • 页面导航: 首页MFC编程黑客代码 → 替换开始菜单

    替换开始菜单

    发布:匿名 发布日期:2008-03-26 字体:[增加 减小] 类型:原创

    这里先声名一下,不知道为什么,在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();


    下载源代码
    Tags: MFC 开始菜单
    为配合网络严查,文章评论将关闭敬请谅解.
    同 类 文 章
    最 近 更 新
    热 点 排 行