FOXMAIL不是一个基于对话框的程序

解决方案 »

  1.   

    我的问题不是怎么让对话框藏到任务栏,而是如何启动后不显示主窗体,直接隐藏到任务栏。
    我没说Foxmail是基于对话框的程序,只是问如何像它那样可以启动后直接藏到任务栏。
      

  2.   

    你的任务栏好象是指托盘(TRAY)图标????
      

  3.   

    响应WM_CREATE,再利用Shell_NotifyIcon,应该可以
      

  4.   

    难呀!,有模式的在启动的时候你根本就无法进行ShowWindow(SW_HIDE),无模式在ShowWindow(SW_HIDE);就返回,本人是井底之蛙,你知道一定要告诉俺!
      

  5.   

    到System Tray
    现在是如何隐藏,vcmfc所说的是事实。
    不知哪位仙人指点迷津分不够可以再加。
      

  6.   

    To dusj: shell_NotifyIcon 如何用啊? pnid 如何设? 
    Thanks in advance.
      

  7.   

    在描述一下问题,以免哪为仁兄发生理解错误,翻错笔记本。
    目的,让基于对话框的程序启动后直接进入System Tray(这个东东中文怎么说?),
    只要球不显示对话框的技术,关于System Tray的一些东东可以不讨论。
    洗眼镜了
      

  8.   

    埃,现在只实现了自动隐藏,就是启动时要闪一下。
    InitDialog中加入
    PostMessage (WM_SIZE, WM_SHOWMINIMIZED, 0);自动最小化
    我在OnSize ()里判断如果是SIZE_MINIMIZED消息,就隐藏到system tray闪烁是由于在DoModal ()里的那句CreateDialogIndirect ()引起的,不过我不知道如何防止闪烁
      

  9.   


    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);
    }
      

  10.   

    哎呀呀,太复杂了!
    只要在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()可能也没事了。
      

  11.   

    用SendMessage()也一样的,我看到codeguru早有人提出类似的问题,不过都没有好的答案。
      

  12.   

    重载CMainFrame::OnPreWindows(LPCREATESTRUCT lpCreateStruct)试一试,好像是这个函数
    只要将lpCreateStruct的属性配置一下就行了,你可以看看MSDN