- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
利用任务栏上的图标与用户交互
利用任务栏上的图标与用户交互
首先,要使程序的主窗口不可见,并且不在任务栏上出现任务按钮,要做到这
两点,需分别设置主边框窗口的风格和扩展风格:
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(
您可能关注的文档
- 高三语文复习修改病句.doc
- 首次拜访.ppt
- 责任制积分考核论文:班主任工作的几点做法.doc
- 从抒情走向叙事.doc
- 第01节:创新.创造与创造学.ppt
- 六年级上学期数学稍复杂的应用题.doc
- 小学1-6年级单词汇总.doc
- 法律法规-13.doc
- 教师专业个人发展3年规划杨帆.doc
- 招商引资制度.doc
- 2024年江西省高考政治试卷真题(含答案逐题解析).pdf
- 2025年四川省新高考八省适应性联考模拟演练(二)物理试卷(含答案详解).pdf
- 2025年四川省新高考八省适应性联考模拟演练(二)地理试卷(含答案详解).pdf
- 2024年内蒙通辽市中考化学试卷(含答案逐题解析).docx
- 2024年四川省攀枝花市中考化学试卷真题(含答案详解).docx
- (一模)长春市2025届高三质量监测(一)化学试卷(含答案).pdf
- 2024年安徽省高考政治试卷(含答案逐题解析).pdf
- (一模)长春市2025届高三质量监测(一)生物试卷(含答案).pdf
- 2024年湖南省高考政治试卷真题(含答案逐题解析).docx
- 2024年安徽省高考政治试卷(含答案逐题解析).docx
文档评论(0)