taskbar的东西,搞不定,急需帮忙

jlqidan 2002-07-30 05:25:10
void TrayMessage (HWND hWnd, UINT message)
{
NOTIFYICONDATA tnd;
tnd.cbSize = sizeof (NOTIFYICONDATA);
tnd.uFlags =NIF_MESSAGE | NIF_ICON | NIF_TIP;
tnd.uID = (UINT)IDR_MAINFRAME;
tnd.hWnd = hWnd;
//tnd.uCallbackMessage = TrayCallBack();
tnd.hIcon =::LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME));
::Shell_NotifyIcon (message, &tnd);
}

void CCadoDemoView::OnTask()
{
// TODO: Add your command handler code here
TrayMessage (NULL, NIM_ADD);
}
我点击了名为ID_TASK的按钮触发程序,但奇怪的是,任务栏出现一块空白,但并未显示程序图标,并且我的程序退出后,那块空白不消失,要重起后才恢复.不知什么原因
另:
我想通过点击窗体标题栏的最小化按钮触发程序,怎么做?我没找到相应的消息可以映射呀.
...全文
66 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
GoogleGeek 2002-08-06
  • 打赏
  • 举报
回复

你的消息映射函数怎么具有UINT类型的返回值呢?他的返回值应该是VOID

1、
CadoDemoView.h:
...
//}}AFX_MSG
afx_msg void TrayCallBack(WPARAM wParam,LPARAM lParam);

2、
CadoDemoView.CPP:
....
#define MYWM_NOTIFYICON WM_USER+100
...
BEGIN_MESSAGE_MAP(..,...)

//{{AFX_MSG_MAP()
...
//}}AFX_MSG_MAP
ON_MESSAGE( MYWM_NOTIFYICON,TrayCallBack)
...
END_MESSAGE_MAP()

void CCadoDemoView::TrayCallBack(WPARAM wParam,LPARAM lParam)
{
UINT uid;
UINT uMessage;
uid=UINT(wParam);
uMessage=UINT(lParam);
if(uMessage==WM_LBUTTONDOWN){
if(uid==IDI_ICON4)
{AfxMessageBox("This sure is fun!");}
}

return;
}
GoogleGeek 2002-08-06
  • 打赏
  • 举报
回复
当然要映射消息: MYWM_NOTIFYICON,否则系统怎么知道将你的WM_LBUTTONDOWN消息,发送给哪个窗口的哪那个函数进行处理呢?
jlqidan 2002-08-05
  • 打赏
  • 举报
回复
CadoDemoView.h:
...
//}}AFX_MSG
afx_msg UINT TrayCallBack(WPARAM wParam,LPARAM lParam);

DECLARE_MESSAGE_MAP()
...
CadoDemoView.cpp :
void TrayMessage (HWND hWnd, UINT message)
{
...
tnd.uCallbackMessage = MYWM_NOTIFYICON;
...
}
UINT CCadoDemoView::TrayCallBack(WPARAM wParam,LPARAM lParam)
{
UINT uid;
UINT uMessage;
uid=UINT(wParam);
uMessage=UINT(lParam);
if(uMessage==WM_LBUTTONDOWN){
if(uid==IDI_ICON4)
{AfxMessageBox("This sure is fun!");}
}

return(::DefWindowProc(NULL,uMessage,wParam,lParam));
}
上面三个函数,我想要实现taskbar图标响应左键单击的事件,可是没有一点反映,难道callback message MYWM_NOTIFYICON要进行消息映射给TrayCallBack()函数?
jlqidan 2002-08-05
  • 打赏
  • 举报
回复
WM_LISTEN消息需要映射吗?
yaotang 2002-08-01
  • 打赏
  • 举报
回复
珍藏先
GoogleGeek 2002-08-01
  • 打赏
  • 举报
回复
1。该问题不太可能出现!你到底对你的任务栏图标响应了什么消息?
你在什么地方调用了函数:
Shell_NotifyIcon(NIM_DELETE,&tnid);
否则,怎么可能自动地删除图标呢?
2。不需要相应消息:
WM_MOUSEMOVE
只要在创建任务栏图表示指定创建标志为:NIF_TIP即可!
例如:
.....
tnd.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;
....
3。当然可以是全局函数!
我这样做的目的是为了使用的方便!
我是在CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)中创建任务揽图表的!
4。我的本意是为了直接的退出应用程序!
现在看来是多此一举!
可以改为如下:

void CMainFrame::OnClose()
{
// TODO: Add your message handler code here and/or call default
NOTIFYICONDATA tnid;
tnid.cbSize=sizeof(NOTIFYICONDATA);
tnid.hWnd=m_hWnd;
tnid.uID=IDR_MAINFRAME;//保证删除的是我的图标
Shell_NotifyIcon(NIM_DELETE,&tnid);

CMDIFrameWnd::OnClose();
}

5、m_hWnd is the handle of CMainFrame,it is public member fo the class CWnd!
jlqidan 2002-07-31
  • 打赏
  • 举报
回复
图标可以显示了,但当鼠标一放在它上边,它就退出了.怎么回事呢?
jlqidan 2002-07-31
  • 打赏
  • 举报
回复
看了你的回答,很感谢,有几个疑问:
1。“我的鼠标怎么一放在图标上,图标就退出去了呢?怎样能让它保持住呢?“
增加一个删除的函数是就可以解决这个问题吗?
2。“当鼠标悬浮在图标上时,提示的字是怎么显示的呢?“
图标保持住了,就可以自动显示提示了吗?因为没有看到你有相应消息
WM_MOUSEMOVE的函数
3。你所列的函数是CMainFrame类的,难道不应该是全局函数吗?我在msdn看的例
子都是全局函数呀
4。
void CMainFrame::OnClose()
{
。。。
PostQuitMessage(WM_QUIT);
CMDIFrameWnd::OnClose();//这两句是什么意思?都分别退出哪部分程序
}

5。OnListen函数:
::SetForegroundWindow( m_hWnd); //m_hWmd哪来的?


不好意思,问题是多了点,我又加了点分

GoogleGeek 2002-07-31
  • 打赏
  • 举报
回复
你需要响应特定自定义的消息!
例如在:
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;
//this is the user_defined message ID:WM_LISTEN
tnd.uCallbackMessage=WM_LISTEN;
tnd.hIcon=LoadIcon(AfxGetInstanceHandle(),
MAKEINTRESOURCE(IDR_MAINFRAME));
//This is the tooltips!
strcpy(tnd.szTip,"测试程序!宋业文。");
Shell_NotifyIcon(NIM_ADD,&tnd);
....
}
相应自己的消息:
void CMainFrame::OnListen(WPARAM wParam,LPARAM lParam)
{
//The example of how to process the message!
UINT uID;//发出该消息的图标的ID
UINT uMouseMsg;//鼠标动作
POINT pt;
//获得消息的ID
uID=(UINT) wParam;
//获得当前的消息
uMouseMsg=(UINT) lParam;

if(uMouseMsg==WM_RBUTTONDOWN)//如果是单击右键
{
switch(uID)
{
case IDR_MAINFRAME://如果是我们的图标
GetCursorPos(&pt);//取得鼠标位置
::SetForegroundWindow( m_hWnd);
CMenu menu;
menu.LoadMenu(IDR_MENU_NEW);
menu.GetSubMenu(0)->TrackPopupMenu(TPM_RIGHTBUTTON|TPM_LEFTALIGN,pt.x,pt.y,this);
::PostMessage( m_hWnd, WM_NULL, 0, 0 );
break;
}
}
if(uMouseMsg==WM_LBUTTONDBLCLK)
{
this->OnDisplayMe();
}

return;
}

增加一个一个删除图标的函数:
void CMainFrame::OnClose()
{
// TODO: Add your message handler code here and/or call default
NOTIFYICONDATA tnid;
tnid.cbSize=sizeof(NOTIFYICONDATA);
tnid.hWnd=m_hWnd;
tnid.uID=IDR_MAINFRAME;//保证删除的是我们的图标
Shell_NotifyIcon(NIM_DELETE,&tnid);
PostQuitMessage(WM_QUIT);
CMDIFrameWnd::OnClose();
}
----------------------
Run&Enjoy it!
jlqidan 2002-07-31
  • 打赏
  • 举报
回复
我的鼠标怎么一放在图标上,图标就退出去了呢?怎样能让它保持住呢?当鼠标悬浮在图标上时,提示的字是怎么显示的呢?
FFXI 2002-07-30
  • 打赏
  • 举报
回复
1. 图标没有显示可能是因为 IDR_MAINFRAME 没有16x16的小图标,要在Resource Editor中检查一下。


2. 增加一个移除函数,可以用按钮或在程序退出是调用:

void CCadoDemoView::OnRemoveTask()
{
TrayMessage (NULL, NIM_DELETE);
}

3. 最小化按钮触发,重载WM_SYSCOMMAND(OnSysCommand() for MFC);
代码下载链接: https://pan.quark.cn/s/cf0000dae7ac 在.NET Framework平台中,`TreeView`组件是一种普遍应用的数据展示工具,主要功能是呈现层级化数据,例如文件系统布局、组织架构图等。本文将深入阐述在C#环境下如何运用递归方法为`TreeView`组件配置子节点,尤其是在管理文件夹层次结构的应用场景中。递归是一种高效的编程策略,其特点在于函数能够自我调用以完成特定任务,这种技术特别适用于处理具有层级关联的数据集合。为了有效运用`TreeView`组件,我们首先需要明确其核心构成单元:`TreeNode`。`TreeNode`是`TreeView`中的一个基本单元,它可以承载子节点,从而构建出树状结构。为了在`TreeView`中准确反映文件夹结构,每一个`TreeNode`通常映射为一个文件夹,而其下属的子节点则对应该文件夹内的子文件夹或文件。现在我们聚焦于核心内容,探讨如何通过递归方式实现子节点的添加。1. **构建基础框架** 我们需要设计一个类来描述文件或文件夹,该类应包含名称、路径等基本属性。例如: ```csharp public class FileSystemItem { public string Name { get; set; } public string Path { get; set; } // 其他属性如IsDirectory等 } ```2. **采集文件系统数据** 借助`System.IO`命名空间中的`DirectoryInfo`和`FileInfo`类,对目标目录进行遍历,以获取所有文件和子文件夹的信息。这里可以利用`GetDirectories()`和`GetFiles...
内容概要:本文系统阐述了Java微服务架构与TypeScript全栈工程化的实战方法,涵盖从单体应用拆分到分布式系统治理的完整技术链条。在Java微服务部分,基于Spring Boot与Spring Cloud生态,深入讲解领域驱动设计(DDD)、服务注册与发现(如Nacos、Eureka)、配置中心、API网关(Spring Cloud Gateway)、声明式调用(Feign)、负载均衡、服务熔断降级(Resilience4j/Hystrix)、消息队列异步解耦(Kafka/RabbitMQ)以及分布式事务(如Seata)等核心技术。数据层强调数据库自治原则,并结合Redis提升性能。前端部分聚焦TypeScript类型系统,通过静态类型检查增强代码可靠性,支持泛型、联合类型、映射类型等高级特性,实现前后端接口模型统一。全栈协作采用React/Vue/Angular框架,结合Axios通信与Swagger接口文档标准化。工程化层面引入Docker、Kubernetes实现容器化部署,配合Jenkins或GitHub Actions完成CI/CD自动化流程,并通过ELK实现日志追踪。典型应用场景包括电商、订单管理等系统,实现高内聚、低耦合、可扩展的分布式架构。; 适合人群:具备一定Java与前端基础,从事中高级后端开发、全栈开发或系统架构工作的技术人员,尤其适合1-5年经验并希望掌握微服务与全栈工程化实践的研发人员。; 使用场景及目标:①掌握微服务拆分与Spring Cloud微服务体系建设;②理解服务治理、异步通信、分布式事务等关键问题的解决方案;③构建类型安全的全栈项目,提升前后端协作效率与系统稳定性;④实现微服务的容器化部署与持续交付。; 阅读建议:建议结合实际项目边学边练,重点关注架构设计思想与技术选型背后的权衡,同时动手搭建完整微服务链路与前端类型系统,深入理解各组件集成方式与最佳实践。

16,550

社区成员

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

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

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