CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  API

(高分) 关于Form Title Button 句柄的获取

楼主weiyulin(weidayed520)2006-01-09 13:00:28 在 VB / API 提问

我想获以Form的Close、Max、Min按钮的Hwnd    
   
                  请求谁知道,,     解决了,100高分相送.....  
   
   
                                谢谢............ 问题点数:100、回复次数:34Top

1 楼weiyulin(weidayed520)回复于 2006-01-09 13:01:33 得分 0

我想获得Form的Close、Max、Min按钮的Hwnd    
   
                  请教谁知道,,     解决了,100高分相送.....  
   
   
                                谢谢............Top

2 楼rainstormmaster(暴风雨 v2.0)回复于 2006-01-09 13:07:49 得分 0

晕,他们这些所谓的按钮都是画上去的,没有句柄  
   
   
  你还是说说你要干什么吧Top

3 楼junki(『.NET技术争霸天下』)回复于 2006-01-09 14:00:21 得分 0

可以用窗体的子消息来实现Top

4 楼faysky2(出来混,迟早是要还嘀)回复于 2006-01-09 14:42:26 得分 0

那些按钮的句柄就是窗体的句柄Top

5 楼songyaowu(不以分多而蹭之;不因分少而不答; www.vb99.com)回复于 2006-01-10 14:51:09 得分 0

是啊,这些看起来象按钮的东西的确不是楼主所理解的按钮,它们是画在窗口标题栏上的。没有单独的hwnd.Top

6 楼weiyulin(weidayed520)回复于 2006-01-11 23:10:23 得分 0

谢谢大家  
   
                          我要实现的功能是     获取它们的句柄,然后改变图片(界面)Top

7 楼rainstormmaster(暴风雨 v2.0)回复于 2006-01-11 23:48:40 得分 0

//我要实现的功能是     获取它们的句柄,然后改变图片(界面)  
   
  是你自己的程序吗,是的话,就好办Top

8 楼weiyulin(weidayed520)回复于 2006-01-16 17:53:28 得分 0

是我自己的程序,,,谢谢  
   
                          (我自己设计有界面控件,26种界面主题,但不是直接修改窗体的)我现在要做的是直接修改窗体按钮的图片  
   
   
                                      在线等待.............再次谢谢Top

9 楼rainstormmaster(暴风雨 v2.0)回复于 2006-01-16 21:05:58 得分 0

既然是你的程序就可以通过自绘标题栏解决,具体的可以参考:  
  http://www.vbaccelerator.com/home/VB/Code/Controls/Skins/article.aspTop

10 楼weiyulin(weidayed520)回复于 2006-01-17 03:17:33 得分 0

哦..............   是吗       看看先....     谢谢Top

11 楼weiyulin(weidayed520)回复于 2006-01-17 03:21:38 得分 0

全英文的,,,     音语,看不懂...  
   
   
        但对你的话我有另名一种理解的意思,,是不是获取标题栏的句柄,然后根据这个句柄,自己添加几个Picture控件(用API指定新交,调整位置,大小)就行了啊  
   
   
                                      在线等待Top

12 楼weiyulin(weidayed520)回复于 2006-01-17 03:22:16 得分 0

用API指定新父Top

13 楼oho1937(压舟熊疯)回复于 2006-01-17 08:56:10 得分 0

标题栏还都不一样喃,VB本身是wndclass_desked_gsk,VB自己编的FORM是ThunderFormDC,IE的是IEFrame  
  不过抓句柄到并不难Top

14 楼weiyulin(weidayed520)回复于 2006-01-17 13:01:22 得分 0

能说说吗Top

15 楼weiyulin(weidayed520)回复于 2006-01-17 23:48:06 得分 0

怎么,,   没人知道了吗  
                自己顶一下Top

16 楼rainstormmaster(暴风雨 v2.0)回复于 2006-01-18 02:54:49 得分 0

//但对你的话我有另名一种理解的意思,,是不是获取标题栏的句柄,然后根据这个句柄,自己添加几个Picture控件(用API指定新交,调整位置,大小)就行了啊  
   
  不是这个意思:  
  标题栏上的按钮并不是标准的按钮子窗口,按钮的按下与弹起效果完全就是两幅位图模拟出来的。为此,我们需要处理WM_NCPAINT和WM_ACTIVATE消息。首先计算出按钮的位置,利用GetWindowRect得到窗口的大小位置,再调用函数GetSystemMetrics得到标题栏的高度等系统参数。当需要查询什么时就传递相应的参数给它,下面是我们要用到的参数:  
   
  SM_CXFRAME窗口边框宽度  
  SM_CYFRAME窗口边框高度  
  SM_CXSIZE标题栏上的按钮宽度  
  SM_CYSIZE标题栏上的按钮高度  
   
  接着就可以计算出按钮的位置,然后我们就可以根据按钮的状态(按下、弹起)画上相应的位图。好,到这我们已经把按钮显示出来啦。  
   
  按钮显示出来后还要能响应鼠标消息才能真正的起到按钮的作用,也就是说我们需要在子类中处理鼠标按下的消息,也就是WM_NCLBUTTONDOWN,还有WM_NCLBUTTONUP等。具体的你看看我介绍你看的网页中提供的代码吧  
   
  Top

17 楼weiyulin(weidayed520)回复于 2006-01-18 23:05:04 得分 0

你能给我源代码吗Top

18 楼weiyulin(weidayed520)回复于 2006-01-18 23:05:24 得分 0

我的QQ是100510037     请发我QQ邮箱     谢谢  
  Top

19 楼rainstormmaster(暴风雨 v2.0)回复于 2006-01-18 23:12:27 得分 0

看这个页面,根据说明下载Top

20 楼rainstormmaster(暴风雨 v2.0)回复于 2006-01-18 23:21:42 得分 0

晕,忘了贴地址了:  
  http://www.vbaccelerator.com/home/VB/Code/Controls/Skins/VB6_NeoCaption_Full_Source.aspTop

21 楼sakurako(看晨雾散开,你就是我一生的最爱...)回复于 2006-01-19 09:32:46 得分 0

nothingTop

22 楼weiyulin(weidayed520)回复于 2006-01-19 15:25:01 得分 0

呵呵  
   
                        我看看先Top

23 楼qkaibo(艾夏)回复于 2006-01-19 15:35:53 得分 0

GetSystemMenu  
   
  这个函数可以取到Top

24 楼weiyulin(weidayed520)回复于 2006-01-19 22:46:19 得分 0

rainstormmaster(暴风雨   v2.0)       大哥   你的URL是全英文的     俺看不懂Top

25 楼weiyulin(weidayed520)回复于 2006-01-19 22:47:33 得分 0

GetSystemMenu     能告诉我怎么用这个函数     取得标题栏的句柄吗  
   
                谢谢     qkaibo(艾夏)Top

26 楼zyl910(编程的乐趣在于编程控制硬件,与用图形学实现绚丽效果)回复于 2006-01-19 22:58:03 得分 100

GetSystemMenu只是用来得到系统菜单的句柄  
   
  想在标题栏上加图标只能用自绘窗口非客户区的办法  
   
  rainstormmaster(暴风雨   v2.0)已经说得很详细了  
  主要原理是:拦截WM_NcPaint消息,自己用GDI函数绘制整个非客户区  
  www.vbaccelerator.com的那个代码很经典的  
   
   
  想搞界面编程一定要记住这句话:界面是画出来的  
  Top

27 楼weiyulin(weidayed520)回复于 2006-01-20 01:46:14 得分 0

嗯。。。   谢谢大家  
   
                                但你们给我的URL都是全英文的     我英语差  
   
                      还希望有其它的资料可以给我看看Top

28 楼zyl910(编程的乐趣在于编程控制硬件,与用图形学实现绚丽效果)回复于 2006-01-20 11:45:19 得分 0

有篇中文的,只不过用的是VC。其实也是调用API,应该看得懂  
   
   
  定制窗口标题栏    
   
  作者:james  
   
  翻译:ddn78,   2003/01/06  
   
  翻译说明:通过这篇文章,可以了解:  
   
  替换窗口过程的操作    
   
  定制标题栏时需要注意那些问题和需要关注那些消息    
   
  如何防止闪烁    
   
  与非客户区相关的鼠标消息    
   
  如何编写纯Win32   SDK程序    
   
   
  简介  
  这篇文章将教你如何在标题栏中插入一个或多个按钮。源代码中包含一个完整的库,能够定制各种类型的窗口,包含标准的frame   windows和tool   windows(注:即WM_EX_TOOLWINDOW)。  
   
   
   
   
  子类化窗口(   subclass   the   window   )    
   
  就像大多数的定制窗口一样,我们需要声明一个结构用于保存每个按钮的属性:  
   
  typedef   struct  
  {  
          UINT           uCmd;                     //Command   to   send   when   clicked   (WM_COMMAND)  
          int             nRightBorder;     //Pixels   between   this   button   and   buttons   to   the   right  
          HBITMAP     hBmp;                     //Bitmap   to   display  
   
          BOOL           fPressed;             //Is   the   button   pressed   in   or   out?.  
           
  }   CaptionButton;  
   
  我们还需要知道被插入按钮的索引,按钮数组和保存被替换原先窗口进程:  
   
  typedef   struct  
  {  
          CaptionButton     buttons[MAX_TITLE_BUTTONS];  
          int                         nNumButtons;  
          BOOL                       fMouseDown;                 //   is   the   mouse   button   being   clicked?  
          WNDPROC                 wpOldProc;                   //   old   window   procedure  
   
          int                         iActiveButton;           //   the   button   index   being   clicked.  
   
  }   CustomCaption;  
   
   
   
   
  现在我们声明一个   InsertButton   函数。该函数执行如下一系列步骤在窗口的标题栏中插入一个按钮:.  
   
  首个按钮被插入时在内存中分配一个   CustomCaption   结构对象    
   
  将该结构关联到指定的窗口中   (using   SetProp   API,   if   necessary)    
   
  用我们自定义的窗口过程替换到窗口原来的过程(WNDPROC)    
   
  插入按钮到按钮数组中    
   
  注意:我们插入一个按钮时不需要任何物理(physical)上的改变(注:我想所谓物理上的改变即不需要手动调整非客户区)。不像在有些定制的编辑控件中加入按钮那样需要在WM_NCCALCSIZE消息中为按钮分配足够的空间,在我们这里不需要。这是因为标题栏已经存在,我们只是在上面重画我们的按钮,仅此而已。  
   
     
   
  函数原型如下:  
   
  BOOL   Caption_InsertButton(HWND   hwnd,   UINT   uCmd,   int   nBorder,   HBITMAP   hBmp);  
   
  计算按钮位置(Calculating   the   button   position)  
  我们定制的按钮没有固定的尺寸和位置,它的位置和尺寸完全依赖于当前窗口的位置和尺寸以及当前系统中设置的标题栏的高度。因此有必要写一个函数来计算在指定时间下每个按钮的位置和尺寸,当我们需要重画按钮,或者当我们准备处理鼠标事件时需要调用该函数。  
   
  好吧,让我们看看该函数的样子:  
   
  void   GetButtonRect(CustomCaption   *ctp,   HWND   hwnd,   int   idx,   RECT   *rect,   BOOL   fWindowRelative);  
  我们需要传递一个   CustomCaption   结构指针给指定的窗口,还有窗口句柄本身,目标按钮的索引以及一个RECT指针用于保存返回的按钮位置   。最后一个参数,fWindowRelative,用于控制返回坐标的相对位置:如果值为   TRUE   意味着返回坐标相对于窗口的左上角(注:也就是窗口DC坐标系),否则为屏幕坐标系。  
   
  函数   GetButtonRect   在计算出按钮位置之前需要知道如下信息:  
   
  Titlebar   button   size   (in   pixels).  
  我们可以通过调用   GetSystemMetrics   API   获得,但首先我们必须测试窗口是一个标准窗口还是一个tool-window(   with   a   narrow   titlebar).  
   
   
  Current   caption   buttons.  
  窗口一般包含四个按钮:Close   [x],   Minimize   [-],   Maximize   [+]   和   Context   Help   [?]   按钮。   如果我们要保持这些按钮不变,必须注意我们插入的按钮不能覆盖这些按钮。GetButtonRect   函数通过测试window   styles   来决定那些系统按钮已经存在。    
   
  Window   border   size.  
  窗口的边框有许多不同的风格,主要依赖于该窗口是固定的(   fixed   )还是可调节的(   resizing   ),   还与当前的系统设置有关。   GetButtonRect   充分考虑并计算当前的边框尺寸。    
   
  Previously   inserted   buttons.  
  当然,最后还有考虑按钮的数目、边距和尺寸(基于系统设置)    
   
  现在我们已经可以正确的计算出每个按钮的位置,可以进入下一步:绘制按钮:)  
   
   
  绘制按钮(Drawing   the   inserted   buttons)  
  由于按钮位于窗口的非客户区,所以我们需要处理   WM_NCPAINT消息。  
   
  在标题栏上绘制按钮并不很容易,最好是我们实际绘制的操作越少越好!   如果可能,我们希望在轮到我们动手之前让窗口自身的过程处理尽可能多的绘制操作。问题在于我们必须在保留原有标题栏的同时在其之上绘制按钮,并且需要防止闪烁和绘画失灵。  
   
  基本思路是让窗口原先过程(   the   original   window   procedure   )绘制除了按钮区域之外的整个窗口框架和标题栏,一旦窗口绘制完之后,剩下的工作就是在按钮区域中依次绘制按钮。   will   break   the   process   down   into   steps   so   that   you   can   see   how   this   is   achieved.  
   
  首先调用CreateRectRgn   API为整个窗口创建一个region,然后通过指定RGN_XOR   标志调用   CombineRgn   API   减去其中按钮所占的区域。这里需要提及的很重要的一点是所有的regions和rectangles都必须采用屏幕坐标(screen   coordinates)。具体WM_NCPAINT的实现如下:  
   
  HRGN   hrgn,   temprgn;  
   
  //   Get   the   SCREEN   coordinates   of   this   window.  
  GetWindowRect(hwnd,   &rect);      
   
  //   Create   a   region   which   covers   the   whole   window.    
  if(wParam   ==   1)  
          hrgn   =   CreateRectRgnIndirect(&rect);  
  else  
          hrgn   =   (HRGN)wParam;  
   
  //   Clip   our   custom   buttons   out   of   the   way...  
  for(i   =   0;   i   <   ctp->nNumButtons;   i++)  
  {  
          //Get   button   rectangle   in   screen   coords  
          GetButtonRect(ctp,   hwnd,   i,   &rect,   FALSE);  
   
          temprgn   =   CreateRectRgnIndirect(&rect);  
   
          //Cut   out   a   button-shaped   hole  
          CombineRgn(hrgn,   hrgn,   temprgn,   RGN_XOR);  
   
          DeleteObject(temprgn);  
  }  
  Top

29 楼zyl910(编程的乐趣在于编程控制硬件,与用图形学实现绚丽效果)回复于 2006-01-20 11:46:15 得分 0

 
  接下来的任务是让窗口原来过程绘制整个窗口框架和标题栏。  
   
  消息WM_NCPAINT的wParam   参数是需要更新的region,我们用新创建的region取代原先的wparam调用原先的窗口过程,  
   
  从而避免绘制按钮区域。  
   
  CallWindowProc(ctp->wpOldProc,   hwnd,   WM_NCPAINT,   (WPARAM)hrgn,   0);  
   
  最后我们开始绘制按钮!绘制时采用窗口的设备上下文句柄   ,因此,另一点很重要的是所有的坐标必须为窗口设备坐标系。  
   
  HDC   hdc   =   GetWindowDC(hwnd);  
   
  //   Draw   buttons   in   a   loop  
  for(i   =   0;   i   <   ctp->nNumButtons;   i++)  
  {  
          //Get   Button   rect   in   window   coords  
          GetButtonRect(ctp,   hwnd,   i,   &rect1,   TRUE);  
                   
          if(ctp->buttons[i].fPressed)  
                  DrawFrameControl(hdc,   &rect1,   DFC_BUTTON,   DFCS_BUTTONPUSH   |   DFCS_PUSHED);  
          else  
                  DrawFrameControl(hdc,   &rect1,   DFC_BUTTON,   DFCS_BUTTONPUSH);  
   
          //Draw   the   bitmap   on   top...  
  }  
   
  ReleaseDC(hwnd,   hdc);  
   
  if(wParam   ==   1)  
          DeleteObject(hrgn);  
   
  上面的代码仅仅绘制处于按下或正常状态的空按钮。   如果原先wParam为一个有效的region,那么我们不必释放它,Windows自己会处理。如果wParam是由我们分配的区域句柄(   update   region)则必须记住释放。  
   
   
  让按钮工作(Making   the   buttons   work)  
  现在按钮只是一个空壳,我们必须让它工作。  
   
  Mouse   button   down   (WM_NCLBUTTONDOWN)  
   
  当鼠标左键在按钮上按下时,我们必须重画按钮处于按下状态。   同时需要捕获光标以便在按钮保持按下时能够收到其它光标消息,比如当我们离开窗口时仍然能够收到鼠标消息。  
   
  int   i;  
  RECT   rect;  
  POINT   pt;  
           
  //   retrieve   the   mouse   coordinates  
  pt.x   =   (short)LOWORD(lParam);  
  pt.y   =   (short)HIWORD(lParam);  
   
  //   Loop   over   all   buttons   to   see   if   one   has   been   clicked  
  for(i   =   0;   i   <   ctp->nNumButtons;   i++)  
  {  
          //get   screen   coordinates   of   each   button  
          GetButtonRect(ctp,   hwnd,   i,   &rect,   FALSE);  
          InflateRect(&rect,   0,   2);  
                           
          //if   clicked   in   a   custom   button  
          if(PtInRect(&rect,   pt))  
          {  
                  ctp->iActiveButton   =   i;  
                  ctp->buttons[i].fPressed   =   TRUE;  
                  ctp->fMouseDown   =   TRUE;  
                                   
                  SetCapture(hwnd);  
                                   
                  RedrawCaption(hwnd);  
                                   
                  return   0;  
          }  
  }  
   
  return   CallWindowProc(ctp->wpOldProc,   hwnd,   msg,   wParam,   lParam);  
   
   
  Mouse   Movement   (WM_MOUSEMOVE)  
   
  如果光标位于按钮内,则按钮被绘制成凹陷状态,否则正常状态。  
   
  GetButtonRect(ctp,   hwnd,   ctp->iActiveButton,   &rect,   FALSE);  
   
  if(PtInRect(&rect,   pt))  
          ctp->buttons[ctp->iActiveButton].fPressed   =   TRUE;  
  else  
          ctp->buttons[ctp->iActiveButton].fPressed   =   FALSE;  
   
   
  Mouse   button   up   (WM_LBUTTONUP)  
   
  当鼠标释放时,我们在WM_LBUTTONUP消息中为指定的按钮发送WM_COMMAND消息,以便处理不同按钮的动作。  
   
  GetButtonRect(ctp,   hwnd,   ctp->iActiveButton,   &rect,   FALSE);  
   
  if(PtInRect(&rect,   pt))  
          SendMessage(hwnd,   WM_COMMAND,   ctp->buttons[ctp->iActiveButton].uCmd,   0);  
   
   
  Hit-testing   (WM_NCHITTEST)  
   
  默认情况下,如果鼠标移动到我们插入的按钮上,系统将返回HTCAPTION,我们必须重载该消息处理函数,以便在这种情况下返回HTBORDER,防止系统误处理HTCAPTION动作。  
   
  for(i   =   0;   i   <   ctp->nNumButtons;   i++)  
  {  
          GetButtonRect(ctp,   hwnd,   i,   &rect,   FALSE);  
   
          if(PtInRect(&rect,   pt))  
                  return   HTBORDER;  
  }  
   
  return   CallWindowProc(ctp->wpOldProc,   hwnd,   msg,   wParam,   lParam);  
   
   
  最后一步(One   last   step)  
  最后还有两个消息需要处理:   WM_NCACTIVATE   和   WM_SETTEXT。这些消息绘导致窗口重画,从而覆盖我们插入的按钮。不幸的是这些消息并不通过   WM_NCPAINT   重画!我想这是Windows的一个设计缺陷。解决的办法是在窗口过程处理这些消息之前先把窗口的WS_VISIBLE风格关掉,这样窗口就不绘制重画,在处理完具体的事情之后再打开并由我们自己重画窗口标题栏:  
   
  取消窗口   WS_VISIBLE   风格,这将组织窗口重画。    
   
  调用旧的窗口过程处理消息。    
   
  打开窗口的WS_VISIBLE风格。    
   
  调用我们自己的函数绘制标题栏。    
   
  代码如下所示:  
   
  LRESULT   foobar(HWND   hwnd,   UINT   msg,   WPARAM   wParam,   LPARAM   lParam)  
  {  
          DWORD   ret,   dwStyle;  
   
          dwStyle   =   GetWindowLong(hwnd,   GWL_STYLE);  
   
          //   turn   OFF   WS_VISIBLE  
          SetWindowLong(hwnd,   GWL_STYLE,   dwStyle   &   ~WS_VISIBLE);  
   
          //   perform   the   default   action,   minus   painting  
          ret   =   CallWindowProc(ctp->wpOldProc,   hwnd,   msg,   wParam,   lParam);  
   
          //   turn   ON   WS_VISIBLE  
          SetWindowLong(hwnd,   GWL_STYLE,   dwStyle);  
   
          //   perform   custom   painting  
          Caption_NCPaint(hwnd,   (HRGN)1);  
   
          return   ret;  
  }  
  上面这段代码可以在   WM_SETTEXT   和WM_NCACTIVATE中使用。  
   
   
  结论(Conclusion)  
  还有另外一种方法可以定制标题栏按钮,你可以简单地用WS_POPUP风格调用CreateWindow函数创建一个按钮(button   control)。然后将其放置在窗口标题栏上,就像正常的窗口按钮一样。当然它也能正常工作,但是这种方法并不是最好的。最主要的问题是窗口的焦点,剪切和绘制问题。  
   
  (完)Top

30 楼weiyulin(weidayed520)回复于 2006-01-20 12:47:13 得分 0

CCCCCCCCCCCCCCCCCCCCCCCCC,C语言的,,,,,   这回郁闷了  
   
                      都是看不懂的东东Top

31 楼zyl910(编程的乐趣在于编程控制硬件,与用图形学实现绚丽效果)回复于 2006-01-20 12:52:15 得分 0

你可看文字描述啊,API在Win32平台上都是通用的Top

32 楼zyl910(编程的乐趣在于编程控制硬件,与用图形学实现绚丽效果)回复于 2006-01-20 12:54:45 得分 0

注意在“结论(Conclusion)”中提到了另一种简单的方法:  
   
  还有另外一种方法可以定制标题栏按钮,你可以简单地用WS_POPUP风格调用CreateWindow函数创建一个按钮(button   control)。然后将其放置在窗口标题栏上,就像正常的窗口按钮一样。当然它也能正常工作,但是这种方法并不是最好的。最主要的问题是窗口的焦点,剪切和绘制问题。Top

33 楼zyl910(编程的乐趣在于编程控制硬件,与用图形学实现绚丽效果)回复于 2006-01-20 13:08:56 得分 0

刚才找代码时顺便看到的:  
   
  http://www.vb99.com/loaddown.asp?tid=1&pathid=3&Filenames=62  
  在窗体的任意位置绘图。这段代码演示了如何在窗口的标题栏和边框上绘图。   2003-06-07     397    
   
   
  http://www.vb99.com/loaddown.asp?tid=1&pathid=5&Filenames=98  
  这段代码演示了怎样在窗体的标题栏上添加一个按钮。  
  Top

34 楼weiyulin(weidayed520)回复于 2006-01-20 14:03:21 得分 0

这位大哥,感谢你回我,,     你说的都不能满足我的要求Top

相关问题

  • 获取视图句柄
  • 怎样获取窗口句柄
  • 怎样获取图标句柄?
  • 如何获取窗口句柄?
  • 请问如何获取MessageBox的句柄??
  • 如何获取IE的窗口句柄?
  • 急!!!<如何获取控件句柄>!!!
  • 求一API:获取父窗口句柄
  • 获取窗口里的控件句柄
  • 如果获取窗口句柄

关键词

  • ctp
  • 函数
  • 消息
  • 鼠标
  • 代码
  • 按钮
  • 标题栏
  • 句柄
  • 绘制
  • getbuttonrect

得分解答快速导航

  • 帖主:weiyulin
  • zyl910

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo