如何在隐藏窗口一段时间后重新激活该窗口?

wangdx 2000-07-16 02:31:00
各位网友:
本人要编制一个程序,点击界面上一按钮,隐藏该程序(不是最小化,任务栏中也不能看到);用户可以去进行别的工作;若要激活隐藏的程序,按某个快捷键即可,不知如何实现?哪位有兴趣请指点一二,谢谢;
...全文
295 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yueyue 2000-07-19
  • 打赏
  • 举报
回复
哪有这么复杂。
看下面:

1 隐藏窗口:
void CMainFrame:: OnHideWindow()
{
ShowWindow(SW_HIDE);
}

2 设热键:
BOOL CMainFrame:: OnCreate(...)
{
......


RegisterHotKey(....);
}

3 热键响应函数:
(1) 设置消息映射:
ON_MESSAGE(WM_HOTKEY,OnHotKey)
(2) 响应:
OnHotKey(WPARAM wParam, LPARAM lParam)
{
ShowWindow(SW_SHOW);
}

注: 注册热键及响映应在同一个类中。
当然这只是大概情况,详细程序还要自己动手。
ad 2000-07-19
  • 打赏
  • 举报
回复
yueyue没有明白wangdx的意思,应该象dzl说的那样做。
bird2000 2000-07-18
  • 打赏
  • 举报
回复
hook键盘钩子
mjyf 2000-07-16
  • 打赏
  • 举报
回复
要用快捷键激活,恐怕需要用到hook键盘钩子,这时可以不要交互栏中的图标.
dzl 2000-07-16
  • 打赏
  • 举报
回复
贴一篇CSDN的文章供参考


利用任务栏上的图标与用户交互

作者:李奔

我们有时需要编制一些仅在后台监控的程序,为了不干扰前台程序的运行界面和不显示不必要的窗口,应使其运行时的主窗口不可见。同时,应该让用户知道该程序正在运行,并且达到与用户进行交互的目的。将一个图标显示在任务栏右端静态通告区中并响应用户的鼠标动作是当前非常流行的方法,它体现了windows 95友好的界面风格。下面以一个sdi(单文档界面)程序为例,讲述采用microsoft visual c++ 5.0开发这类程序的主要步骤。

首先,要使程序的主窗口不可见,并且不在任务栏上出现任务按钮,要做到这两点,需分别设置主边框窗口的风格和扩展风格:

bool cmainframe::precreatewindow(createstruct& cs)

{

cs.style =ws_popup;//使主窗口不可见

cs.dwexstyle |=ws_ex_toolwindow;//不显示任务按钮

return cframewnd::precreatewindow(cs);

}

其次,利用系统函数shell_notifyicon将一个图标显示在任务栏的通告区中。该函数的原型为:

winshellapi bool winapi shell_notifyicon(

dword dwmessage,

pnotifyicondata pnid

);

下例中被显示的是主边框窗口的图标,实际上可以显示任何图标:

int cmainframe::oncreate(lpcreatestruct lpcreatestruct)

{



notifyicondata tnd;

tnd.cbsize=sizeof(notifyicondata);

tnd.hwnd=this->m_hwnd;

tnd.uid=idr_mainframe;

tnd.uflags=nif_message|nif_icon|nif_tip;

tnd.ucallbackmessage=wm_liben;

tnd.hicon=loadicon(afxgetinstancehandle(),makeintresource(idr_mainframe));

strcpy(tnd.sztip,"提示信息");

shell_notifyicon(nim_add,&tnd);



}

在调用该函数之前,需要确定其参数的取值,其中之一为一个具有notifyicondata类型的结构。其原型为:

typedef struct _notifyicondata { // nid

dword cbsize;

hwnd hwnd;

uint uid;

uint uflags;

uint ucallbackmessage;

hicon hicon;

charsztip[64]; }

notifyicondata, *pnotifyicondata;

在该结构的成员中,cbsize为该结构所占的字节数,hwnd为接受该图标所发出的消息的窗口的句柄,uid为被显示图标的id,uflags指明其余的几个成员(hicon、ucallbackmessage和sztip)的值是否有效,ucallbackmessage为一个自定义的消息,当用户在该图标上作用一些鼠标动作时,将向hwnd成员中指定的窗口发出该消息,可以定义该消息为wm_user+100。hicon为被显示图标的句柄,sztip为一字符数组,当鼠标停留在该图标上时,将其内容显示在浮动的提示信息框中。shell_notifyicon函数的另一个参数是一个预定义的消息,可以取如下值之一:nim_add、nim_delete或nim_modify,分别表示添加图标、删除图标或修改图标。

最后,要与用户进行交互,也就是当用户在该图标上单击或双击鼠标左键或右键时要执行相应的操作,至少也要响应用户终止该程序的意愿。上面已经提到,当用户在图标上进行鼠标动作时,将向hwnd成员中指定的窗口发出自定义的消息,该消息由ucallbackmessage成员指定(在上例中为wm_liben,取值为wm_user+100)。因此,我们的任务就是在hwnd窗口中响应该自定义消息:

void cmainframe::onliben(wparam wparam,lparam lparam)

{

uint uid;//发出该消息的图标的id

uint umousemsg;//鼠标动作

point pt;

uid=(uint) wparam;

umousemsg=(uint) lparam;

if(umousemsg==wm_rbuttondown)//如果是单击右键

{

switch(uid)

{

case idr_mainframe://如果是我们的图标

getcursorpos(&pt);//取得鼠标位置

…//执行相应操作

break;



default:



}

}

return;

}

需要注意的是,首先要在该窗口类的头文件中给出该消息映射函数的原型说明:

afx_msg void onliben(wparam wparam,lparam lparam);

并且要在cpp文件中的消息映射中加入相应的条目,注意一定要加在//{{afx_msg_map(cmainframe)和//}}afx_msg_map之外:

begin_message_map(cmainframe, cframewnd)

//{{afx_msg_map(cmainframe)

on_wm_create()

on_command(id_app_exit, onappexit)

//}}afx_msg_map

on_message(wm_liben,onliben)

end_message_map()

当程序结束时,需要删去通告区中的图标,这时同样应该调用shell_notifyicon函数,只不过第一个参数是表示删除图标的nim_delete了:

void cmainframe::onappexit()

{

// todo: add your command handler code here

notifyicondata tnid;

tnid.cbsize=sizeof(notifyicondata);

tnid.hwnd=this->m_hwnd;

tnid.uid=idr_mainframe;//保证删除的是我们的图标

shell_notifyicon(nim_delete,&tnid);

afxpostquitmessage(0);

}

通过类似的步骤,读者可以响应其他的消息,完成更加高级的交互功能,这里不再赘述。上文所述是笔者经验所得,肯定有不到之处,欢迎指正。
MetaQuotes Language 5 (MQL5)是一种高水平编程语言,专为开发技术指标、EA交易和实用应用程序而设计,进而使金融交易自动化。本课程为MT5/MQL5智能交易编程学习,从零基础开始讲解,全面掌握MQL5基础语法,熟练使用MQL5常用函数API,实战开发EA自动化交易程序,从入门到精通,进而能够进行自动交易策略开发,走上EA自动化交易之路。本课程学习过程分为三个阶段:第一阶段、MQL5语言基础学习:通过MQL5语法基础学习,能够快速掌握MetaEditor编辑器使用和基础编程语法,为后续学习MQL5函数API,进行实战学习打下良好基础。内容包括:MT5基本功能介绍、MetaEditor编辑器、基本数据类型、常量和变量、枚举类型、结构体、数组、算数运算符、关系运算符、逻辑运算符、条件判断、循环、函数、类的定义、类的成员变量和函数、类的构造函数、类的析构函数、类的函数重载、类的成员变量的访问权限、类的继承、类的多态、抽象类和纯虚函数。第二阶段:MQL5函数API详解:此阶段为进阶过程,在学习了解MT5交易平台的基础上,掌握如何通过程序获取交易数据、控制交易过程,模拟交易策略,实现自动化交易。内容包括:帮助手册讲解、智能EA指标脚本运行框架、获取账户、客户端、货币信息、获取交易品种信息、获取市场深度信息、获取财经日历信息、K线数据、时间序列、指标访问、获取订单信息、下单、挂单操作、图表窗口操作、图表上画对象、脚本开发实例、指标开发实例、智能EA开发实例、历史数据回测及参数优化、发送邮件、警报、消息提醒、信号订阅、跟单、文件操作、标准程序库。第三阶段:EA交易程序实战:通过前面两个阶段的学习,已经掌握了MT5量化交易编程的基础知识和能力,在实战阶段结合策略交易的关键环节,通过多个实战示例,讲解如何进行仓位管理、风险控制、止盈止损、指标定制等,实现复杂的交易策略逻辑,提高程序自动化交易的实战能力。内容包括:一个简单趋势EA、订单请求合法性校验、三重时间框架、仓位管理、移动止损、移动止盈、隐藏止盈止损价格、风险控制、时间控制、参数控制、展示面板、统计分析、持仓单一键平仓脚本、六类挂单一键取消脚本、按时间标记位置脚本、按价格标记位置脚本、双线一柱变色MACD指标。

16,472

社区成员

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

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

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