100分提问:如何让一个对话框显示在所有对话框的上面?

iamwiner 2004-11-21 06:07:39
1.如何让一个对话框显示在所有对话框的上面?
例如:一个对话框程序,打开了几个子对话框(非模式的),如何让其中一个显示在其它的对话框的上面?

2.如何让一个对话框,只显示其中的文字?
例如:一个对话框程序,打开了一个子对话框,子对话框中,用OnPaint()函数输出了一段文字,如何隐藏这个对话框的其它部分?
注意是所有的其它部分,即除开文字之外的部分,使它看起来就像是在父对话框上用OnPaint() 函数输出一样!

大哥们:可以实现么?
...全文
201 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyljerry 2004-11-26
  • 打赏
  • 举报
回复
在OnCtlColor中设置背景色
oyljerry 2004-11-26
  • 打赏
  • 举报
回复
::SetWindowPos(hwnd,&this->wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
aoosang 2004-11-26
  • 打赏
  • 举报
回复
关注
mynamelj 2004-11-26
  • 打赏
  • 举报
回复
dialog.SetWindowPos(&this->wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);


// SetWindowPos(hwnd,&this->wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
fallhunter 2004-11-25
  • 打赏
  • 举报
回复
1。
setwindowspos

第二个

还是不要这么做,那样毕竟是两个窗口,
如果用户在切换时,就穿帮了!

建议你在父框里动态创建透明子窗口,你可以自己写这个窗口类
Gabe 2004-11-25
  • 打赏
  • 举报
回复
HBRUSH CTextOutputDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CPropertyPage::OnCtlColor(pDC, pWnd, nCtlColor);

if(nCtlColor==CTLCOLOR_DLG || nCtlColor==CTLCOLOR_STATIC )
{
pDC->SetBkMode(TRANSPARENT);
HBRUSH b=(HBRUSH)GetStockObject(NULL_BRUSH);
return b;
}
return hbr
}
你把这个复制上去。要显示字的时候就更改STATIC上的字。不过我估计你这样做屏会闪的
Gabe 2004-11-25
  • 打赏
  • 举报
回复
不是和你说了用OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)这个函数了
OnPaint()是不行的

另: CProPageTransparent proPageTransparent;
hr = proPageTransparent.OnCtlColor(&pDC, this, CTLCOLOR_STATIC);
你这二句什么意思?
OnCtlColor()当然要用主对话框来调用 。
iamwiner 2004-11-22
  • 打赏
  • 举报
回复
TO:ChenGang521(^_^开心就好^_^(BOY))
我试了一下,好像不行啊!窗口的背景色还是有的!还是明显看得到窗口!怎么办啊?
我的OnPaint()函数是:
void CTextOutputDlg::OnPaint()
{
//CDialog::OnPaint();
CPaintDC pDC(this);
CBrush *br, *pOldBrush;
HBRUSH hr;
//pDC.SetBkMode(TRANSPARENT);
//pDC.TextOut(10,10,"afdfdasfkdjflkdlafjlas;");
CProPageTransparent proPageTransparent;
hr = proPageTransparent.OnCtlColor(&pDC, this, CTLCOLOR_STATIC);
br = CBrush::FromHandle(hr);
pOldBrush = pDC.SelectObject(br);
pDC.TextOut(10,10,"afdfdasfkdjflkdlafjlas;");
pDC.SelectObject(pOldBrush);
br->DeleteObject();
}
WorldMobile 2004-11-21
  • 打赏
  • 举报
回复
实现肯定没问题,一楼说的有道理
MuseIn 2004-11-21
  • 打赏
  • 举报
回复
up
volovo2002 2004-11-21
  • 打赏
  • 举报
回复
肯定是文件头没有包括进去啦,你查查MSDN的错误代码
iamwiner 2004-11-21
  • 打赏
  • 举报
回复
弱弱的问:调用SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
的时候,VC怎么说wndTopMost undeclared identifier?
yanw0212 2004-11-21
  • 打赏
  • 举报
回复
你的窗口是从CWnd 继承的,可以直接调用
SetWindowPos(&wndTopMost,-1,-1,-1,-1,SWP_NOMOVE|SWP_NOSIZE);

第二个问题我不太清楚!
iamwiner 2004-11-21
  • 打赏
  • 举报
回复
TO:ChenGang521
非常感谢你的帮助!
等下我试一下!

是这样的:我想在全屏播放的FLASH上动态的显示一些文字.
我建了一个DIALOG对话框,上面放了一个CShockwaveFlash控件(安装FLASH时提供的,播放FLASH之用!)
然后全屏播放,开始,我用DIALOG的OnPaint()函数写文字,结果被FLASH挡住了,看不到!
我不知道怎么办了!就想到了上述的办法
但苦于我VC水平太差,有些东西实现不了!

你觉得这种方法可行吗?
或者你认为还有什么更好的方法吗?谢谢了!
Gabe 2004-11-21
  • 打赏
  • 举报
回复
1、SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);

2、把所有东西都做透明就行了 
HBRUSH CProPageCH2::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CPropertyPage::OnCtlColor(pDC, pWnd, nCtlColor);

if(nCtlColor==CTLCOLOR_DLG || nCtlColor==CTLCOLOR_STATIC )
{
pDC->SetBkMode(TRANSPARENT);
HBRUSH b=(HBRUSH)GetStockObject(NULL_BRUSH);
return b;
}
return hbr
}
为何要这样做?第2个问题

15,979

社区成员

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

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