不规则窗体如何创建

liebecss3 2013-02-15 05:05:35

这个形状的不规则窗体谁创建能顺手捏来?
100分求助不要跟我说什么用什么和什么请用代码说话 举例说明~!图上是一个窗体不是贴图
...全文
266 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
现在还是人类 2013-03-13
  • 打赏
  • 举报
回复
引用 7 楼 c0631106233 的回复:
GDI+?
正是 GDI+ 配合 UpdateLayeredWindow 函数,可以使用 PNG 做素材(想怎么透明头可以),还可以动态绘制带透明的图像层,完成后 UpdateLayeredWindow 就搞定,界面灵活多变,可以说只有你想不到的,没有做不到的效果。
酷心 2013-03-13
  • 打赏
  • 举报
回复
简单点是贴图,用Ps之类的处理好,然后用4楼的方法透明掉背景。
引用 1 楼 SupermanKing 的回复:
看看背景的代码,关键的在最下面一行
GDI+?
  • 打赏
  • 举报
回复
引用 4 楼 tianzhi0549 的回复:
Private Declare Function RoundRect Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As Long Pri……
都牛人啊
熊孩子开学喽 2013-02-16
  • 打赏
  • 举报
回复
好像楼主发过一个重复贴了,看这个例子: http://download.csdn.net/detail/WallesCai/795601
tianzhi0549 2013-02-16
  • 打赏
  • 举报
回复
Private Declare Function RoundRect Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As Long Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long Private Sub Form_Load() AutoRedraw = True BackColor = vbWhite FillStyle = 0 Call RoundRect(Me.hdc, 20, 20, 200, 70, 5, 5) Call RoundRect(Me.hdc, 50, 10, 90, 80, 5, 5) Dim rtn As Long rtn = GetWindowLong(hwnd, -20) rtn = rtn Or &H80000 Call SetWindowLong(hwnd, -16, 0) Call SetWindowLong(Me.hwnd, -20, rtn) SetLayeredWindowAttributes hwnd, vbWhite, 0, 1 End Sub 就这么简单吗?直接把代码复制过去看看吧。
现在还是人类 2013-02-15
  • 打赏
  • 举报
回复
呵呵,看来你还不明白,我上面的窗口与你的那个窗口实现都不是一个级别的。 不知道你注意看没有,窗口有全透明区域、有半透明区域还有不透明区域,还有阴影部分(透明过度)。 这些都能实现,你的那个窗口要实现起来难道你认为不行?
liebecss3 2013-02-15
  • 打赏
  • 举报
回复
引用 1 楼 SupermanKing 的回复:
看看背景的代码,关键的在最下面一行
这是你的代码吗?你先捏出个我那样子在让我看哪行
现在还是人类 2013-02-15
  • 打赏
  • 举报
回复

看看背景的代码,关键的在最下面一行
一、序言   在绝大多数的Windows应用程序中,其窗体都是使用的正规正矩的矩形窗体,例如我们常用的,“记事本”,“扫雷”,等等。矩形窗体,具有编程实现简单,风格简洁的优点,所以在普通文档应用程序和简单小游戏中使用足矣。但在某些娱乐游戏程序中使用就略显呆板些了,这时若用不规则窗体替代原先的矩形窗体,将会使这类程序更添情趣。典型的例子有windows 自代的Media Player,新版本的Media Player有个控制面板的选项,选中这些面板,播放器就以选中的面板形状出现,这时的播放器比以前版本的Media Player的古老矩形界面要生动有趣的多了。 要实现不规则窗体不是太难,知道了基本原理后,你也可以创建各种有趣的不规则窗体。 二、实现原理   所有的 Windows 窗体都位于一个称为“region”中,窗体的大小如果超出“region”的范围,windows 会自动裁剪超出"region"范围那部分的窗体,使其不可见。所以,要创建不规则窗体有两个步骤:第一步就是创建不规则"region".第二步就是将窗体放到创建的“region”中。   其中第二步很简单就调用一条语句即可。在SDK中调用API函数SetWindowRgn,该函数原型如下:int SetWindowRgn( HWND hWnd, HRGN hRgn, BOOL bRedraw );   其中hWnd为待设置的窗体句柄,hRgn为已经创建的"region"句柄,bRedraw代表是否要重绘窗体。在MFC 中使用窗口类CWnd的成员函数int CWnd::SetWindowRgn(HRGN hRgn, BOOL bRedraw );该函数的参数意义与API中同名函数相同。   相对与第二步,创建不规则窗体的第一步要复杂许多,并且不规则窗体越复杂,创建其"region"的过程也越复杂。接下去我们将由浅入深地介绍各种创建”region”的方法。   在MFC中"region"对象,由CRgn类实现。CRgn的几乎每个成员函数都有同名的SDK API函数对应。 三、简单“region”的创建   类CRgn创建一个新的"region"的简单方法有以下几个成员函数: BOOL CRgn::CreateRectRgn( int x1, int y1, int x2, int y2 ); 创建矩形的“region”。 BOOL CRgn::CreateEllipticRgn( int x1, int y1, int x2, int y2 ); 创建圆形或椭圆形“region”。 BOOL CRgn::CreateRoundRectRgn( int x1, int y1, int x2, int y2, int x3, int y3 ); 创建圆角矩形“region”。 BOOL CRgn::CreatePolygonRgn( LPPOINT lpPoints, int nCount, int nMode ); 创建多边形“region”。   这里以创建椭圆窗体为例,介绍椭圆窗体创建的方法。在创建椭圆“region”的CreateEllipticRgn函数中,x1,y1指椭圆所在矩形的左上角坐标,x2,y2指该矩形的右下角坐标。 ....... ....... ....... (附代码实现)

1,453

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧