试图使程序最小化到托盘上

lagest 2004-01-08 09:53:05
别人的代码,我不知道具体怎么加到我的对话框程序里面啊
他这里的onsize 参数是哪里传递进去的? onsize函数就是放在cpp文件里面就可以了吗? 我刚开始学这个 呵呵

/*************************************
试图使程序最小化到托盘上
*************************************/
void CDXShow3Dlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);

// TODO: Add your message handler code here
if (nType == SIZE_MINIMIZED)
{

NOTIFYICONDATA nc;

nc.cbSize=sizeof(NOTIFYICONDATA);

nc.hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);

nc.hWnd=m_hWnd;

strcpy(nc.szTip, "DXShow3 Video Player");

nc.uCallbackMessage=WM_BACK; // 点击托盘图标时发送的自定义消息

nc.uFlags=NIF_TIP|NIF_MESSAGE|NIF_ICON;

Shell_NotifyIcon(NIM_ADD,&nc); // 在托盘区显示对应的头标

ShowWindow(false);

}


}

然后在自定义消息WM_BACK的处理函数中添加如下代码即可:
/*******************************
自定义消息,用于点击托盘
图标恢复原窗口。
*******************************/

LRESULT CDXShow3Dlg::OnBack(WPARAM wparam, LPARAM lparam)
{

UINT uMouseMsg; // 捕获鼠标动作

uMouseMsg=(UINT) lparam;

if(uMouseMsg==WM_LBUTTONDOWN)
{

// 托盘上鼠标左键,重新显示

ShowWindow(SW_SHOW);

NOTIFYICONDATA nc;

nc.cbSize=sizeof(NOTIFYICONDATA);

nc.hWnd=AfxGetMainWnd()->m_hWnd;

nc.uID=IDR_MAINFRAME;

Shell_NotifyIcon(NIM_DELETE, &nc);

ShowWindow( SW_RESTORE );

SetForegroundWindow();

UpdateWindow();

// ::SetWindowPos(this->GetSafeHwnd(),HWND_TOPMOST,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE);
}

if(uMouseMsg==WM_RBUTTONDOWN)
{
// 右键是弹出菜单

AfxGetMainWnd()->SetForegroundWindow(); //弹出Popup菜单

CMenu menu;

menu.LoadMenu(IDR_MAINMENU);

CMenu* pPopup=menu.GetSubMenu(1);

CPoint Point;

GetCursorPos(&Point);

pPopup->TrackPopupMenu(TPM_LEFTALIGN, Point.x, Point.y, AfxGetMainWnd(), NULL );

AfxGetMainWnd()->PostMessage(WM_NULL, 0, 0);
}

return 0L;
}


...全文
73 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lscd 2004-09-22
  • 打赏
  • 举报
回复
ThreadProc()是回调函数,是由Windows在后台调用的。Windows启动一个线程,它的线程函数就是ThreadProc(),当此线程被分配处理器时间可以运行时,Windows就调用这个线程函数。
WaitForSingleObject(m_hThread,INFINITE)的作用是无限等待m_hThread处于有信号状态。
线程结束(线程函数执行完成)时线程句柄处于有信号状态,所以这句的意思是等待线程结束。
simouse 2004-01-09
  • 打赏
  • 举报
回复
这段代码不错,收藏
ddszhan 2004-01-08
  • 打赏
  • 举报
回复
OnSize()是消息响应函数。
WorkSpace中的Class View选中你的对话框类,右键,添加Windows Message Handle,在其中选择WM_SIZE,添加并编辑。
你也可以手工添加:
//you dialog .h

在DECLARE_MESSAGE_MAP()之前添加
afx_msg void OnSize(UINT nType, int cx, int cy);

//you dialog .cpp
在BEGIN_MESSAGE_MAP(CYouDlg, CDialog)和END_MESSAGE_MAP()之间添加
ON_WM_SIZE()

void CDXShow3Dlg::OnSize(UINT nType, int cx, int cy)
{
//。。。。。
}

16,550

社区成员

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

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

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