FOXMAIL不是一个基于对话框的程序
解决方案 »
- GDI+ 模仿PS魔法棒取色工具,选择单一颜色作为区域怎么弄
- VC2005的集成环境,如何查看一个对话框的所有的关联变量?
- 第二贴了 com如何传递一个图片给.net调用~~~~
- VC高手请进来,求助各位大虾
- 请问这段代码为什么不能编译
- 特急,任何代码都无法通过编译,提示以下错误,如何解决?100分!
- vs2005sp1如何使用vs2005编译的静态库?
- 一键写入字符串程序
- 哪位高手知道CMOS中的数据结构?
- Ring3到Ring0(vc编写),控制台程序成功,基于对话框WIN32程序就不行了。大侠看看了。
- 有点挑战性:如何为CPropertySheet窗口添加最大化和最小化按钮?
- 如何在程序里拷贝网上邻居的资源?
我没说Foxmail是基于对话框的程序,只是问如何像它那样可以启动后直接藏到任务栏。
现在是如何隐藏,vcmfc所说的是事实。
不知哪位仙人指点迷津分不够可以再加。
Thanks in advance.
目的,让基于对话框的程序启动后直接进入System Tray(这个东东中文怎么说?),
只要球不显示对话框的技术,关于System Tray的一些东东可以不讨论。
洗眼镜了
InitDialog中加入
PostMessage (WM_SIZE, WM_SHOWMINIMIZED, 0);自动最小化
我在OnSize ()里判断如果是SIZE_MINIMIZED消息,就隐藏到system tray闪烁是由于在DoModal ()里的那句CreateDialogIndirect ()引起的,不过我不知道如何防止闪烁
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);
}
只要在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()可能也没事了。
只要将lpCreateStruct的属性配置一下就行了,你可以看看MSDN