在SOUI中非半透明窗口如何实现圆角窗口?
如果SOUI的宿主窗口没有包含子窗口,直接使用窗口的半透明属性:translucent=1就可以解决了,整个窗口形状完全由背景图决定,可以实现完美的圆角。
然后窗口半透明时,窗口中的子窗口(非SWindow)就不能正常显示,所以有时候不得不使用translucent=0,这时窗口就成了方形。
实际上这个问题已经和SOUI没有什么关系了,你的问题变成了窗口如何做圆角,还不是在SOUI中窗口如何做圆角。
网上一搜索一大堆,可惜经常有人要问。
给窗口做圆角或者异形好像只有一个办法:SetWindowRgn,自己创建一个HRGN,再调用这个API就可以了,关键问题是在窗口大小变化时注意重新设置。
好人做到底,这里帖一份专业做圆角的代码:
template <class T>
class CWHRoundRectFrameHelper
{
protected: SIZE m_sizeWnd; void OnSize(UINT nType, CSize size)
{
T *pT = static_cast<T*>(this); if (nType == SIZE_MINIMIZED)
return; if (size == m_sizeWnd)
return; CRect rcWindow, rcClient;
CRgn rgnWindow, rgnMinus, rgnAdd; pT->CSimpleWnd::GetWindowRect(rcWindow);
pT->CSimpleWnd::GetClientRect(rcClient);
pT->CSimpleWnd::ClientToScreen(rcClient); rcClient.OffsetRect(- rcWindow.TopLeft()); rgnWindow.CreateRectRgn(rcClient.left, rcClient.top + , rcClient.right, rcClient.bottom - );
rgnAdd.CreateRectRgn(rcClient.left + , rcClient.top, rcClient.right - , rcClient.top + );
rgnWindow.CombineRgn(rgnAdd, RGN_OR);
rgnAdd.OffsetRgn(, rcClient.Height() - );
rgnWindow.CombineRgn(rgnAdd, RGN_OR);
rgnAdd.SetRectRgn(rcClient.left + , rcClient.top + , rcClient.right - , rcClient.top + );
rgnWindow.CombineRgn(rgnAdd, RGN_OR);
rgnAdd.OffsetRgn(, rcClient.Height() - );
rgnWindow.CombineRgn(rgnAdd, RGN_OR);
pT->CSimpleWnd::SetWindowRgn(rgnWindow);
pT->SetMsgHandled(FALSE);
m_sizeWnd = size;
} public: BOOL ProcessWindowMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT& lResult, DWORD dwMsgMapID = )
{
BOOL bHandled = TRUE; switch(dwMsgMapID)
{
case :
if (uMsg == WM_SIZE)
{
OnSize((UINT)wParam, _WTYPES_NS::CSize(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam)));
lResult = ;
}
break;
}
return FALSE;
}
};
这是一个模板类,下面给一个SOUI中使用的示例代码:
class CFuckDialog : public SHostDialog , public CWHRoundRectFrameHelper<CFuckDialog>
{
//xxxxx
//HOST消息及响应函数映射表
BEGIN_MSG_MAP_EX(CMainDlg)
CHAIN_MSG_MAP(CWHRoundRectFrameHelper<CFuckDialog >)//重要
CHAIN_MSG_MAP(SHostDialog)
REFLECT_NOTIFICATIONS_EX()
END_MSG_MAP()
//xxxx
};
这样你的Dialog就有圆角了。
在SOUI中非半透明窗口如何实现圆角窗口?的更多相关文章
- 第十三篇:在SOUI中使用有窗口句柄的子窗口
前言: 无论一个DirectUI系统提供的DUI控件多么丰富,总会有些情况下用户需要在DUI窗口上放置有窗口句柄的子窗口. 为了和无窗口句柄的子窗口相区别,这里将有窗口句柄的子窗口称之为真窗口. 每一 ...
- 第三十一篇:SOUI布局之相对于特定兄弟窗口
SOUI中通过pos的标志如:[, {, }, ],这4个标志可以相对于前一个及后一个兄弟窗口,但是有时候希望相对于不是前后窗口的兄弟窗口,比如一个通过一个中心窗口同时定义它的上下左右4个窗口,这个时 ...
- WPF 创建无边框的圆角窗口
原文:WPF 创建无边框的圆角窗口 如题所述,在WPF中要创建一个没有边框且为圆角的窗体,有如下几步工作要进行: 第一步:去掉窗体默认样式的边框 首先将窗体的背景设为透明,将允许透明的属性设置为Tru ...
- CQGUI框架之阴影圆角窗口实现
CQGUI框架之阴影圆角窗口实现 大家好,我是IT文艺男,来自一线大厂的一线程序员 今天给大家讲解基于C++/Qt的CQGUI框架的阴影圆角窗口实现,实现效果如下图所示:: CQGUI开发环境:: M ...
- [Swift通天遁地]一、超级工具-(15)使用SCLAlertView制作强大的Alert警告窗口和Input编辑窗口
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- jquery 获取父窗口的元素 父窗口 子窗口
一.获取页面元素 取父窗口的元素方法:$(selector, window.parent.document); 那么你取父窗口的父窗口的元素就可以用:$(selector, window.parent ...
- 更新记录后关闭子窗口并刷新父窗口的Javascript
有时我们需要在新打开的窗口里面编辑信息,等编辑完了,需要将当前窗口关闭并且刷新父窗口,以使修改生效,本文就是介绍用 javascript 来实现"更新记录后关闭子窗口并刷新父窗口" ...
- JS实现关闭当前子窗口,刷新父窗口
一.JS实现关闭当前子窗口,刷新父窗口 JS代码如下: <script> function refreshParent() { window.opener.location.href = ...
- jQuery 获取父窗口的元素 父窗口 子窗口(iframe)
$("#父窗口元素ID",window.parent.document); 对应javascript版本为window.parent.document.getElementById ...
随机推荐
- mysql返回最后一列数据
获取MySQL的表中每个userid最后一条记录的方法,并且针对userid不唯一的情况,需要的朋友可以参考下 表结构 CREATE TABLE `t1` ( `userid` int(11) DEF ...
- Python【第二章】:Python的数据类型
基本数据类型 一.整型 如: 18.73.84 二.长整型 如:2147483649.9223372036854775807 三.浮点型 如:3.14.2.88 四.字符串 如:'wupeiqi'.' ...
- Win7上安装Linux双系统
今天帮同学在Win7上安装Linux,感觉一篇教程很不错,mark一下 原地址:Win7下U盘安装Ubuntu14.04双系统步骤详解 一.前期准备 1.大于2G的U盘一个(我的系统盘制作完成后大约占 ...
- RabbitMQ Topic exchange
Topic exchange topic与之前的每个类型都不同(ps:废话每个都是不同的).Topic解决了我们另一个需求.举个例子,有一个做资讯的公司,他们会收集各种科技公司的动态并且第一时间转发出 ...
- 简单实用的Log4net帮助类
一直使用Log4net,进行日志记录.今天把实用的帮助类,在博客园进行一下公布 首先,添加一个log4net配置文件 <?xml version="1.0"?> < ...
- 【转】C# lock的使用
一.Lock定义 lock 关键字可以用来确保代码块完成运行,而不会被其他线程中断.它可以把一段代码定义为互斥段(critical section),互斥段在一个时刻内只允许一个线程进入执行, ...
- primefaces 查询 点击按钮 加载 动画 ajax loader
只要在/WEB-INF/template.xhtml中body 里面加入: <ui:insert name="status"> <p:ajaxStatus sty ...
- 主流ORM对比分析,莫人云亦云
目前主流的ORM框架有Entity Framework,Dapper,NHibernate,NBear,Castle ActiveRecord,BATIS.NET六种,都是免费开源的.下边从官方支持性 ...
- 海思H264解码库 hi_h264dec_w.dll 水印问题
上一篇 海思h264解码库 , 实现了H264帧的简单解码,但更换相机后,出现了解码视频中央出现水印的问题,水印如下图 查找网络,基本就这一篇相关的,还没给出好的解决办法. http://bbs. ...
- Java 数据库操作类
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import ...