《托盘图标MFC课程设计调整对话框背景颜色.doc》由会员分享,可在线阅读,更多相关《托盘图标MFC课程设计调整对话框背景颜色.doc(17页珍藏版)》请在三一办公上搜索。
1、MFC课程设计课题名称:调整对话框背景颜色目录1.设计描述31.1课题背景31.2功能描述32.设计分析42.1应用的类42.2成员函数43.源代码及图形64.设计总结174.1个人心得174.2参考文献171.设计描述1.1课题背景 本课题主要是在为了让自己更加了解在MFC中框架类中的各种函数的应用。本程序是在VC6.0中使用AppWizard创建基于对话框的应用程序。1.2功能描述本程序能够改变对话框的背景颜色。对话框中有滚动条和滑动块,通过调节滚动条或滑动块来改变对话框的背景颜色。除此以外,该对话框可以最小化,最大化功能。点击关闭按钮时,会出现提示对话框,提示对话框中有“退出应用程序”,
2、“返回到托盘”,“不再提示”选择按钮供你选择。另外托盘图标是闪动变换的,托盘图标还可以打开子菜单。最小化:最大化:2.设计分析本程序用到了一些基于对话框的类,实现对话框的各种功能2.1应用的类图2.1 ClassView2.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、BO
3、OL 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 CTe
4、stDlg:OnOpen()/打开子菜单项 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-23.源代码及图形BOOL CWLHDlg:OnInitDialog()CDialog:OnInitDialog();/ Add About. menu item to system menu./ IDM_ABOU
5、TBOX must be in the system command range.ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ Set the icon for this dialog. The framework does this automatically/ when the applications main window is n
6、ot a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add extra initialization herem_scrollRed.SetScrollRange(0, 255);m_sliderBlue.SetRange(0, 255);m_sliderGreen.SetRange(0, 255);m_nBlue = m_nGreen = m_nRedValue = 192;UpdateData( FALSE );m_scrollRed.SetScrol
7、lPos(m_nRedValue); SetWindowText(调整对话框背景颜色);return TRUE; / return TRUE unless you set the focus to a controlvoid CWLHDlg:OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) / TODO: Add your message handler code here and/or call defaultint nID = pScrollBar-GetDlgCtrlID();/ 获取对话框中控件ID值if (nID =
8、 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_nRedValue255) m_nRedVa
9、lue = 255;m_scrollRed.SetScrollPos(m_nRedValue);Invalidate();/ 使对话框无效,强迫系统重绘对话框CDialog:OnHScroll(nSBCode, nPos, pScrollBar);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
10、 a different brush if the default is not desiredUpdateData(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/添加图标
11、到托盘BOOL CWLHDlg:AddTray(HWND hWnd, LPSTR lpszTip)NOTIFYICONDATA tnid; 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_NotifyIco
12、n(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);/修改托盘中的图标BOOL CTestDlg:ModifyTray(HWND hwnd,UINT uID)/修改托盘中的图标 NOTIFYICONDATA tnid; tnid.cbSiz
13、e=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 defaultstaticUINT nIDs=IDI_ICON1,IDI_ICON2,IDI_ICON3,I
14、DI_ICON4;static int nIndex=1;ModifyTray(m_hWnd,nIDsnIndex);nIndex=+nIndex%4;CDialog:OnTimer(nIDEvent);/结束图标更换void CTestDlg:OnDestroy()/结束图标更换 CDialog:OnDestroy();/ TODO: Add your message handler code hereKillTimer(1);RemoveTray(m_hWnd);void CTestDlg:OnTrayNotify(WPARAM wParam, LPARAM lParam)if(WM_RB
15、UTTONDOWN=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/打开子菜单
16、项void CTestDlg:OnOpen()/打开子菜单项 / TODO: Add your command handler code hereShowWindow(SW_SHOWNORMAL); SetForegroundWindow();/退出子菜单项void CTestDlg:OnExit()/退出子菜单项/ TODO: Add your command handler code herePostQuitMessage(0);以上代码实现功能如下图 图3-4 图3-5/关于对话框void CWLHDlg:OnAbout() / TODO: Add your command handle
17、r code hereMessageBox(WLH制作n2011年12月,关于,MB_ICONEXCLAMATION |MB_OK);/关闭背景对话框void CWLHDlg:OnClose() /关闭背景对话框/ TODO: Add your message handler code here and/or call defaultHKEY hKey;if(ERROR_SUCCESS=RegOpenKeyEx(HKEY_LOCAL_MACHINE,wlh,0,KEY_READ,&hKey)if(1=nCheck)if(0=nRadio)PostQuitMessage(0);elseAddTr
18、ay(m_hWnd,改变背景);ShowWindow(SW_HIDE);SetTimer(1,500,NULL);elseInquiry();elseInquiry();RegCloseKey(hKey);/询问对话框void CWLHDlg:Inquiry()/询问对话框CInquiry inq;inq.DoModal();/打开询问对话框nRadio=inq.m_n;if(inq.m_chk)/是否选择不再提示选框nCheck=1;/标志为1elsenCheck=0;/标志为0if(0=nRadio)/选择直接退出PostQuitMessage(0);else/选择返回托盘AddTray(
19、m_hWnd,改变背景);ShowWindow(SW_HIDE);/隐藏主窗口SetTimer(1,500,NULL);所用功能的实现如下图运行结果:图3-6最大化: 图3-7最小化: 图3-8点击运行关闭按钮: 图3-9 图3-10托盘子菜单: 图3-11托盘图标: 图3-12 图3-13(四种图片更替变换)关于程序:图3-14 4.设计总结4.1个人心得在课程设计的实践中,我学到很多的知识,积累了不少的经验。我深刻意识到自己在学习中的弱点,同时也找到了克服这些弱点的方法,就是要利用更多的时间去上机实验,多编写程序。要理论联系实际4.2参考文献1.深入浅出MFC简体第二版2.严华峰. Visual C+课程设计案例精编. 北京:中国水利水电出版社,20023.VisualC+6.0MFC时尚编程百例 网冠科技编著 机械工业出版社20024.MFC程序设计 唐克编著 北京希望电子出版社 20025.孙鑫视频