如何点击任务栏中的程序图标让程序最大/最小/复原?

yyfzy 2008-12-08 01:53:52
如何点击任务栏中的程序图标让程序最大/最小/复原?

谢谢!
...全文
176 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yyfzy 2008-12-22
  • 打赏
  • 举报
回复
没有人知道吗?
paerxiushi 2008-12-22
  • 打赏
  • 举报
回复
还有一种方法是修改资源描述文件rc中的对话框模板语句中的STYLE语句,使其包含:
WS_CAPTION ,WS_SYSMENU,WS_MAXIMIZEBOX与WS_MINIMIZEBOX风格位
例如,关于对话框的模板语句如下:
IDD_ABOUTBOX DIALOG 22, 17, 230, 75
STYLE WS_POPUP| WS_CAPTION | WS_SYSMENU|WS_MAXIMIZEBOX|WS_MINIMIZEBOX
CAPTION "About"
FONT 8, "System"
BEGIN
ICON IDI_P12,IDC_MYICON,14,9,16,16
LTEXT "P12 Version 1.0",IDC_STATIC,49,10,119,8,SS_NOPREFIX
LTEXT "Copyright (C) 2008",IDC_STATIC,49,20,119,8
DEFPUSHBUTTON "OK",IDOK,195,6,30,11,WS_GROUP
END
这样,当使用CreateDialog创建关于对话框时,就可以在任务栏上看到窗体按钮。
paerxiushi 2008-12-22
  • 打赏
  • 举报
回复
修改系统菜单,在它上面添加[最大化],[最小化]与[还原]按钮:
1.定义菜单项标识符
#define IDM_MAXIMUM 100
#define IDM_MINIMUM 101
#define IDM_RESTORE 102
2.在窗体过程中处理自定义菜单项消息:

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{

static HMENU hMenu;
switch (message)
{
case WM_CREATE:
hMenu=GetSystemMenu(hWnd,FALSE); //得到系统菜单句柄
AppendMenu(hMenu,MF_BYCOMMAND,IDM_MAXIMUM,_T("最大化")); //添加菜单项
AppendMenu(hMenu,MF_BYCOMMAND,IDM_MINIMUM,_T("最小化"));
AppendMenu(hMenu,MF_BYCOMMAND,IDM_RESTORE,_T("还原"));
EnableMenuItem(hMenu,IDM_RESTORE,MF_GRAYED); // 最初显示时,将还原按钮灰显
break;
case WM_SYSCOMMAND:
switch (wParam)
{
case IDM_MAXIMUM: //按下最大化菜单项的处理
ShowWindow(hWnd,SW_MAXIMIZE);
EnableMenuItem(hMenu,IDM_MAXIMUM,MF_GRAYED);
EnableMenuItem(hMenu,IDM_MINIMUM,MF_ENABLED);
EnableMenuItem(hMenu,IDM_RESTORE,MF_ENABLED);
return 0; //告诉系统执行自己的菜单项处理
case IDM_MINIMUM: //按下最小化菜单项的处理

ShowWindow(hWnd,SW_MINIMIZE);
EnableMenuItem(hMenu,IDM_MINIMUM,MF_GRAYED);
EnableMenuItem(hMenu,IDM_MAXIMUM,MF_ENABLED);
EnableMenuItem(hMenu,IDM_RESTORE,MF_ENABLED);
return 0;
case IDM_RESTORE: //按下还原菜单项的处理

ShowWindow(hWnd,SW_NORMAL);
EnableMenuItem(hMenu,IDM_RESTORE,MF_GRAYED);
EnableMenuItem(hMenu,IDM_MAXIMUM,MF_ENABLED);
EnableMenuItem(hMenu,IDM_MINIMUM,MF_ENABLED);
return 0;
}
return DefWindowProc(hWnd,message,wParam,lParam); //当用户按下其他菜单项时,执行系统默认处理

case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
yyfzy 2008-12-16
  • 打赏
  • 举报
回复
通常情况下,只有当Dialog具有“最大化”和“最小化”系统按钮属性的时候,点击其在任务栏的程序标题,该Dialog的状态会在 最小化/复原 之间切换。
我现在的问题是,Dialog属性不能有“最大化”和“最小化”系统按钮,所以要自己切换状态。

但是找不到好的处理时机。
WM_ACTIVE和WM_ACTIVEAPP这些消息,在其他被激活的情况下也会被调用。
yyfzy 2008-12-16
  • 打赏
  • 举报
回复
不是托盘,是任务栏上的程序标题栏。
Conry 2008-12-08
  • 打赏
  • 举报
回复
[Quote=引用楼主 yyfzy 的帖子:]
如何点击任务栏中的程序图标让程序最大/最小/复原?

谢谢!
[/Quote]

lz是不是指托盘图标?
孤客天涯 2008-12-08
  • 打赏
  • 举报
回复
LRESULT CMainFrame::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
if(lParam == WM_RBUTTONDOWN)
{
// Do something...
}
if(lParam == WM_LBUTTONDBLCLK || lParam == WM_LBUTTONDOWN)
{
// Do something...
}
return CFrameWnd::WindowProc(message, wParam, lParam);
}
yyfzy 2008-12-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zaodt 的回复:]
提供的信息不够。
[/Quote]

是不是我说的不明白? :-)
zaodt 2008-12-08
  • 打赏
  • 举报
回复
提供的信息不够。
yyfzy 2008-12-08
  • 打赏
  • 举报
回复
关键是如何知道用户在任务栏中点击了程序图标,对应的消息是什么?
vinep 2008-12-08
  • 打赏
  • 举报
回复
AfxGetMainWnd()->ShowWindow(SW_MAXIMIZE);
AfxGetMainWnd()->ShowWindow(SW_MINIMIZE);
AfxGetMainWnd()->ShowWindow(SW_SHOWNORMAL);

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧