eXile 的专栏

QT中异形窗口的绘制


  这里讨论的只是Windows平台上的实现。
  在QT中绘制异形窗口,只要设定 windowFlag 为 CustomizeWindowHint,再结合setMask()就可以做出各种奇形怪状的窗口。相对来说比较麻烦的, 是进行窗口拖动和缩放的处理。
  在 Windows SDK 和 MFC 中比较容易,只要处理 WM_NCHITTEST,返回相应的测试值就可以了。幸运的是,QT中也提供了直接处理各平台消息的方法,在 Windows下只需要重载winEvent方法。
 
  下面给出了示例代码:
// include <windows.h>

bool MyDialog::winEvent(MSG* msg, long* result)
{
    
const int captionHeight = 25;
    
const int frameWidth = 6;
    
    
if (msg->message != WM_NCHITTEST) return false;

    QPoint pos 
= mapFromGlobal(QCursor::pos());
    
int w = width();
    
int h = height();

    
if (QRect(frameWidth, captionHeight, w-frameWidth-frameWidth, h-captionHeight-frameWidth).contains(pos))
    {
        
*result = HTCLIENT;
    }
    
else if (QRect(00, w, captionHeight).contains(pos))
    {
        
*result = HTCAPTION;
    }
    
else if (QRect(0, captionHeight, frameWidth, h-captionHeight-frameWidth).contains(pos))
    {
        
*result = HTLEFT;
    }
    
else if (QRect(w-frameWidth, captionHeight, frameWidth, h-captionHeight-frameWidth).contains(pos))
    {
        
*result = HTRIGHT;
    } 
        else if  (QRect(frameWidth, h-frameWidth, w-frameWidth-frameWidth, frameWidth).contains(pos))
       {
           *result = HTBOTTOM;
       } 
    
else if (QRect(0, h-frameWidth, frameWidth, frameWidth).contains(pos))
    {
        
*result = HTBOTTOMLEFT;
    }
    
else if (QRect(w-frameWidth, h-frameWidth, frameWidth, frameWidth).contains(pos))
    {
        
*result = HTBOTTOMRIGHT;
    }
    
    return 
true;
}

posted on 2007-12-09 15:06 eXile 阅读(4772) 评论(4)  编辑 收藏 引用 所属分类: C/C++代码片段QT

评论

# re: QT中异形窗口的绘制 2007-12-10 09:32 boost.hl@gmail.com

又是QT,呵呵,为什么不用JAVA,而用QT尼?  回复  更多评论   

# re: QT中异形窗口的绘制 2007-12-18 21:25 秦歌

我学习学习这方面的知识  回复  更多评论   

# re: QT中异形窗口的绘制 2007-12-23 03:17 重剑

@boost.hl@gmail.com
写地图编辑器的话你也用java?
写网游客户端自动更新工具你也用java?让玩家装jre?  回复  更多评论   

# re: QT中异形窗口的绘制 2008-10-27 09:21 反对盗版

QT 好
JAVA 虚拟机不适合做客户端  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

<2008年5月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

统计

常用链接

留言簿(18)

随笔分类

随笔档案

服务器编程

搜索

最新评论

阅读排行榜

评论排行榜