为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

托盘图标MFC课程设计---调整对话框背景颜色

2017-11-16 17页 doc 148KB 25阅读

用户头像

is_215732

暂无简介

举报
托盘图标MFC课程设计---调整对话框背景颜色托盘图标MFC课程设计---调整对话框背景颜色 MFC课程设计 MFC 课题名称:调整对话框背景颜色 共 17页 1 MFC课程设计 目录 1.设计描述 ...................................................................................... 3 1.1课题背景 .............................................................................. 3 1....
托盘图标MFC课程设计---调整对话框背景颜色
托盘图标MFC课程设计---调整对话框背景颜色 MFC课程设计 MFC 课题名称:调整对话框背景颜色 共 17页 1 MFC课程设计 目录 1.设计描述 ...................................................................................... 3 1.1课题背景 .............................................................................. 3 1.2功能描述 .............................................................................. 3 2.设计分析 ...................................................................................... 4 2.1应用的类 .............................................................................. 4 2.2成员函数 .............................................................................. 4 3.源代码及图形 ............................................................................... 6 4.设计 .................................................................................... 17 4.1个人心得 ............................................................................ 17 4.2参考文献 ............................................................................ 17 共 17页 2 MFC课程设计 1.设计描述 1.1课题背景 本课题主要是在为了让自己更加了解在MFC中框架类中的各种函数的应用。本程序是在VC6.0中使用AppWizard创建基于对话框的应用程序。 1.2功能描述 本程序能够改变对话框的背景颜色。对话框中有滚动条和滑动块,通过调节滚动条或滑动块来改变对话框的背景颜色。 除此以外,该对话框可以最小化,最大化功能。点击关闭按钮时,会出现提示对话框,提示对话框中有“退出应用程序”,“返回到托盘”,“不再提示”选择按钮供你选择。另外托盘图标是闪动变换的,托盘图标还可以打开子菜单。 最小化: 最大化: 共 17页 3 MFC课程设计 2.设计分析 本程序用到了一些基于对话框的类,实现对话框的各种功能 2.1应用的类 图2.1 ClassView 2.2成员函数 程序里的成员函数如下 1、BOOL CWLHDlg::OnInitDialog() 2、void CWLHDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 3、HBRUSH CWLHDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 4、BOOL CWLHDlg::AddTray(HWND hWnd, LPSTR lpszTip)//添加图标到托盘 5、BOOL CTestDlg::RemoveTray(HWND hwnd)//删除托盘中的图标 6、BOOL CTestDlg::ModifyTray(HWND hwnd,UINT uID)//修改托盘中的图标 7、void CWLHDlg::OnTimer(UINT nIDEvent) //更换图标 8、void CTestDlg::OnTrayNotify(WPARAM wParam, LPARAM lParam) 9、void CTestDlg::OnDestroy()//结束图标更换 10、void CTestDlg::OnOpen()//打开子菜单项 共 17页 4 MFC课程设计 11、void CTestDlg::OnExit()//退出子菜单项 12、void CWLHDlg::OnAbout() //关于子菜单 13、void CWLHDlg::OnClose() //关闭背景对话框 14、void CWLHDlg::Inquiry()//询问对话框 各个类的成员函数和数据成员如图2.2-1,图2.2-2所示 图2.2-1 图2.2-2 共 17页 5 MFC课程设计 3.源代码及图形 BOOL CWLHDlg::OnInitDialog() { CDialog::OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here m_scrollRed.SetScrollRange(0, 255); m_sliderBlue.SetRange(0, 255); m_sliderGreen.SetRange(0, 255); 共 17页 6 MFC课程设计 m_nBlue = m_nGreen = m_nRedValue = 192; UpdateData( FALSE ); m_scrollRed.SetScrollPos(m_nRedValue); SetWindowText("调整对话框背景颜色"); return TRUE; // return TRUE unless you set the focus to a control } void CWLHDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { // TODO: Add your message handler code here and/or call default int nID = pScrollBar->GetDlgCtrlID(); // 获取对话框中控件ID值 if (nID == IDC_SCROLLBAR_RED) { // 若是滚动条产生的水平滚动消息 switch(nSBCode){ case SB_LINELEFT: m_nRedValue--; // 单击滚动条左边箭头 break; case SB_LINERIGHT: m_nRedValue++; // 单击滚动条右边箭头 break; case SB_PAGELEFT: m_nRedValue -= 10; break; case SB_PAGERIGHT: m_nRedValue += 10; break; case SB_THUMBTRACK: m_nRedValue = nPos; break; } if (m_nRedValue<0) m_nRedValue = 0; if (m_nRedValue>255) m_nRedValue = 255; m_scrollRed.SetScrollPos(m_nRedValue); } Invalidate(); // 使对话框无效,强迫系统重绘对话框 CDialog::OnHScroll(nSBCode, nPos, pScrollBar); } 共 17页 7 MFC课程设计 HBRUSH CWLHDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); // TODO: Change any attributes of the DC here // TODO: Return a different brush if the default is not desired UpdateData(TRUE); COLORREF color = RGB(m_nRedValue, m_nGreen, m_nBlue); m_Brush.Detach(); // 使画刷和对象分离 m_Brush.CreateSolidBrush(color); // 创建颜色画刷 pDC->SetBkColor( color ); // 设置背景颜色 return (HBRUSH)m_Brush; // 返回画刷句柄,以便系统使此画刷绘制对话框 return hbr; } 以上代码实现对话框背景颜色调整功能 图3-1 //添加图标到托盘 BOOL CWLHDlg::AddTray(HWND hWnd, LPSTR lpszTip) { NOTIFYICONDATA tnid; 共 17页 8 MFC课程设计 tnid.cbSize=sizeof(NOTIFYICONDATA); tnid.hWnd=hWnd; tnid.uFlags=NIF_MESSAGE | NIF_ICON | NIF_TIP; tnid.uCallbackMessage=WM_ICON_NOTIFY; tnid.hIcon=AfxGetApp()->LoadIcon(IDI_ICON1); strcpy(tnid.szTip,lpszTip); return Shell_NotifyIcon(NIM_ADD, &tnid); } 添加图标到托盘如下图图3-2 图3-1 //删除托盘中的图标 BOOL CTestDlg::RemoveTray(HWND hwnd)//删除托盘中的图标 { NOTIFYICONDATA tnid; tnid.cbSize=sizeof(NOTIFYICONDATA); tnid.hWnd=hwnd; return Shell_NotifyIcon(NIM_DELETE,&tnid); } //修改托盘中的图标 共 17页 9 MFC课程设计 BOOL CTestDlg::ModifyTray(HWND hwnd,UINT uID)//修改托盘中的图标 { NOTIFYICONDATA tnid; tnid.cbSize=sizeof(NOTIFYICONDATA); tnid.hWnd=hwnd; tnid.uFlags=NIF_ICON; tnid.hIcon=AfxGetApp()->LoadIcon(uID); return Shell_NotifyIcon(NIM_MODIFY, &tnid); } //更换图标 void CWLHDlg::OnTimer(UINT nIDEvent) //更换图标 { // TODO: Add your message handler code here and/or call default staticUINT nIDs[]={IDI_ICON1,IDI_ICON2,IDI_ICON3,IDI_ICON4}; static int nIndex=1; ModifyTray(m_hWnd,nIDs[nIndex]); nIndex=++nIndex%4; CDialog::OnTimer(nIDEvent); } //结束图标更换 void CTestDlg::OnDestroy()//结束图标更换 { CDialog::OnDestroy(); // TODO: Add your message handler code here KillTimer(1); RemoveTray(m_hWnd); } void CTestDlg::OnTrayNotify(WPARAM wParam, LPARAM lParam) { 共 17页 10 MFC课程设计 if(WM_RBUTTONDOWN==lParam) { CMenu menu; menu.LoadMenu(IDR_MENU1); CPoint point; GetCursorPos(&point);//得到鼠标位置 CMenu *popup=menu.GetSubMenu(0); popup->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON, point.x, point.y, this); return; } if(WM_LBUTTONDOWN==lParam) { ShowWindow(SW_SHOWNORMAL); SetForegroundWindow(); return; } } 图3-3 //打开子菜单项 void CTestDlg::OnOpen()//打开子菜单项 { // TODO: Add your command handler code here ShowWindow(SW_SHOWNORMAL); SetForegroundWindow(); 共 17页 11 MFC课程设计 } //退出子菜单项 void CTestDlg::OnExit()//退出子菜单项 { // TODO: Add your command handler code here PostQuitMessage(0); } 以上代码实现功能如下图 图3-4 图3-5 //关于对话框 void CWLHDlg::OnAbout() { // TODO: Add your command handler code here MessageBox("WLH制作\n2011年12月","关于",MB_ICONEXCLAMATION |MB_OK); } //关闭背景对话框 void CWLHDlg::OnClose() //关闭背景对话框 { // TODO: Add your message handler code here and/or call default HKEY hKey; if(ERROR_SUCCESS==RegOpenKeyEx(HKEY_LOCAL_MACHINE,"wlh",0, KEY_READ,&hKey)) { if(1==nCheck) 共 17页 12 MFC课程设计 { if(0==nRadio) { PostQuitMessage(0); } else { AddTray(m_hWnd,"改变背景"); ShowWindow(SW_HIDE); SetTimer(1,500,NULL); } } else { Inquiry(); } } else { Inquiry(); } RegCloseKey(hKey); } //询问对话框 void CWLHDlg::Inquiry()//询问对话框 { CInquiry inq; inq.DoModal();//打开询问对话框 nRadio=inq.m_n; if(inq.m_chk)//是否选择不再提示选框 共 17页 13 MFC课程设计 nCheck=1;//标志为1 else nCheck=0;//标志为0 if(0==nRadio)//选择直接退出 { PostQuitMessage(0); } else//选择返回托盘 { AddTray(m_hWnd,"改变背景"); ShowWindow(SW_HIDE);//隐藏主窗口 SetTimer(1,500,NULL); } } 所用功能的实现如下图 运行结果: 图3-6 最大化: 共 17页 14 MFC课程设计 图3-7 最小化: 图3-8 点击运行关闭按钮: 图3-9 共 17页 15 MFC课程设计 图3-10 托盘子菜单: 图3-11 托盘图标: -12 图3 图3-13(四种图片更替变换) 关于程序: 图3-14 共 17页 16 MFC课程设计 4.设计总结 4.1个人心得 在课程设计的实践中,我学到很多的知识,积累了不少的经验。我深刻意识到自己在学习中的弱点,同时也找到了克服这些弱点的方法,就是要利用更多的时间去上机实验,多编写程序。要理论联系实际 4.2参考文献 1.《深入浅出MFC简体第二版》 2.严华峰. Visual C++课程设计案例精编. 北京:中国水利水电出版社,2002 3.《VisualC++6.0MFC时尚编程百例》 网冠科技编著 机械工业出版社2002 4.《MFC程序设计》 唐克编著 北京希望电子出版社 2002 5.孙鑫视频 共 17页 17
/
本文档为【托盘图标MFC课程设计---调整对话框背景颜色】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索