⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 csdn_文档中心_windows高级窗口的客户区域拖动技术及其应用.htm

📁 csdn10年中间经典帖子
💻 HTM
📖 第 1 页 / 共 3 页
字号:
            (k=0;k <BR><BR>  xx1-=1; <BR><BR>  xx2+=1; <BR><BR>  yy1-=1; 
            <BR><BR>  yy2+=1; <BR><BR>  Rectangle(hDC2,xx1,yy1,xx2,yy2); 
            <BR><BR>   } <BR><BR>   SetROP2(hDC2,oldrop2); //恢复原来作图方式 <BR><BR>   
            ReleaseDC(NULL,hDC2); //释放设备描述符表 <BR><BR>  } <BR><BR>   
            //函数2:利用画线函数实现拖动实框或虚框 <BR><BR>  void DrawMoveRect(int xx1,int 
            yy1,int xx2,int yy2,int xy) <BR><BR>  { HDC hDC2; <BR><BR>   int 
            oldrop2,m,k; <BR><BR>   hDC = GetDC(NULL); //取得全屏幕设备描述句柄 <BR><BR>   
            oldrop2= GetROP2(hDC); //取得原来屏幕画图方式 <BR><BR>   
            SetROP2(hDC,R2_XORPEN); //设置异或屏幕画图方式 <BR><BR>   
            SelectObject(hDC,GetStockObject(NULL_BRUSH));//屏蔽画刷 <BR><BR>   
            SelectObject(hDC2,GetStockObject(WHITE_PEN));//选择画笔 <BR><BR>   for 
            (k=0;k <BR><BR>   xx1-=1; <BR><BR>   xx2+=1; <BR><BR>   yy1-=1; 
            <BR><BR>   yy2+=1; <BR><BR>   MoveTo(hDC2,xx1,yy1); 
            <BR><BR>  LineTo(hDC2,xx2,yy1); <BR><BR>  MoveTo(hDC2,xx1,yy1); 
            <BR><BR>  LineTo(hDC2,xx2,yy1); <BR><BR>   } <BR><BR>   
            SetROP2(hDC2,oldrop2); //恢复原来作图方式 <BR><BR>   ReleaseDC(NULL,hDC2); 
            //释放设备描述符表 <BR><BR>  } <BR><BR>   //函数3:利用画点函数实现不同图案的拖动虚框 
            <BR><BR>  void DrawMoveRect(int xx1,int yy1,int xx2,int yy2,int xy) 
            <BR><BR>  { HDC hDC2; <BR><BR>   int oldrop2,I,j,x1,x2,y1,y2; 
            <BR><BR>   hDC = GetDC(NULL); //取得全屏幕设备描述句柄 <BR><BR>  oldrop2= 
            GetROP2(hDC); //取得原来屏幕画图方式 <BR><BR>  SetROP2(hDC,R2_XORPEN); 
            //设置异或屏幕画图方式 
            <BR><BR>  SelectObject(hDC,GetStockObject(NULL_BRUSH));//屏蔽画刷 
            <BR><BR>  SelectObject(hDC2,GetStockObject(WHITE_PEN));//选择画笔 
            <BR><BR>  for (j=0;j <BR><BR>  x1=xx1-j; //带注释部分为另一图案 
            <BR><BR>  x2=xx2+j; <BR><BR>  y1=yy1-j; <BR><BR>  y2=yy2+j; 
            <BR><BR>  for (I=x1;I <BR><BR>   SetPixel(hdc,I,y1,RGB(255,0,0)); 
            <BR><BR>   //if (I <BR><BR>  for (I=y1;I <BR><BR>   
            SetPixel(hdc,x2,I,RGB(255,0,0)); <BR><BR>   //if (I <BR><BR>  for 
            (I=x2;I&gt;x1;I-=2) <BR><BR>   SetPixel(hdc,I,y2,RGB(255,0,0)); 
            <BR><BR>   //if (I&gt;x1+2) SetPixel(hdc,I-1,y2-1,RGB(255,0,0));} 
            <BR><BR>  for (I=y2;I&gt;y1;I-=2) <BR><BR>   
            SetPixel(hdc,x1,I,RGB(255,0,0)); <BR><BR>   //if (I&gt;y1+2) 
            SetPixel(hdc,x1+1,I-1,RGB(255,0,0));} <BR><BR>   } 
            <BR><BR>  SetROP2(hDC2,oldrop2); //恢复原来作图方式 
            <BR><BR>  ReleaseDC(NULL,hDC2); //释放设备描述符表 <BR><BR>  } 
            <BR><BR>  三、WINDOWS高级窗口客户区域拖动技术实现的“三步曲” <BR><BR>  WINDOWS 
            高级窗口的客户区域拖动命令判断、拖动功能的鼠标光标动态提示和定制窗口拖动框函数之后,就需要实现整个拖动方案中的拖动过程启动、窗口拖动框移动和拖动结束处理的三步曲过程。于是必须在窗口函数中直接处理WM_LBUTTONDOWN、WM_MOUSEMOVE和WM_LBUTTONUP消息,来具体处理上述三个步骤中的细节问题。 
            <BR><BR>  第一步,在窗口函数中对鼠标点击消息WM_LBUTTONDOWN进行判断处理,以处理用户通过鼠标光标动态提示功能获取满足窗口拖动条件时,按下鼠标左键产生的启动拖动过程消息,其功能性代码如下: 
            <BR><BR>  POINT pt; <BR><BR>  BOOL MoveFlag=FALSE; <BR><BR>  case 
            WM_LBUTTONDOWN: <BR><BR>   pt = MAKEPOINT(lParam); //获取鼠标光标指针 
            <BR><BR>   if(PtInRect(&amp;DragRT,pt)){//DragRT为拖动命令区域 <BR><BR>   
            DragBegin((LPRECT)&amp;WinRT,lParam,hWnd,2); <BR><BR>   //启动窗口拖动过程 
            <BR><BR>   } else {进行其它处理} <BR><BR>   break; <BR><BR>  上述DragBegin( 
            )函数为笔者开发的窗口拖动启动函数,由于一个高级窗口应用程序中往往存在很多窗口,所以将其作为一个单独函数处理。其中WinRT 
            为高级窗口矩形区域,这里作为拖动框矩形区域参数来传递,lParam为鼠标光标指针长整数,hWnd为当前被拖动窗口的句柄,2 
            为拖动框宽度。同时需要将鼠标控制权交给当前被拖动窗口、设置拖动窗口标志单元、保存当前鼠标在屏幕上的位置并显示被拖动窗口的拖动框。拖动功能启动函数的原形代码如下: 
            <BR><BR>  void DragBegin( <BR><BR>   LPRECT WinRect, //拖动框的矩形区域 
            <BR><BR>   LPARAM lParam, //鼠标光标当前指针 <BR><BR>   HWND hwnd, //当前窗口句柄 
            <BR><BR>   unsigned int kk) //拖动框显示的宽度 <BR><BR>  { <BR><BR>   
            SetCapture(hwnd); //拖动时窗口必须具有鼠标输入权 <BR><BR>   MoveFlag=TRUE; 
            //设置拖动标志 <BR><BR>   
    oldmx=LOWORD(lParam);//记录<BR></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR>
<TABLE align=center bgColor=#006699 border=0 cellPadding=0 cellSpacing=0 
width=770>
  <TBODY>
  <TR bgColor=#006699>
    <TD align=middle bgColor=#006699 id=white><FONT 
    color=#ffffff>对该文的评论</FONT></TD>
    <TD align=middle>
      <SCRIPT 
      src="CSDN_文档中心_WINDOWS高级窗口的客户区域拖动技术及其应用.files/readnum.htm"></SCRIPT>
    </TD></TR></TBODY></TABLE>
<TABLE align=center bgColor=#666666 border=0 cellPadding=2 cellSpacing=1 
width=770>
  <TBODY>
  <TR>
    <TD bgColor=#cccccc colSpan=3><SPAN style="COLOR: #cccccc"><IMG height=16 
      hspace=1 src="CSDN_文档中心_WINDOWS高级窗口的客户区域拖动技术及其应用.files/ico_pencil.gif" 
      width=16> </SPAN>&nbsp;&nbsp;&nbsp;&nbsp; Justhappy <I>(2001-2-8 
      22:26:03)</I> </TD></TR>
  <TR>
    <TD bgColor=#ffffff colSpan=3 width=532><BR>这种方法倒的确很好。 
      不过不要这么说别人方法土嘛,很难听的,哈哈 <BR></TD></TR></TBODY></TABLE>
<TABLE align=center bgColor=#666666 border=0 cellPadding=2 cellSpacing=1 
width=770>
  <TBODY>
  <TR>
    <TD bgColor=#cccccc colSpan=3><SPAN style="COLOR: #cccccc"><IMG height=16 
      hspace=1 src="CSDN_文档中心_WINDOWS高级窗口的客户区域拖动技术及其应用.files/ico_pencil.gif" 
      width=16> </SPAN>&nbsp;&nbsp;&nbsp;&nbsp; DrunkenLion <I>(2000-8-11 
      16:13:43)</I> </TD></TR>
  <TR>
    <TD bgColor=#ffffff colSpan=3 width=532><BR>这种方法太土了,用: 
      WM_NCHitTest消息设置它的返回值即可返回值如下: HTBORDER 
      Intheborderofawindowthatdoesnothaveasizingborder HTBOTTOM 
      Inthelowerhorizontalborderofawindow HTBOTTOMLEFT 
      Inthelower-leftcornerofawindowborder HTBOTTOMRIGHT 
      Inthelower-rightcornerofawindowborder HTCAPTION Inatitlebar HTCLIENT 
      Inaclientarea HTERROR 
      Onthescreenbackgroundoronadividinglinebetweenwindows(sameasHTNOWHERE,exceptthattheDefWindowProcfunctionproducesasystembeeptoindicateanerror) 
      HTGROWBOX Inasizebox(sameasHTSIZE) HTHSCROLL Inahorizontalscrollbar HTLEFT 
      Intheleftborderofawindow HTMENU Inamenu HTNOWHERE 
      Onthescreenbackgroundoronadividinglinebetweenwindows HTREDUCE 
      InaMinimizebutton HTRIGHT Intherightborderofawindow HTSIZE 
      Inasizebox(sameasHTGROWBOX) HTSYSMENU 
      InaSystemmenuorinaClosebuttoninachildwindow HTTOP 
      Intheupperhorizontalborderofawindow HTTOPLEFT 
      Intheupper-leftcornerofawindowborder HTTOPRIGHT 
      Intheupperrightcornerofawindowborder HTTRANSPARENT 
      Inawindowcurrentlycoveredbyanotherwindow HTVSCROLL Intheverticalscrollbar 
      HTZOOM InaMaximizebutton 
      然后系统会根据返回值判定怎么走比方说设置返回值为HTCAPTION,就可以拖动窗口了当然可以在消息处理函数中,设置不同的区域有不同的返回值,就可以实现很好的效果,试试看? 
      <BR></TD></TR></TBODY></TABLE><BR>
<DIV align=center>
<TABLE align=center bgColor=#cccccc border=0 cellPadding=2 cellSpacing=1 
width=770>
  <TBODY>
  <TR>
    <TH bgColor=#006699 id=white><FONT 
color=#ffffff>我要评论</FONT></TH></TR></TBODY></TABLE></DIV>
<DIV align=center>
<TABLE border=0 width=770>
  <TBODY>
  <TR>
    <TD>你没有登陆,无法发表评论。 请先<A 
      href="http://www.csdn.net/member/login.asp?from=/Develop/read_article.asp?id=303">登陆</A> 
      <A 
href="http://www.csdn.net/expert/zc.asp">我要注册</A><BR></TD></TR></TBODY></TABLE></DIV><BR>
<HR noShade SIZE=1 width=770>

<TABLE border=0 cellPadding=0 cellSpacing=0 width=500>
  <TBODY>
  <TR align=middle>
    <TD height=10 vAlign=bottom><A 
      href="http://www.csdn.net/intro/intro.asp?id=2">网站简介</A> - <A 
      href="http://www.csdn.net/intro/intro.asp?id=5">广告服务</A> - <A 
      href="http://www.csdn.net/map/map.shtm">网站地图</A> - <A 
      href="http://www.csdn.net/help/help.asp">帮助信息</A> - <A 
      href="http://www.csdn.net/intro/intro.asp?id=2">联系方式</A> - <A 
      href="http://www.csdn.net/english">English</A> </TD>
    <TD align=middle rowSpan=3><A 
      href="http://www.hd315.gov.cn/beian/view.asp?bianhao=010202001032100010"><IMG 
      border=0 height=48 
      src="CSDN_文档中心_WINDOWS高级窗口的客户区域拖动技术及其应用.files/biaoshi.gif" 
  width=40></A></TD></TR>
  <TR align=middle>
    <TD vAlign=top>百联美达美公司 版权所有 京ICP证020026号</TD></TR>
  <TR align=middle>
    <TD vAlign=top><FONT face=Verdana>Copyright &copy; CSDN.net, Inc. All rights 
      reserved</FONT></TD></TR>
  <TR>
    <TD height=15></TD>
    <TD></TD></TR></TBODY></TABLE></DIV>
<DIV></DIV><!--内容结束//--><!--结束//--></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -