基于DLG程序exe正常显示时,点击任务栏,想让它最小化,再点击任务栏图标,恢复正常,求点任务栏会触发什么消息,求代码或方法,求解:点击任务栏图标,让它最小化???????在线等。

解决方案 »

  1.   

    在OnSize消息事件中处理最小化 SIZE_MINIMIZED,
    最大化 SIZE_MAXIMIZED,
    还原 SIZE_RESTORED,例如:void CMainDlg::OnSize(UINT nType, int cx, int cy) 
    {
    CDialog::OnSize(nType, cx, cy);// TODO: Add your message handler code here
    //::SendMessage(g_hMain,WM_FORM_RESIZE,0,0);
    if   (nType== SIZE_MAXIMIZED)     
    {   
    //在这里添加最小化需要处理的事件 
             // ::SendMessage(g_hMain,WM_FORM_RESIZE,0,0);
    }
    if   (nType==SIZE_RESTORED)     
    {   
    //在这里添加还原时需要处理的事件 
            // ::SendMessage(g_hMain,WM_FORM_RESIZE,0,0);
    }
    }找到了
      

  2.   

    处理WM_SYSCOMMAND消息
    void CXXXDlg::OnSysCommand(UINT nID, LPARAM lParam)
    {
    if ((nID & 0xFFF0) == IDM_ABOUTBOX)
    {
    CAboutDlg dlgAbout;
    dlgAbout.DoModal();
    }
    else
    {
    switch(nID)
    {
    case SC_MAXIMIZE:
    AfxMessageBox(_T("Zoom"));
    break;

    case SC_RESTORE:
    AfxMessageBox(_T("Restore"));
    break; case SC_MINIMIZE:
    AfxMessageBox(_T("Icon"));
    break;
    }
    CDialog::OnSysCommand(nID, lParam);
    }
    }
      

  3.   

    在对话框的属性编辑器里选上Minimize Box属性自然就会实现这个功能
      

  4.   

    在对话框的属性编辑器里选上Minimize Box属性自然就会实现这个功能
      

  5.   

    不行:
    modifyStyle(m_hWnd,0,WS_SYSMENU,WS_POPUP|WS_MAXIMIZE|WS_MINIMIZEBOX);无效,无边框的对话框程序
      

  6.   

    看这个帖吧!一样的问题。
    http://topic.csdn.net/u/20101027/14/975337dd-ab92-477c-a5ae-464e2960d0d7.html
    动手试试
      

  7.   

    我是新手刚做了和你功能一样的 小程序!
    左键:
    点击任务栏,想让它最小化,再点击任务栏图标,恢复正常。再点击又最小化,点击又还原,。。循环下去
    右键:
    弹出菜单退出 我这里有Vc 2005编译的代码 发给你:
    LRESULT CUpDataDlg::OnNotifyIcon(WPARAM wParam, LPARAM lParam)
    {

    if (lParam==WM_LBUTTONDOWN)
    {
    if (::IsWindowVisible(NotifyIcon.hWnd))
    {
    ::ShowWindow(NotifyIcon.hWnd, SW_HIDE);
    }
    else
    ::ShowWindow(NotifyIcon.hWnd, SW_SHOW);
    return 0;
    }
    CMenu menu;
    if (!menu.LoadMenu(IDR_MENU1))
    return 0;
    CMenu* pmenu = menu.GetSubMenu(0);
    if (!pmenu)
    return 0;

        else if(lParam==WM_RBUTTONDOWN)
    {
        CPoint pos;
    GetCursorPos(&pos);
    ASSERT(pmenu!=NULL);
    SetForegroundWindow();
    pmenu->TrackPopupMenu(TPM_RIGHTBUTTON|TPM_LEFTALIGN,pos.x,pos.y,this); }
    return 1;

    }
      

  8.   

    在dlg初始化的时候:
    SetNotifyWnd(this, WM_NOTIFICATION);
    NotifyIcon.hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);void CUpDataDlg::SetNotifyWnd(CWnd *pNotifyWnd, UINT uCbMsg)
    {
    ASSERT(pNotifyWnd);
    ASSERT(::IsWindow(pNotifyWnd->GetSafeHwnd()));
    NotifyIcon.hWnd=pNotifyWnd->GetSafeHwnd();
    ASSERT(!(uCbMsg==0 )&& uCbMsg >=WM_USER);
    NotifyIcon.uCallbackMessage=uCbMsg;
    }
      

  9.   

    modifyStyle(m_hWnd,0,WS_SYSMENU|WS_MINIMIZEBOX,WS_POPUP|WS_MAXIMIZE);
      

  10.   

    ModifyStyle(NULL, WS_MINIMIZEBOX); 就只增加这个属性就可以