VB GDI+为无边框窗体画4条线供描边

已经画了2条线,然而,另外两条不知道什么原因画不出来,请用GdipDrawLinei,帮帮忙GdipDrawLineIgraphics,pen,0,0,Me.Width,... 已经画了2条线,然而,另外两条不知道什么原因画不出来,请用GdipDrawLinei,帮帮忙
GdipDrawLineI graphics, pen, 0, 0, Me.Width, 0 '最上方的线
GdipDrawLineI graphics, pen, 0, 0, 0, Me.Height '高1
GdipDrawLineI graphics, pen, 0, Me.Height, Me.Width, Me.Height
GdipDrawLineI graphics, pen, Me.Width, 0, Me.Width, Me.Height
前两条有效,后两条无效
展开
 我来答
匿名用户
2016-06-29
展开全部
在VB中,BorderStyle属性为0的窗体没有边框,并且也没有与边框相关的元素。这种窗体具有简洁、占用空间少等优点,用它可以设计出某些富有个性的窗体。但是,由于它没有标题栏,窗体不能移动,同时也不能改变大小,在某些情况下会给使用者造成一定的麻烦。本文介绍在VB中如何用API函数操作无边框窗体。移动窗体  新建一标准工程,设置Form1的BorderStyle属性为0。此时运行程序后,无法移动窗体。为能移动窗体,在Form1的代码窗口声明下列函数和常数:  OptionExplicit  PrivateDeclareFunctionReleaseCaptureLib“user32”()AsLong  PrivateDeclareFunctionSendMessageLib“user32”Alias“SendMessageA”(ByValhwndAsLong,ByValwMsgAsLong,  ByValwParamAsLong,lParamAsAny)AsLong  ConstWM_SYSCOMMAND=&H112  ConstSC_MOVE=&HF012  在Form_MouseDown事件中输入以下代码:  PrivateSubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)  按下鼠标左键  IfButton=vbcenterButtonThen  为当前的应用程序释放鼠标捕获  ReleaseCapture  移动窗体  SendMessageMe.hwnd,WM_SYSCOMMAND,SC_MOVE,0  EndIf  EndSub  注意:此时窗体上不能放置除Shape控件以外的任何控件,否则,在被控件遮住的地方点按鼠标还是无法移动窗体。要使点按控件也能移动窗体,需再添加一个该控件的MouseDown事件过程,代码与上述过程代码相似。  改变窗体的大小  为了改变窗体的大小,需要添加一个Timer控件,以定时捕获鼠标在窗体中的位置。当鼠标位于窗体边缘时,改变鼠标的形状,以通知用户可以进行改变大小的操作。为此,将Timer控件的Interval属性设为100(即每过100毫秒检测一下鼠标位置),其他取默认值。  在Form1的代码窗口中再添加下列两个函数,并定义两个自定义变量和一个字符串变量:  取得窗体位置的函数  PrivateDeclareFunctionGetWindowRectLib“user32”(ByValhwndAsLong,lpRectAsRECT)AsLong  取得鼠标位置的函数  PrivateDeclareFunctionGetCursorPosLib“user32”(lpPointAsPOINTAPI)AsLong  鼠标位置变量  PrivateTypePOINTAPI  xAsLong  yAsLong  EndType  窗体位置变量  PrivateTypeRECT  centerAsLong  TopAsLong  centerAsLong  BottomAsLong  EndType  所要执行的动作变量,是移动还是改变大小及从哪个方向改变大小  DimActionAsString  在Timer1控件的Timer事件过程中添加以下代码:  PrivateSubTimer1_Timer()  DimMyRectAsRECT  DimMyPointAsPOINTAPI  MyRect返回当前窗口位置  CallGetWindowRect(Me.hwnd,MyRect)  MyPoint返回当前鼠标位置  CallGetCursorPos(MyPoint)  SelectCaseTrue  鼠标位于窗体左上方  CaseMyPoint.x  Screen.MousePointer=vbSizeNWSE  Action=“centerUp”  鼠标位于窗体右下方  CaseMyPoint.x>MyRect.center-5AndMyPoint.y>MyRect.Bottom-5  Screen.MousePointer=vbSizeNWSE  Action=“centerDown”  鼠标位于窗体右上方  CaseMyPoint.x>MyRect.center-5AndMyPoint.y  ’45度双向鼠标指针  Screen.MousePointer=vbSizeNESW  Action=“centerUp”  鼠标位于窗体左下方  CaseMyPoint.xMyRect.Bottom-5  Screen.MousePointer=vbSizeNESW  Action=“centerDown”  鼠标位于窗体左边  CaseMyPoint.xMyRect.Bottom-5  Screen.MousePointer=vbSizeNS  Action=“Down”  鼠标位于窗体其他位置  CaseElse  默认鼠标指针  Screen.MousePointer=0  Action=“Move”  EndSelect  EndSub  当利用SendMessage函数由系统向窗口发送改变大小的信息时,只要将上面移动窗体的语句“SendMessageMe.hwnd,WM_SYSCOMMAND,SC_MOVE,0”中的第3个参数改为相应的常数即可。  VB中&HF001~&HF008分别是从左、右、上、左上、右上、下、左下、右下8个方向改变窗体大小的常数。结合移动窗体的代码,将上述Form_MouseDown事件的代码综合如下(也可以把这8个常数声明为自定义常数):  PrivateSubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,xAsSingle,yAsSingle)  按下鼠标左键  IfButton=vbcenterButtonThen  为当前的应用程序释放鼠标捕获  ReleaseCapture  SelectCaseAction  Case“center”  SendMessageMe.hwnd,WM_SYSCOMMAND,&HF001,0  Case“center”  SendMessageMe.hwnd,WM_SYSCOMMAND,&HF002,0  Case“Up”  SendMessageMe.hwnd,WM_SYSCOMMAND,&HF003,0  Case“centerUp”  SendMessageMe.hwnd,WM_SYSCOMMAND,&HF004,0  Case“centerUp”  SendMessageMe.hwnd,WM_SYSCOMMAND,&HF005,0  Case“Down”  SendMessageMe.hwnd,WM_SYSCOMMAND,&HF006,0  Case“centerDown”  SendMessageMe.hwnd,WM_SYSCOMMAND,&HF007,0  Case“centerDown”  SendMessageMe.hwnd,WM_SYSCOMMAND,&HF008,0  Case“Move”  SendMessageMe.hwnd,WM_SYSCOMMAND,SC_MOVE,0  EndSelect  EndIf  EndSub
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式