老问题求新解,不在任务栏显示

Soyokaze 2009-05-02 09:22:09
传统的方法是为窗口设置WS_EX_TOOLWINDOW风格,不过这样也会带来一个问题:不能在Alt+Tab弹出的窗口里切换。
我试着给设置了这种属性的窗口硬加上WS_EX_CONTROLPARENT风格,还是不行。
所以想请教一下,有没有两全其美的解决方法。
曾经见过这样的窗口,其扩展风格只有WS_EX_CONTROLPARENT,然而却可以显示在Alt+Tab的窗口里。
...全文
117 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
VR_Lab 2009-05-10
  • 打赏
  • 举报
回复
在OnInitDialog()中添加SetWindowLong(GetSafeHwnd(),GWL_EXSTYLE<WS_EX<TOOLWINDOW);
tanwei1002 2009-05-08
  • 打赏
  • 举报
回复
4楼正解
vc6.0测试通过
Soyokaze 2009-05-06
  • 打赏
  • 举报
回复
谢谢以上个楼的回复。我去消化消化试试看。
-->#10,Shell_NotifyIcon()
ToCpp 2009-05-05
  • 打赏
  • 举报
回复
4楼正解
zmsun 2009-05-05
  • 打赏
  • 举报
回复
我想知道怎么最小化到右下角
biweilun 2009-05-05
  • 打赏
  • 举报
回复
重新注册窗口类,修改风格。代码如5#
Fireway2008 2009-05-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xuezhimeng 的回复:]
这个我弄过,如果你的程序不是基于对话框的,在框架类中修改父窗口句柄
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if (!CFrameWnd::PreCreateWindow(cs))
return FALSE;

// 创建一个隐藏窗口
if (!::IsWindow(m_wndParent.m_hWnd))
{
LPCTSTR pstrOwnerClass = AfxRegisterWndClass(0);
if (!m_wndParent.CreateEx(0, pstrOwnerClass, "", WS_POPUP,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDE…
[/Quote]

同意此方案!

另外,补充一下, 如果是基于对话框的,并且这个对话框插入了背景,那么在设置的时候,红色的参数要和原对话框的风格相同,否则容易导致背景图片位置偏移。

SetWindowLong(this->m_hWnd, GWL_EXSTYLE, WS_EX_CONTROLPARENT| WS_EX_WINDOWEDGE| WS_EX_DLGMODALFRAME) ;
::SetWindowLong(this->m_hWnd, GWL_HWNDPARENT, (LONG)m_wndParent.m_hWnd) ;
doudouHuY 2009-05-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 Soyokaze 的回复:]
引用 2 楼 DavidHsing 的回复:
这个简单,我弄过。
你建议一个不可见的窗口,然后把你的新窗口的父窗口的句柄指向这个不可见的窗口就 ok 了。

这样做的话,我的窗口就随父窗口一起不可见了。
[/Quote]

在msdn搜一下owner window 和 owned window就知道为啥了
Soyokaze 2009-05-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 DavidHsing 的回复:]
这个简单,我弄过。
你建议一个不可见的窗口,然后把你的新窗口的父窗口的句柄指向这个不可见的窗口就 ok 了。
[/Quote]
这样做的话,我的窗口就随父窗口一起不可见了。
DavidHsing 2009-05-03
  • 打赏
  • 举报
回复
这个简单,我弄过。
你建议一个不可见的窗口,然后把你的新窗口的父窗口的句柄指向这个不可见的窗口就 ok 了。
tian_yang_jian 2009-05-03
  • 打赏
  • 举报
回复
应该有两全齐美的办法,没有弄过,帮顶
Yeah 2009-05-03
  • 打赏
  • 举报
回复
这个我弄过,如果你的程序不是基于对话框的,在框架类中修改父窗口句柄
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if (!CFrameWnd::PreCreateWindow(cs))
return FALSE;

// 创建一个隐藏窗口
if (!::IsWindow(m_wndParent.m_hWnd))
{
LPCTSTR pstrOwnerClass = AfxRegisterWndClass(0);
if (!m_wndParent.CreateEx(0, pstrOwnerClass, "", WS_POPUP,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, 0))
return FALSE;
}

cs.hwndParent = m_wndParent.m_hWnd;

return TRUE;
}


如果你的程序是基于对话框的,在OnInitDialog中
//类中添加CWnd m_wndParent ;成员
// 创建一个隐藏窗口
if (!::IsWindow(m_wndParent.m_hWnd))
{
LPCTSTR pstrOwnerClass = AfxRegisterWndClass(0);
if (!m_wndParent.CreateEx(0, pstrOwnerClass, "", WS_POPUP,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, 0))
return FALSE;
}

SetWindowLong(this->m_hWnd, GWL_EXSTYLE, WS_EX_CONTROLPARENT | WS_EX_WINDOWEDGE | WS_EX_DLGMODALFRAME) ; //这个必须有,没有就不行
::SetWindowLong(this->m_hWnd, GWL_HWNDPARENT, (LONG)m_wndParent.m_hWnd) ;
DavidHsing 2009-05-03
  • 打赏
  • 举报
回复
什么意思?没看明白
怎么叫随父窗口一起不可见了?

你的这个子窗口,在他的 PreCreateWindow 里面把它的父窗口句柄指向你新创建的一个不可见的窗口,
怎么会一起不可见??

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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