📄 csdn_文档中心_windows高级窗口的客户区域拖动技术及其应用.htm
字号:
(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>x1;I-=2) <BR><BR> SetPixel(hdc,I,y2,RGB(255,0,0));
<BR><BR> //if (I>x1+2) SetPixel(hdc,I-1,y2-1,RGB(255,0,0));}
<BR><BR> for (I=y2;I>y1;I-=2) <BR><BR>
SetPixel(hdc,x1,I,RGB(255,0,0)); <BR><BR> //if (I>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(&DragRT,pt)){//DragRT为拖动命令区域 <BR><BR>
DragBegin((LPRECT)&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> 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> 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 © 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 + -