看到有些软件在桌面右下角弹框时, 任务栏没有图标, 看起来像是从托盘程序弹出的。

实际上是一个单独的exe, 在Create时, 将 WS_EX_APPWINDOW 屏蔽掉了,就有这效果.

这次, 将设置Create风格的实现直接挪到DuiLib中, 形成2个虚函数.

如果要实现的Dlg需要不同的风格, 就重载这两个虚函数.

这么搞, 以后再也不会忘记设置风格的代码如何写. 因为GetStyle和GetExStyle很容易记忆.

工程下载点: src_prj_dlg_no_task_bar_icon_2015_0718_2000.zip

编译环境 : vs2010 vc++ DuiLib

效果图:

\DuiLib\Utils\WinImplBase.hvirtual LONG GetStyle();virtual LONG GetExStyle();};\srcMain\dlgNotify\MainDlg.hvirtual void InitWindow();virtual LONG GetStyle();\DuiLib\Utils\WinImplBase.cppLRESULT WindowImplBase::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{LONG styleValue = 0;styleValue = GetStyle();::SetWindowLong(*this, GWL_STYLE, styleValue);styleValue = GetExStyle();::SetWindowLong(*this, GWL_EXSTYLE, styleValue);//...LONG WindowImplBase::GetStyle()
{LONG styleValue = ::GetWindowLong(*this, GWL_STYLE);styleValue &= ~WS_CAPTION;styleValue |= WS_CLIPSIBLINGS;styleValue |= WS_CLIPCHILDREN;return styleValue;
}LONG WindowImplBase::GetExStyle()
{LONG styleValue = ::GetWindowLong(*this, GWL_EXSTYLE);return styleValue;
}\srcMain\dlgNotify\MainDlg.cpp
LONG CMainDlg::GetStyle()
{long dwStyle = __super::GetStyle();dwStyle &= ~WS_MAXIMIZEBOX;return dwStyle;
}LONG CMainDlg::GetExStyle()
{long dwStyle = __super::GetExStyle();dwStyle |= WS_EX_TOOLWINDOW;dwStyle &= ~(WS_EX_APPWINDOW);return dwStyle;
}

为了将窗体挪到桌面的右下角, 参考 CWindowWnd::CenterWindow(), 写了一个 CMainDlg::MoveMyWindowToDesktopRightBottom()

临时用一下, 没有进行重构.

void CMainDlg::MoveMyWindowToDesktopRightBottom()
{ASSERT(::IsWindow(m_hWnd));ASSERT((GetWindowStyle(m_hWnd)&WS_CHILD)==0);RECT rcDlg = { 0 };::GetWindowRect(m_hWnd, &rcDlg);RECT rcArea = { 0 };RECT rcCenter = { 0 };HWND hWnd=*this;HWND hWndParent = ::GetParent(m_hWnd);HWND hWndCenter = ::GetWindowOwner(m_hWnd);if (hWndCenter!=NULL)hWnd=hWndCenter;// 处理多显示器模式下屏幕居中MONITORINFO oMonitor = {};oMonitor.cbSize = sizeof(oMonitor);::GetMonitorInfo(::MonitorFromWindow(hWnd, MONITOR_DEFAULTTONEAREST), &oMonitor);rcArea = oMonitor.rcWork;if( hWndCenter == NULL )rcCenter = rcArea;else::GetWindowRect(hWndCenter, &rcCenter);int DlgWidth = rcDlg.right - rcDlg.left;int DlgHeight = rcDlg.bottom - rcDlg.top;// Find dialog's upper left based on rcCenterint xLeft = rcCenter.right - DlgWidth;int yTop = rcCenter.bottom - DlgHeight;// The dialog is outside the screen, move it insideif( xLeft < rcArea.left )xLeft = rcArea.left;else if( xLeft + DlgWidth > rcArea.right ) xLeft = rcArea.right - DlgWidth;if( yTop < rcArea.top )yTop = rcArea.top;else if( yTop + DlgHeight > rcArea.bottom ) yTop = rcArea.bottom - DlgHeight;::SetWindowPos(m_hWnd, NULL, xLeft, yTop, -1, -1, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
}

DuiLib : 做一个没有任务栏图标的Dialog相关推荐

  1. C#编写最小化时隐藏为任务栏图标的Window appllication

    C#编写最小化时隐藏为任务栏图标的Window appllication. 1.设置WinForm窗体属性showinTask=false 2.加notifyicon控件notifyIcon1,为控件 ...

  2. 举个栗子!Tableau技巧(52):学做一个实用的热图日历

    这种图表我们就叫它热图日历,通过方形展示具体日期,通过颜色呈现该日期的数值多少. 通常我们可以将它用作仪表板上的筛选器,来查看月.周.日的详细情况,通过它可以很容易查看具体到每一天的情况. 那么,怎样 ...

  3. Tableau必知必会之学做一个实用的热图日历

    这种图表我们就叫它热图日历,通过方形展示具体日期,通过颜色呈现该日期的数值多少. 通常我们可以将它用作仪表板上的筛选器,来查看月.周.日的详细情况,通过它可以很容易查看具体到每一天的情况. 为方便学习 ...

  4. 详解通过html与CSS做一个网页导航栏

    由于导航栏是几乎任何网页都必须具有的功能,所以学习他是我们必备的课程.下面,教程是通过代码实现由浅入深介绍导航栏,子菜单,以及样式,风格变化.首选需要认识<ul>和<ol>标签 ...

  5. ps切图后 JAVA开发_做一个会PS切图的前端开发

    系列链接 切图方法分类 PhotoShop从CS版本演变到现在的CC版本,切图功能发生了比较大的变化,我们可以把PhotoShop CS版本时的切图功能称为传统切图,而从PhotoShop CC版本开 ...

  6. 如何做一个左侧导航栏右侧显示具体消息的html

    如果你想做一个这样的东西,左侧分类,比如有分类1,下面的子标题1.1,1.2,1.3等等,然后分类2,下面有相应的子标题.点击不同的子标题右边就会出现相应的界面.我在网上查了查别人怎么做的,然后结合了 ...

  7. 驾驭系统 做一个Windows XP的“***”(图)3

    还管理员账户以真面目 很少有人留意到Windows XP被隐藏了的管理员账户(恰当地说,是Administrator).这个账户是不可见的,除非系统只有这一个账号或者以安全模式启动系统.要去掉Admi ...

  8. android 折线图 渐变,做一个渐变色的折线图

    折线图 一个折线图的需求,好久没写过折线图了,打算自己弄下. 对于折线图或者条形统计图来说,我很少自己去封装,并不是有多难有多麻烦(其实找到规律之后反而很简单),而是我觉得根本没有一个好的封装方式,U ...

  9. 做一个常规的banner图——负边距的使用、banner图的拼法

    在这之前,首先要了解如何设置块级元素在块级元素水平居中 方法: 设置子容器为定位元素 水平居中 left:50%:margin-left:-width/2: 垂直居中 top:50%:margin-t ...

最新文章

  1. kubelet配置cni插件_kubernetes网络插件对比分析(flannel、calico、weave)
  2. 一维数组用户输入数据求平均值
  3. xstream解析xml字符串和生成对象
  4. .NET 6新特性试用 | ArgumentNullException卫语句
  5. hdu5279 YJC plays Minecraft 【分治NTT】
  6. mysql 集群 qps_MySQL Cluster:如何通过扩展为MySQL带来2亿QPS
  7. ipad xcode连接不了iPad的。
  8. java异常处理思考题_java异常处理试题及答案
  9. Linux+Apache+Mysql+PHP典型配置
  10. 利用中间结果减少计算量
  11. 试用版的和正式版的软件有什么区别
  12. 计算图的可达矩阵MATLAB程序
  13. H5+CSS3面试题
  14. DVWA安装教程(Linux)
  15. STM32F401CCU6 核心板的功能描述(针对采集数据)
  16. w7计算机的工具栏爱那里,win7系统底下任务栏不见了的解决方法
  17. Apple商务管理分发
  18. 【HTML 5】HTML5 Canvas rect(), strokeRect() 和 fillRect() 的区别
  19. POJ 1370 Gossiping 笔记
  20. XSSF实现Excel下拉和HSSF实现Excel下拉

热门文章

  1. 写一个函数,使给定的一个3 × 3的二维整型数组转置,即行列互换。
  2. 加密算法与大数据安全
  3. 为什么很多计算机专业大学生毕业后还会参加培训?
  4. 农夫约翰修篱笆-堆排序
  5. 无线通信——调制与编码
  6. Python的strip()函数
  7. USB Type A/B/C的区别和基本知识
  8. DO、DTO、VO、POJO使用场景
  9. 多易教育KAFKA实战(3)-java消费者客户端API示例代码
  10. 纯css控制文字显示隐藏