启动后如何直接隐藏到任务栏?
我看了相关的文章,不过没什么大用。
隐藏到任务栏已经没有问题,只是由于这个是有模式的对话框,所以用了
ShowWindow (SW_HIDE);对话框仍旧显示出来。
如何才能像Foxmail那样启动后自动隐藏到对话框呢。
。。寻求完美解决方案,最好隐藏时不闪烁。
问题点数:95、回复次数:16Top
1 楼abnegate(无知者无畏)回复于 2001-01-03 17:51:00 得分 15
利用api 函数Shell_NotifyIconTop
2 楼adrianx(蓝色心情)回复于 2001-01-03 17:52:00 得分 0
FOXMAIL不是一个基于对话框的程序Top
3 楼antwork(人活着总得有点精神)回复于 2001-01-03 17:57:00 得分 0
我的问题不是怎么让对话框藏到任务栏,而是如何启动后不显示主窗体,直接隐藏到任务栏。
我没说Foxmail是基于对话框的程序,只是问如何像它那样可以启动后直接藏到任务栏。Top
4 楼adrianx(蓝色心情)回复于 2001-01-03 18:03:00 得分 0
你的任务栏好象是指托盘(TRAY)图标????
Top
5 楼dusj(小兔乖乖)回复于 2001-01-03 18:04:00 得分 15
响应WM_CREATE,再利用Shell_NotifyIcon,应该可以Top
6 楼vcmfc(【痛苦的虫虫】)回复于 2001-01-03 18:36:00 得分 15
难呀!,有模式的在启动的时候你根本就无法进行ShowWindow(SW_HIDE),无模式在ShowWindow(SW_HIDE);就返回,本人是井底之蛙,你知道一定要告诉俺!Top
7 楼antwork(人活着总得有点精神)回复于 2001-01-03 18:41:00 得分 0
到System Tray
现在是如何隐藏,vcmfc所说的是事实。
不知哪位仙人指点迷津。。。
分不够可以再加。Top
8 楼mrboy()回复于 2001-01-03 18:42:00 得分 0
To dusj: shell_NotifyIcon 如何用啊? pnid 如何设?
Thanks in advance.Top
9 楼antwork(人活着总得有点精神)回复于 2001-01-03 18:53:00 得分 0
加分了,大家来看阿!!!Top
10 楼antwork(人活着总得有点精神)回复于 2001-01-03 18:57:00 得分 0
在描述一下问题,以免哪为仁兄发生理解错误,翻错笔记本。
目的,让基于对话框的程序启动后直接进入System Tray(这个东东中文怎么说?),
只要球不显示对话框的技术,关于System Tray的一些东东可以不讨论。
洗眼镜了。。。Top
11 楼antwork(人活着总得有点精神)回复于 2001-01-03 21:32:00 得分 0
埃,现在只实现了自动隐藏,就是启动时要闪一下。
InitDialog中加入
PostMessage (WM_SIZE, WM_SHOWMINIMIZED, 0);自动最小化
我在OnSize ()里判断如果是SIZE_MINIMIZED消息,就隐藏到system tray
闪烁是由于在DoModal ()里的那句CreateDialogIndirect ()引起的,不过我不知道如何防止闪烁。。。Top
12 楼adrianx(蓝色心情)回复于 2001-01-03 21:53:00 得分 20
int CXXXWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CXXXParentClass::OnCreate(lpCreateStruct) == -1)
return -1;
m_uNotifyHitMSG = RegisterWindowMessage("YOURUSE_MESSAGE");//注册消息以免与其它程序冲突
AddTrayIcon();
return 0;
}
void ::OnDestroy()
{
CXXXParentClass::OnDestroy();
DeleteTrayIcon();
}
LRESULT CXXXWnd::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
if(message==m_uNotifyHitMSG)
{
switch(lParam)
{
case WM_LBUTTONDBLCLK:
case WM_LBUTTONDOWN:
case WM_LBUTTONUP:
case WM_RBUTTONDBLCLK:
case WM_RBUTTONDOWN:
case WM_RBUTTONUP:
}
return 1;
}
return CView::WindowProc(message, wParam, lParam);
}
void CXXXWnd::AddTrayIcon()
{
//TODO: Add your source code here
NOTIFYICONDATA tnid;
HICON hicon = LoadIcon(GetModuleHandle(NULL),IDI_YOURICONID);
tnid.cbSize = sizeof(NOTIFYICONDATA);
tnid.hWnd = (HWND)Handle;
tnid.uID = (UINT)this;
tnid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
tnid.uCallbackMessage = m_uNotifyHitMSG;
tnid.hIcon = hicon;
strcpy(tnid.szTip,"Your Strings !!!");
Shell_NotifyIcon(NIM_ADD,&tnid);
}
void CXXXWnd::DeleteTrayIcon()
{
//TODO: Add your source code here
NOTIFYICONDATA tnid;
tnid.cbSize = sizeof(NOTIFYICONDATA);
tnid.hWnd = (HWND)Handle;
tnid.uID = (UINT)this;
Shell_NotifyIcon(NIM_DELETE, &tnid);
}
void CXXXWnd::ChangeTips()
{
//TODO: Add your source code here
NOTIFYICONDATA tnid;
tnid.cbSize = sizeof(NOTIFYICONDATA);
tnid.hWnd = (HWND)Handle;
tnid.uID = (UINT)this;
tnid.uFlags =NIF_TIP;
strcpy(tnid.szTip,"Your String Changed !!!!");
Shell_NotifyIcon(NIM_MODIFY, &tnid);
}
Top
13 楼antwork(人活着总得有点精神)回复于 2001-01-03 22:01:00 得分 0
多谢楼上这位大哥。Top
14 楼newx(Royale with Cheese)回复于 2001-01-03 23:07:00 得分 20
哎呀呀,太复杂了!
只要在OnInitDialog()中调用
SetWindowPos(
hWnd, // your dialog window handle
NULL, // placement-order handle
0, // horizontal position
0, // vertical position
0, // width
0, // height
SWP_HIDEWINDOW // window-positioning options
);
应该可以搞定。
你前面提到的闪烁问题在于用了PostMessage(),如果用SendMessage()可能也没事了。Top
15 楼antwork(人活着总得有点精神)回复于 2001-01-03 23:17:00 得分 0
用SendMessage()也一样的,我看到codeguru早有人提出类似的问题,不过都没有好的答案。Top
16 楼Acely(Acely)回复于 2001-01-04 00:13:00 得分 10
重载CMainFrame::OnPreWindows(LPCREATESTRUCT lpCreateStruct)试一试,好像是这个函数
只要将lpCreateStruct的属性配置一下就行了,你可以看看MSDN
Top




