MFC 对话框系统托盘详细步骤

合集下载

mfcvslistboxcontrol控件用法 -回复

mfcvslistboxcontrol控件用法 -回复

mfcvslistboxcontrol控件用法-回复MFC (Microsoft Foundation Class)是微软的一套C++类库,用于开发Windows操作系统上的应用程序。

在MFC中,提供了一系列的控件供开发者使用,其中包括了List Box控件。

List Box控件是用于显示一组选项的窗口控件,用户可以从中选择一个或多个选项。

它常用于列表选择界面,例如选择用户的偏好设置、选择文件、选择项目等。

在本文中,我们将详细介绍MFC中的List Box控件的用法,以帮助开发者了解如何创建、添加选项、获取选择结果等。

第一步:创建List Box控件在MFC应用程序中,可以通过对话框设计器来创建List Box控件。

打开对话框设计器后,可以在工具箱中找到List Box控件,将其拖放到对话框上。

第二步:设置List Box属性选中List Box控件后,可以进行一些属性的设置,如修改控件名称,调整位置和大小等。

可以通过双击控件来打开属性窗口,设置更多属性。

第三步:添加选项在List Box控件上右键单击,选择Properties可以打开属性窗口。

在属性窗口中,可以输入选项的名称,然后点击“添加”按钮将选项添加到List Box中。

可以重复该步骤来添加多个选项。

第四步:获取选择结果当用户选择了一个或多个选项后,可以通过代码来获取选择的结果。

在MFC中,可以通过CListBox类来操作List Box控件。

可以在对话框所属的类中声明一个CListBox类型的变量,并在DoDataExchange函数中进行绑定。

接下来,可以通过CListBox的相关函数来获取选择的结果。

例如,可以使用GetCurSel函数来获取当前选中项的索引值,或使用GetText函数来获取选中项的文本内容。

第五步:处理选中项的操作在有些场景下,可能需要对选中的项进行一些操作,例如删除、移动等。

MFC提供了一系列的函数来方便对List Box控件中的选项进行操作。

vc实现系统托盘图标

vc实现系统托盘图标

vc实现系统托盘图标Windows中,任务栏的右边(托盘)常驻有几个图标,如输入法切换图标、音量控制图标等系统图标,而一些在后台执行实时监控或其他任务的软件如金山词霸、瑞星杀毒软件等也只是在托盘上放一个小小的图标,几乎不占用本来就拥挤不堪的桌面,而且必要时我们还可以通过用鼠标点击图标对其进行菜单操作或激活其主窗口。

如果在我们编制的一些类似的在后台工作的实时监控软件里加入上述功能,无疑会使程序显得很有专业水准。

虽然有不少介绍系统托盘方面编程的文章,但大多是讲述如何在SDK下用Windows API编写的,这样做显然是非常烦琐的,本文以一个SDI(单文档界面)程序为例,讲述了在MFC框架程序中此类程序的实现过程。

[喝小酒的网摘]/a/1117.htm二、程序的设计思路在编制此类程序时,为了不干扰前台程序的运行界面和不显示不必要的窗口,应使其运行时的主窗口不可见。

同时,又要让用户知道该程序正在运行,并且能达到与用户进行交互的目的。

将一个图标显示在任务栏右端系统托盘区中并响应用户的鼠标动作是当前非常流行的方法。

要使程序的主窗口不可见,并且不在任务栏上出现任务按钮,需要分别设置主边框窗口的风格和扩展风格;另外,利用系统函数Shell_NotifyIcon可以将一个图标显示在任务栏的通告区中。

剩下的任务就是如何通过这个图标来响应用户的操作,可以象其他软件如WinAmp 一样通过弹出式菜单来完成同用户的交互。

三、程序的具体实现(一)主界面的隐藏前面已经提过,要求程序运行开始时主窗口不可见,同时也不出现在任务栏中,在SDK下是通过修改入口函数WinMain中的API函数 CreatWindow的参数来实现的,在MFC下已经对其进行了封装,使我们无法直接对WinMain函数内部进行访问与修改,不过可以通过MFC提供的另外一个接口--在主框架类的预创建窗口函数中设定主框架窗口的风格和扩展风格来实现之:BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) {if( !CFrameWnd::PreCreateWindow(cs) )return FALSE;cs.style=WS_POPUP;cs.dwExStyle |=WS_EX_TOOLWINDOW;return TRUE;}其中,CREATESTRUCT结构中的style成员变量设定了主框架窗口的风格,在此设定为WS_POPUP;而dwExStyle成员变量则对主框架窗口的扩展风格做了描述,只需在原有基础上为其再增添一种WS_EX_TOOLWINDOW扩展属性即可使其不会出现在任务条上。

MFC控件使用详细教程

MFC控件使用详细教程

MFC控件使用详细教程MFC(Microsoft Foundation Class)是微软推出的一套用于开发Windows应用程序的类库。

它提供了许多方便易用的控件,可以快速创建用户界面。

本教程将详细介绍如何使用MFC控件来创建Windows应用程序。

第一步:创建一个MFC应用程序项目要使用MFC控件,首先需要创建一个MFC应用程序项目。

在Visual Studio中,选择"文件"->"新建"->"项目",然后选择"MFC应用程序"模板。

在项目设置中,可以选择使用对话框或视图来作为应用程序的主界面。

第二步:设置控件属性第三步:添加控件消息处理程序控件不仅仅可以显示在界面上,还可以响应用户的操作。

例如,当用户点击按钮时,可以执行一些特定的操作。

要实现这个功能,需要添加控件消息处理程序。

可以通过右键单击控件,选择"添加事件处理程序"来添加控件消息处理程序。

在生成事件处理程序的对话框中,可以选择控件的事件(如点击事件、鼠标移动事件等)和消息的处理函数。

在消息处理函数中,可以编写代码来实现特定的功能。

第四步:编写控件的功能代码在控件的消息处理函数中,可以使用MFC类库提供的函数来实现控件的功能。

例如,如果用户点击了按钮控件,可以使用CButton类的GetWindowText函数来获取按钮的文本,并使用CMessageBox类的MessageBox函数来显示一个消息框。

可以使用类似的方式来处理其他控件的事件。

例如,当用户选择了一个列表框中的项时,可以使用CListBox类的GetCurSel函数来获取选择的项的索引,并根据索引来执行特定的操作。

第五步:编译和运行应用程序完成了控件的添加和功能编写后,可以使用Visual Studio的编译和运行功能来编译和运行应用程序。

在编译过程中,会生成可执行文件和相关的依赖文件。

第五部分MFC与对话框编程教学课件

第五部分MFC与对话框编程教学课件
实现这种信息交换操作是由虚函数 CDialog::DoDataExchange 完成的。派生类中该函数的重定义版本将在调用该函数的基类 版本基础上完成派生类对象所需要的特定的数据交换操作。所 幸的是该函数的重定义工作可以借助 ClassWizard 在定义与控件 相关的对话框类数据对象的同时自动完成的。例如在本例中:
第五部分MFC与对话框编程教学课件
5.1 对话框的基本原理
对话框是 Windows 应用程序 GUI 界面的一个重要组成部分, 它的主要功能: ·接收用户的输入(数据和操作、控制命令); ·输出用户关心的状态信息(操作的结果数据和状态)。
在对话框中,可以放置各种必要的控件,所有与用户的交互 操作都是通过这些控件实现的。 在 MFC 中,对话框的基本属性和行为由 CDialog 类描述,该 类的基类为 CWnd,因此,它继承了窗口类的所有属性和功能, 并且增加了交互操作所需要的数据交换特性。放置在对话框中 的各类控件,MFC 都有相应的类来描述,所有控件类的基类都 是 CWnd。 CDialog 类和所有控件类的派生层次结构如下:
1 按钮 :按下该按钮,使按钮变成 ,使得该属性对话框 保持可见(Keep Visible),直到释放该按钮或强制关闭对话框。 属性对话框的内容会随着当前选中对象的改变而变化。
2 按钮 :点击该按钮,将显示当前选中属性页面相关内容的 帮助信息。
3 通用标签
:提供对话框或所有控件的通用属性操作。
对话框的主要通用属性操作:
·OnInitDialog 虚函数是窗口消息 WM_INITDIALOG 的响应函数。 当对话框对象收到此消息时,对话框窗口已创建完成,对话 框窗口句柄已经有效,但对话框还没有被显示,对话框窗口 中的控件也已被创建。这意味着在重新定义的 OnInitDialog 中 可以添加一些影响对话框(包括控件)外观的初始化和对话 框构造函数无法完成的初始化工作。OnInitDialog 对对话框的 作用与 OnCreate 对 CMainFrame 对象的作用类似。本例中,首 先使用 ClassWizard 为 CRegisterDialog 添加对 WM_INITDIALOG 消息映射和处理函数 OnInitDialog(注意,在 Visual C++ .NET 中 是通过重载基类的虚函数 OnInitDialog 的方法完成的),然后 手工在 OnInitDialog 中加入对用于工资收入的列表框控件的初 始化代码如下:

MFC对话框系统托盘详细步骤(精)

MFC对话框系统托盘详细步骤(精)

MFC 中将窗口最小化至系统托盘1. 在对话框类中声明 NOTIFYICONDATA 变量class CCamProjDlg : public CDialog{...NOTIFYICONDATA nid;BOOL isNotify;...}//初始化isNotify = false;2. 在 resource.h 文件中自定义消息#define WM_SHOWTASK 10013. 在对话框类中声明消息相应函数class CCamProjDlg : public CDialog{...afx_msg LRESULT onShowTask(WPARAM wParam,LPARAM lParam; ...}4、在消息映射中添加BEGIN_MESSAGE_MAP(CCamProjDlg, CDialog...ON_MESSAGE(WM_SHOWTASK,onShowTask...END_MESSAGE_MAP(5. 定义消息响应函数LRESULT CCamProjDlg::onShowTask( WPARAM wParam, LPARAM lParam { // wParam接收的是图标的 ID ,而 lParam 接收的是鼠标的行为if( wParam != IDR_MAINFRAMEreturn 1;switch(lParam{case WM_RBUTTONUP: // 右键起来时弹出快捷菜单,这里只有一个 " 关闭 " { LPPOINT lpoint = new tagPOINT;::GetCursorPos(lpoint; // 得到鼠标位置CMenu menu;menu.CreatePopupMenu(; // 声明一个弹出式菜单menu.AppendMenu(MF_STRING,WM_DESTROY,_T("关闭 "; // 增加菜单项 " 关闭 " ,点击则发送消息 WM_DESTROY给主窗口(已隐藏 ,将程序结束。

利用Visual C++实现系统托盘程序

利用Visual C++实现系统托盘程序

利用Visual C++实现系统托盘程序这些程序运行时不显示运行窗口,只在任务栏上显示一个图标,表示程序正在运行,用户可以通过鼠标与应用程序交互,程序开发人员有时也需要编制一些仅在后台运行的类似程序,为了不干扰前台程序的运行界面和不显示不必要的窗口,应使程序运行时的主窗口不可见。

同时将一个图标显示在任务栏右端静态通告区中并响应用户的鼠标动作。

本实例就介绍Visual C++开发这类程序的设计方法,该程序编译运行后,如果双击托盘图标,程序会弹出一个消息列表窗口,只要鼠标在托盘图标上移动或点击(无论是左右键的单击或双击),产生的消息都会显示在这个窗口里;当鼠标光标移到托盘图标上时,在图标附近会显示提示信息;单击右键时弹出上下文菜单,这个菜单中应包含打开属性页的命令或者打开与图标相关的其它窗口的命令,另外,该程序还可以动态的改变托盘的图标。

参照这个例子,相信读者能轻松自如地在自己的程序中应用系统托盘。

一、实现方法为了实现拖盘程序,首先要使程序的主窗口不可见,这点实现起来十分容易,只要调用ShowWindow(SW_HIDE)就可以了,本实例采用的就是这种方法,还有一种思路是通过分别设置主边框窗口的风格和扩展风格来隐藏主框架:在任务条上显示图标是利用系统API函数Shell_NotifyIcon()来将一个图标显示在任务栏的通告区中。

该函数的原型为:该函数的第一个参数dwMessage类型为DWORD,表示要进行的动作,它可以是下面的值之一:NIM_ADD:添加一个图标到任务栏。

NIM_MODIFY:修改状态栏区域的图标。

NIM_DELETE:删除状态栏区域的图标。

NIM_SETFOCUS:将焦点返回到任务栏通知区域。

当完成用户界面操作时,任务栏图标必须用此消息。

例如,如果任务栏图标正显示上下文菜单,但用户按下"ESCAPE"键取消操作,这时就必须用此消息将焦点返回到任务栏通知区域。

MFC菜单和对话框创建过程

MFC菜单和对话框创建过程

一、以创建加法计算器为例,简要说一下实现的步骤:
1,新建工程,选择MFC APPWizard,输入文件名,如下图所示:
选择单文档,点击完成
直接点击确定
2.点击ResourseView,单击MENU,双击IDR_MAINFRAME,创建菜单(要为计算器加上ID),如下图所示:
3.单击ResourseView中的Dialog,右键单击Dialog,选择插入Dialog,设置计算器的对话框:
4,为此对话新建类,选择插入->类,弹出新建类对话框,添加名字,选择基类,如下图:
5,添加控件,左侧为组框,右侧为编辑框,加法是按钮,
6 为编辑框添加变量,右键单击编辑框,点击建立类向导,如下图
7 通过建立类向导为加法按钮添加单击事件并编辑函数,如下图所示:
代码如下:
8 通过建立类向导为计算器添加相应事件,右键单击计算器
9,单击Edit Code,添加头文件:#include "dialog.h"
这时就可以编译运行了。

二、当要在MFC中打开Opencv文件时,如果要用到其他的函数编写的CPP文件时,可以右键点击Sourse file 和Head file添加文件到目录,这时这里面的函数就会自动到globals中。

MFC基于Dialog的托盘程序(Visual C++ 2013)

MFC基于Dialog的托盘程序(Visual C++ 2013)
MFC 基于 Dialog 的托盘程序
MFC 基于 DIALOG 的托盘程序......................................................................................................................................1
BOOL TrayMessage(HWND hWnd, DWORD dwMessage, HICON hIcon, LPCWSTR pszTip);
在执行文件 TrayDialog.cpp 中添加函数定义
BOOL TrayMessage(HWND hWnd, DWORD dwMessage, HICON hIcon, LPCWSTR pszTip) {
一、托盘是什么
所谓的“托盘”,在 Windows 系统界面中,指的就是下面任务条右侧,有系统时间等等的标志的那一部 分。在程序最小化或挂起时,但有不希望占据任务栏的时候,就可以把程序放到托盘区。
二、NOTIFYICODDATA 结构和 Shell_NotifyIcon 函数
1、 NOTIFYICONDATA 结构包含了系统用来处理托盘图标的信息,它包括选择的图标、回调消息、提 示消息和图标对应的窗口等内容。其定义为:
#define WM_TRAY_NOTIFICATION WM_USER+1
打开类向导,选择消息选项卡,打开添加自定义消息对话框,添加自定义消息;
Figure 1 添加自定义消息 这时头文件 TrayDialogDlg.h 中会自动添加声明
afx_msg LRESULT OnTrayNotification(WPARAM wParam, LPARAM lParam);
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MFC中将窗口最小化至系统托盘1.在对话框类中声明NOTIFYICONDATA变量class CCamProjDlg : public CDialog{...NOTIFYICONDATA nid;BOOL isNotify;...}//初始化isNotify = false;2.在resource.h文件中自定义消息#define WM_SHOWTASK 10013.在对话框类中声明消息相应函数class CCamProjDlg : public CDialog{...afx_msg LRESULT onShowTask(WPARAM wParam,LPARAM lParam);...}4、在消息映射中添加BEGIN_MESSAGE_MAP(CCamProjDlg, CDialog)...ON_MESSAGE(WM_SHOWTASK,onShowTask)...END_MESSAGE_MAP()5.定义消息响应函数LRESULT CCamProjDlg::onShowTask( WPARAM wParam, LPARAM lParam ){ // wParam接收的是图标的ID,而lParam接收的是鼠标的行为if( wParam != IDR_MAINFRAME )return 1;switch(lParam){case WM_RBUTTONUP: // 右键起来时弹出快捷菜单,这里只有一个"关闭"{LPPOINT lpoint = new tagPOINT;::GetCursorPos(lpoint); // 得到鼠标位置CMenu menu;menu.CreatePopupMenu(); // 声明一个弹出式菜单menu.AppendMenu(MF_STRING,WM_DESTROY,_T("关闭")); // 增加菜单项"关闭",点击则发送消息WM_DESTROY给主窗口(已隐藏),将程序结束。

menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this); // 确定弹出式菜单的位置SetForegroundWindow();HMENU hmenu = menu.Detach(); // 资源回收menu.DestroyMenu();delete lpoint;}break;case WM_LBUTTONDBLCLK: // 双击左键的处理{this->ShowWindow(SW_SHOW); // 简单的显示主窗口完事儿}break;}return 0;}6.在需要最小化的地方添加代码if ( !isNotify ){nid.cbSize = (DWORD)sizeof(NOTIFYICONDA TA);nid.hWnd = this->m_hWnd;nid.uID = IDR_MAINFRAME;nid.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP|NIF_INFO;nid.uCallbackMessage = WM_SHOWTASK; // 自定义的消息名称,注意:这里的消息是用户自定义消息nid.hIcon = LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));wcscpy_s(nid.szTip,_T("提示标题"));wcscpy_s(nid.szInfo,_T("提示内容"));wcscpy_s(nid.szInfoTitle,_T("提示标题"));nid.dwInfoFlags = NIIF_INFO;nid.uTimeout = 5000;Shell_NotifyIcon(NIM_ADD,&nid); // 在托盘区添加图标}ShowWindow(SW_HIDE); // 隐藏主窗口7.在OnDestroy()函数中添加代码void CCamProjDlg::OnDestroy(){CDialog::OnDestroy();// TODO: Add your message handler code here Shell_NotifyIcon(NIM_DELETE,&nid);}1、在资源中的Icon中导入一个自己喜欢的图标,ID命名为IDR_MAINFRAME,将先前的IDR_MAINFRAME的图标删除掉;2、在自己的Dialog头文件中定义一个变量NOTIFYICONDATA m_nid,关于该结构体的具体信息可以查阅MSDN;3、添加消息响应函数OnInitDialog(),并在该函数中添加以下代码,这样程序一启动,就在托盘中显示出了自己应用程序的图标。

//---------------------------托盘显示---------------------------------//m_nid.cbSize = (DWORD)sizeof(NOTIFYICONDA TA);m_nid.hWnd = this->m_hWnd;m_nid.uID = IDR_MAINFRAME;m_nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP ;m_nid.uCallbackMessage = WM_SHOWTASK; // 自定义的消息名称m_nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));// 信息提示条为"服务器程序",VS2008 UNICODE编码用wcscpy_s()函数strcpy(m_nid.szTip, "服务器程序");Shell_NotifyIcon(NIM_ADD, &m_nid); // 在托盘区添加图标这时候编译,会报WM_SHOWTASK的错,因为该消息要自己定义。

4、在Dialog头文件中声明消息函数原型LRESULT OnShowTask(WPARAM wParam, LPARAM lParam);5、在Dialog源文件中进行消息映射ON_MESSAGE(WM_SHOWTASK,OnShowTask)6、在Dialog源文件中添加自定义的消息响应代码,左键双击弹出应用程序主窗口,右键单击弹出菜单。

LRESULT CServerDlg::OnShowTask(WPARAM wParam, LPARAM lParam){if(wParam != IDR_MAINFRAME)return 1;switch(lParam){case WM_RBUTTONUP: // 右键起来时弹出菜单{LPPOINT lpoint = new tagPOINT;::GetCursorPos(lpoint); // 得到鼠标位置CMenu menu;menu.CreatePopupMenu(); // 声明一个弹出式菜单menu.AppendMenu(MF_STRING, WM_DESTROY, "关闭");menu.TrackPopupMenu(TPM_LEFTALIGN, lpoint->x ,lpoint->y, this);HMENU hmenu = menu.Detach();menu.DestroyMenu();delete lpoint;}break;case WM_LBUTTONDBLCLK: // 双击左键的处理{this->ShowWindow(SW_SHOWNORMAL); // 显示主窗口}break;}return 0;}7、添加OnSize消息响应函数,处理最小化时的操作。

void CServerDlg::OnSize(UINT nType, int cx, int cy){CDialog::OnSize(nType, cx, cy);// TODO: Add your message handler code hereif(nType == SIZE_MINIMIZED){ShowWindow(SW_HIDE); // 当最小化市,隐藏主窗口}}8、添加关闭窗口时的消息响应函数,将托盘中的应用程序图标删除BOOL CServerDlg::DestroyWindow(){// TODO: Add your specialized code here and/or call the base class// 在托盘区删除图标Shell_NotifyIcon(NIM_DELETE, &m_nid);return CDialog::DestroyWindow();}经过以上的步骤,就编写出了一个简单的可以最小化到托盘的程序。

该程序在一启动时,在托盘创立应用程序的图标,最小化程序时隐藏主窗口,双击托盘区的图标时,显示主窗口,右键点击托盘区窗口时,弹出菜单进行相应的操作。

相关文档
最新文档