对话框启动时的隐藏
我作了一个基于对话框的应用程序,我想使对话框一启动时就隐藏,而且在任务栏里面也无法显示,只有右下脚的一个托盘图标,应该如何实现呢? 问题点数:0、回复次数:33Top
1 楼zyleon(zy)回复于 2003-08-03 00:44:26 得分 0
http://www.vckbase.com/document/viewdoc.asp?id=492Top
2 楼masterz(www.fruitfruit.com)回复于 2003-08-03 02:15:56 得分 0
/////////////////////////////////////////////////////////////////////////////////
//hide dialog at startup
/////////////////////////////////////////////////////////////////////////////////
void CHidedlgDlg::OnWindowPosChanging(WINDOWPOS FAR* lpwndpos)
{
if (lpwndpos->flags & SWP_SHOWWINDOW) {
lpwndpos->flags &= ~SWP_SHOWWINDOW;
PostMessage(WM_WINDOWPOSCHANGING, 0, (LPARAM)lpwndpos);
ShowWindow(SW_HIDE);
}
else
CDialog::OnWindowPosChanging(lpwndpos);
}
//通过重载DoModel、RunModelLoop可以解决问题Top
3 楼newlife2002_313(永恒新生)回复于 2003-08-03 16:31:05 得分 0
看样子是解决了Top
4 楼zhucde(【風間苍月】★<==>★【虚拟闲人】)回复于 2003-08-03 17:07:47 得分 0
那可是五颗星Top
5 楼caylay(Michael)回复于 2003-08-04 13:57:47 得分 0
不说我还不知道,真是牛牛Top
6 楼wanderman(森林)回复于 2003-08-06 09:06:22 得分 0
牛Top
7 楼FAICHEN(CC)回复于 2003-08-06 09:15:59 得分 0
void CHidedlgDlg::OnNcPaint()
{
ShowWindow(SW_HIDE);
}
托盘找一个包装好的,在initidialog()里建,我用的一个是systray类吧,在vckbase有下载Top
8 楼fishzlz()回复于 2003-08-06 20:40:13 得分 0
void CHidedlgDlg::OnNcPaint()
{
ShowWindow(SW_HIDE);
}
是不行的
会执行两次,所以要这样:
static int i = 2;
if(i > 0)
{
i --;
ShowWindow(SW_HIDE);
}
else
CDialog::OnNcPaint();
Top
9 楼fishzlz()回复于 2003-08-06 20:42:21 得分 0
我的意思是说,照你的办法就永远也看不到窗口了
当然实现隐藏是足够了:)Top
10 楼fgwf1(坦荡男儿)回复于 2003-08-06 21:48:36 得分 0
kankanTop
11 楼dhyuser10(段誉)回复于 2003-08-06 23:08:29 得分 0
向masterz致敬Top
12 楼sunky_song(龙笑)回复于 2003-08-08 17:42:04 得分 0
以上方法、我都试过了,好像都不行。我只是在启动时隐藏,以后可以通过点托盘图表来恢复隐藏Top
13 楼lonkil(www.vcfans.com)回复于 2003-08-08 18:16:30 得分 0
隐藏框体的方法很多的,你可以订阅VCKBASE里面的VC杂志。里说到了那多。
不好意思,楼主的要求我实现过,不过现在源码不在这里,其实看了下那个杂志上面的功能就能实现了。Top
14 楼GoldenSea(void*)回复于 2003-08-08 22:01:10 得分 0
五颗心的就是牛啊!Top
15 楼kinogre(小熊)回复于 2003-08-09 00:34:16 得分 0
在OnInitDialog中调用ShowWindow(SW_HIDE)就行了.
至于在系统托盘区显示为图标,看一下MSDN中对Shell_NotifyIcon函数的说明就行了,
里面写的很详细.Top
16 楼shilong(银羽 www.ylog.net)回复于 2003-08-09 00:55:57 得分 0
简单点的办法
把App类的InitInstance把对话框改成无模式打开的并隐藏
CxxxDlg* pWnd = new CxxxDlg();
m_pMainWnd=pWnd;
if(pWnd->Create() == FALSE)
return FALSE;
pWnd->ShowWindow(SW_HIDE);
pWnd->UpdateWindow();
return true;Top
17 楼clife(笨狗API.NET)回复于 2003-08-09 18:32:09 得分 0
在WM_PAINT中响应ShowWindow(hwnd,SW_SHOW/SW_HIDE);就可以了Top
18 楼fishzlz()回复于 2003-08-09 21:56:12 得分 0
请问masterz,用OnWindowPosChanging隐藏后,用什么方法可以再显示呢?Top
19 楼BSRONG(戎亚新)回复于 2003-08-09 22:28:06 得分 0
在OnInitDialog中调用ShowWindow(SW_HIDE)就行了.
至于在系统托盘区显示为图标,看一下MSDN中对Shell_NotifyIcon函数的说明就行了,
里面写的很详细.
我同意这个做法,
Top
20 楼m0772()回复于 2003-08-12 13:03:18 得分 0
upTop
21 楼tryber(Go with the CWnd)回复于 2003-08-12 13:26:44 得分 0
我还是趋向于
shilong(银羽·以吻赠剑)
的做法.Top
22 楼xudong1105(东东)回复于 2003-08-14 12:57:34 得分 0
在OnPaint()
{
ShowWindow(SW_HIKE);
}
即可!Top
23 楼zhdleo(叮东)回复于 2003-08-17 22:02:52 得分 0
按照“标准”来!
隐藏Dialog嘛!就是masterz(MS MVP) 的!没错的
当我们想让窗口初始时不显示时,通常会用ShowWindow(SW_HIDE) ,但实际上还是在启动是可以看到窗口一闪而过的痕迹。所以,可以使用下面的方法来实现它:
(1.1)先在构造函数中设置布乐变量 visible值为false.
visible = false;
(1.2)重载 WM_WINDOWPOSCHANGING,并添加下面代码:void CTest_deleteDlg::OnWindowPosChanging(WINDOWPOS FAR* lpwndpos)
{
if(!visible)
lpwndpos->flags &= ~SWP_SHOWWINDOW;
CDialog::OnWindowPosChanging(lpwndpos);
}
(1.3)然后设布尔visible变量值为true,并在要显示窗口时,再用ShowWindow(SW_SHOW)既可。visible = true;
ShowWindow(SW_SHOW);Top
24 楼stoning(stoning)回复于 2003-08-20 18:57:48 得分 0
可以用非模态对话框,然后用不用WS_VISIBLE
在托盘相应中在showwindow吧,我照着一个程序做过一个Top
25 楼sunky_song(龙笑)回复于 2003-08-21 19:20:48 得分 0
感谢大家的帮助。我用两种方法都实现了。
一种:在OnPain()里当第一次进入的时候调用ShowWindow(SW_HIDE);
一种是:将对话框改为非模态显示,调用ShowWindow(SW_HIDE),不过一定要在Inistance函数里自己写对话框的消息循环,否则对话框会在Inistance函数返回以后也即关闭。根本看不到对话框的出现。Top
26 楼xiaoliuzi(小六子)回复于 2003-08-21 20:20:00 得分 0
markTop
27 楼heweixing_77(何足道)回复于 2003-08-22 14:07:05 得分 0
upTop
28 楼c8051(简单是美)回复于 2003-08-28 11:03:47 得分 0
根本就不行嘛,隐藏后图标看都看不见,程序也不知道去哪里了。我还得注销一次系统才能再次debug
Top
29 楼karrysatan(黄河之水)回复于 2003-08-29 14:06:15 得分 0
哈哈,我要冲五星,搂主给鼓励一下吧Top
30 楼c8051(简单是美)回复于 2003-08-29 18:30:02 得分 0
龙笑:
你是不是搞定了?可否将源码发给我一份
急,拜托!
wbwinner@263.netTop
31 楼yiwan_ny(一万)回复于 2003-09-12 16:21:39 得分 0
同意以上观点,请有关同志办理Top
32 楼wwwllg(野蛮人)回复于 2003-09-12 17:17:58 得分 0
回复人: masterz(MS MVP) ( ) 信誉
void CHidedlgDlg::OnWindowPosChanging(WINDOWPOS FAR* lpwndpos)
{
if (lpwndpos->flags & SWP_SHOWWINDOW) {
lpwndpos->flags &= ~SWP_SHOWWINDOW;
}
else
CDialog::OnWindowPosChanging(lpwndpos);
}
到了这一步,如果还不能达到你的要求,只能说明你的头太呆板。
在if后加一个自己的变量不就可以了吗
如
if(要隐)
{
if (lpwndpos->flags & SWP_SHOWWINDOW) {
lpwndpos->flags &= ~SWP_SHOWWINDOW;
}
else
CDialog::OnWindowPosChanging(lpwndpos);
}else
{
CDialog::OnWindowPosChanging(lpwndpos);
}
想要改你自己的变量,可以通过发消息,事件,等多种方法。
比如收到用户托盘消息,就改变量,达到你的要求。
Top
33 楼sniperqy(杨扬)回复于 2003-09-17 16:26:24 得分 0
如果有showwindow(SW_HIDE);
当程序刚运行时会性出现对话框,然后才消失Top
34 楼lxm7(凡星)回复于 2003-09-17 16:56:34 得分 0
各位牛人!!!!!
在SDI工程里又如何???
故去看看我的问题吧!!!!!
http://expert.csdn.net/Expert/topic/2270/2270252.xml?temp=.9871332
标题:关于托盘编程!急!为什么我的程序隐常不了!!!Top




