MFC 对话框系统托盘详细步骤
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实现系统托盘图标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(Microsoft Foundation Class)是微软推出的一套用于开发Windows应用程序的类库。
它提供了许多方便易用的控件,可以快速创建用户界面。
本教程将详细介绍如何使用MFC控件来创建Windows应用程序。
第一步:创建一个MFC应用程序项目要使用MFC控件,首先需要创建一个MFC应用程序项目。
在Visual Studio中,选择"文件"->"新建"->"项目",然后选择"MFC应用程序"模板。
在项目设置中,可以选择使用对话框或视图来作为应用程序的主界面。
第二步:设置控件属性第三步:添加控件消息处理程序控件不仅仅可以显示在界面上,还可以响应用户的操作。
例如,当用户点击按钮时,可以执行一些特定的操作。
要实现这个功能,需要添加控件消息处理程序。
可以通过右键单击控件,选择"添加事件处理程序"来添加控件消息处理程序。
在生成事件处理程序的对话框中,可以选择控件的事件(如点击事件、鼠标移动事件等)和消息的处理函数。
在消息处理函数中,可以编写代码来实现特定的功能。
第四步:编写控件的功能代码在控件的消息处理函数中,可以使用MFC类库提供的函数来实现控件的功能。
例如,如果用户点击了按钮控件,可以使用CButton类的GetWindowText函数来获取按钮的文本,并使用CMessageBox类的MessageBox函数来显示一个消息框。
可以使用类似的方式来处理其他控件的事件。
例如,当用户选择了一个列表框中的项时,可以使用CListBox类的GetCurSel函数来获取选择的项的索引,并根据索引来执行特定的操作。
第五步:编译和运行应用程序完成了控件的添加和功能编写后,可以使用Visual Studio的编译和运行功能来编译和运行应用程序。
在编译过程中,会生成可执行文件和相关的依赖文件。
第五部分MFC与对话框编程教学课件
第五部分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 中将窗口最小化至系统托盘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++开发这类程序的设计方法,该程序编译运行后,如果双击托盘图标,程序会弹出一个消息列表窗口,只要鼠标在托盘图标上移动或点击(无论是左右键的单击或双击),产生的消息都会显示在这个窗口里;当鼠标光标移到托盘图标上时,在图标附近会显示提示信息;单击右键时弹出上下文菜单,这个菜单中应包含打开属性页的命令或者打开与图标相关的其它窗口的命令,另外,该程序还可以动态的改变托盘的图标。
参照这个例子,相信读者能轻松自如地在自己的程序中应用系统托盘。
一、实现方法为了实现拖盘程序,首先要使程序的主窗口不可见,这点实现起来十分容易,只要调用ShowWindow(SW_HIDE)就可以了,本实例采用的就是这种方法,还有一种思路是通过分别设置主边框窗口的风格和扩展风格来隐藏主框架:在任务条上显示图标是利用系统API函数Shell_NotifyIcon()来将一个图标显示在任务栏的通告区中。
该函数的原型为:该函数的第一个参数dwMessage类型为DWORD,表示要进行的动作,它可以是下面的值之一:NIM_ADD:添加一个图标到任务栏。
NIM_MODIFY:修改状态栏区域的图标。
NIM_DELETE:删除状态栏区域的图标。
NIM_SETFOCUS:将焦点返回到任务栏通知区域。
当完成用户界面操作时,任务栏图标必须用此消息。
例如,如果任务栏图标正显示上下文菜单,但用户按下"ESCAPE"键取消操作,这时就必须用此消息将焦点返回到任务栏通知区域。
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 的托盘程序......................................................................................................................................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);
MFC实现对话框编辑控件上拖拽文件
MFC实现对话框编辑控件上拖拽⽂件本⽂实例为⼤家分享了MFC实现对话框编辑控件上拖拽⽂件的具体代码,供⼤家参考,具体内容如下步骤1、重载CEdit类2、添加编辑框控件⾸先,重载CEdit类,定义⼀个派⽣类CDragEdit类,并重载它的WM_CREATE⽅法,在其中添加DragAcceptFile(TRUE); ⽅法。
// CDragEdit.h#pragma onceclass CDragEdit : public CEdit{DECLARE_DYNAMIC(CDragEdit)public:CDragEdit();virtual ~CDragEdit();protected:DECLARE_MESSAGE_MAP()public:afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);afx_msg void OnDropFiles(HDROP hDropInfo);};然后,利⽤类向导为CDragEdit类添加WM_DROPFILE消息相应函数;//CDragEdit.cppint CDragEdit::OnCreate(LPCREATESTRUCT lpCreateStruct){if (CEdit::OnCreate(lpCreateStruct) == -1)return -1;// TODO: 在此添加您专⽤的创建代码DragAcceptFiles(TRUE);return 0;}void CDragEdit::OnDropFiles(HDROP hDropInfo){UINT count;TCHAR filePath[MAX_PATH] = { 0 };count = DragQueryFile(hDropInfo, -1, NULL, 0);if (1 == count){DragQueryFile(hDropInfo, 0, filePath, sizeof(filePath));this->SetWindowTextW(filePath);UpdateData(FALSE);DragFinish(hDropInfo); //拖放成功后,释放内存}else{CString szFilePath;for (UINT i = 0; i < count; i++){int pahtLen = DragQueryFile(hDropInfo, i, filePath, sizeof(filePath));szFilePath = szFilePath + filePath + _T("\r\n");}this->SetWindowTextW(szFilePath);UpdateData(FALSE);DragFinish(hDropInfo);}//MFCDlg.h#program once#include "CDragEdit.h"class CMFDlg : public CDialogEx{……………………public:CDragEdit m_DragEdit;}最后,设置⽂本框控件属性[Accept Files]、[multiline]值为True.以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
MFC 教程 第11章 对话框
}
6
11.1.2 对话框类CDialog
MFC提供了一系列对话框类,并实现了对话 框消息响应和处理机制。CDialog类是对话框类中 最重要的类,我们在程序中创建的对话框类一般都 是CDialog类的派生类。CDialog类还是其它所有对 话框类的基类,其派生关系如下所示: CObject CCmdTarget CWnd CDialog
26
例 如 , 当 添 加 一 个 UINT 型 的 成 员 变 量 m_nInput时指定它的最小值和最大值分别为0和100, 则 ClassWizard 类 向 导 将 在 成 员 函 数 DoDataExchange()中添加以下DDV函数的调用语 句: DDV_MinMaxUInt(pDX, m_nInput, 0, 100);
10
函数 OnOK()、 OnCancel()与DoModal()的关系:
对话框中一般都有OK和Cancel按钮,单击 OK按钮时调用CDialog::OnOK()函数,单击Cancel 按钮时调用CDialog::OnCancel()函数。OnOK()函 数和OnCancal()函数都将结束DoModal()函数调用, 但 令 DoModal() 返 回 不 同 的 值 。 OnOK() 函 数 令 DoModal() 返 回 IDOK,OnCancel() 函 数 令 DoModal() 返 回 IDCANCAL。 用 户 可 以 根 据 DoModal()的返回值做出不同的选择。如: if (myDlg.DoModal() = = IDOK )
14
创建对话框类:
如果按Ctrl+W键或在对话框资源的非控件区 域双击鼠标,ClassWizard类向导将发现已添加了 一个对话框模板资源,却没有设计其对应的类,因 此将弹出Adding a Class对话框,询问用户是否需 要利用该对话框资源创建一个对话框类。
C#托盘应用详解
C#托盘应用详解一.托盘程序的主要步骤及解决方法:为什么说用Visual C#可以十分方便的做一个托盘程序,主要的原因是在.Net框架的软件开发包( .Net FrameWork SDK )中的WinForm组件中定义了一个专门用来开发托盘程序的组件--NotifyIcon组件。
下面就来介绍一下这个组件的具体用法和程序设计中的主要的技巧。
(1).如何在程序运行后隐藏窗体:我们知道托盘程序运行后是无法看见主窗体的,他只会显示在工具栏上。
在用Visual C#设计此类程序的时候,可以用二种方法使得程序运行后不显示主窗体。
其中一种方法是重载主窗体中的OnActivated( )事件,OnActivated( )事件是在窗体激活的时候才触发的。
通过重载此事件可以达到隐藏主窗体的目的。
具体程序代码如下:protected override void OnActivated ( EventArgs e ){this.Hide ( ) ;}另外一种方法是在初始化主窗体的时候完成的,通过设定主窗体的属性来达到不显示的目的。
具体的程序代码如下:this.MaximizeBox = false ;this.MinimizeBox = false ;this.WindowState = System.Windows.Forms.FormWindowState.Minimized ;在本文介绍的程序中,使用了第二种方法。
(2).如何为托盘程序设定显示图标:在NotifyIcon组件中有一个属性icon就是来设定托盘图标的,由于Visual C#是一个完全的OOP (面向对象)语言,在Visual C#中任何东西都可以作为对象来处理。
当然对应一个icon来说,也可以用对象的方法来处理他。
我们通过下列语句来得到一个icon对象:private Icon mNetTrayIcon = new Icon ( "Tray.ico" ) ;请注意:在编译好的程序中,必须要在同一个目录中有一个Tray.ico图标文件,否则程序运行时候会出错的。
mfc_最小化到托盘
mfc中将软件最小化到托盘一、托盘简介所谓的“托盘”,在Windows系统界面中,指的就是下面任务条右侧,有系统时间等等的标志的那一部分。
在程序最小化或挂起时,但有不希望占据任务栏的时候,就可以把程序放到托盘区。
其实,托盘区的编程很简单,下面简要阐述一下子喽^_^二、托盘编程相关函数其实呢,把程序放到托盘上的本质就是先在托盘区绘制一个图标,然后把程序隐藏不见,再对托盘的图标进行消息处理,就可以了。
绘制图标以及确定图标所传送消息的函数只有一个,那就是——————WINSHELLAPI BOOL WINAPI Shell_NotifyIcon(DWORD dwMessage,PNOTIFYICONDATA pnid);这个函数呢,负责向系统传递消息,以添加、修改或删除托盘区的图标。
她的返回值呢,是个布尔类型的。
就是说,如果返回0,那就是成仁啦,非0才成功。
参数dwMessage 是表示这个函数的应用功能是哪一方面,是添加、删除,还是修改图标。
如果是添加,则它的值为NIM_ADD;删除则是NIM_DELETE;而修改是NIM_MODIFY。
参数pnid就是具体的和程序在托盘区的图标有关系的结构了。
它的定义如下:typedef struct _NOTIFYICONDATA {DWORD cbSize;HWND hWnd;UINT uID;UINT uFlags;UINT uCallbackMessage;HICON hIcon;char szTip[64];} NOTIFYICONDATA, *PNOTIFYICONDATA;下面就对该结构各个参数进行刨析:cbSize : 结构的长度,用“位”来做单位。
一般在程序中,我们用(DWORD)sizeof(NOTIFYICONDATA) 给它赋值。
HWnd : 一个句柄,如果对托盘中的图标进行操作,相应的消息就传给这个句柄所代表的窗口。
自然了,大多数情况下是this->m_hWnd喽。
MFC 对话框教程
ID 框:修改或选择对话框的标识符名称 Caption 框:输入对话框的标题名称,中英文均可。 Font 按钮:单击此按钮可选择字体的种类(如宋体)及尺寸(如 9 号) Xpos/Ypos:对话框左上角在父窗口中的 X,Y 坐标都为 0 时表示居中 Menu 框:默认值为无,当对话框需要选单时输入或选择指定的选单资源 Class name:默认值为无,它提供 C/C++语言编程时所需要的对话框类名,对 MFC 类库的资源文件来说,该项不被激活 三、控件的创建和使用方法(197 页) 控件是在系统内部定义的能够完成特定功能的控制程序单元。在应用程序中使用控件 不仅简化了编程,还能完成常用的各种功能。为了更好地发挥控件的作用,用户还必须理 解和掌握控件的属性、消息以及创建和使用方法。 注:控件工具栏及各按钮含义: 1、控件的选择 2、静态文本 3、组框 4、复选框 5、组合框 6、水平滚动条 7、旋转按钮 8、滑动条 9、列表视图 10、标签 11、复合编辑 12、月历 13、用户定制工具 14、静态图片 15、编辑框 16、按钮 17、单选框 18、列表框 19、垂直滚动条 20、进展条 21、热键 22、树形视图 23、动画 24、日期选择 25、IP 地址 26、组合框的扩展(从左边往下数,再从右边往下数)
(1)打开上个项目,在 CMyDlg 类的头文件 MyDlg.h 里添加一个按钮类 CButton 指针变量: (public:里) CButton *m_btnWnd; (2)按 Ctrl+W 或 ViewClassWizard 打开 MFClassWizard 对话框,并切换到 Message Maps 页面,在 Object IDs 列表中选定点黑 CMyDlg 项,并在 Message 列表中找到 WM_INITDIALOG 消息点黑AddFunctionEditCode (3)添加代码: BOOL CMyDlg::OnInitDialog() { ----m_btnWnd=new CButton();//构造按钮控件 //下面“”按钮上的字,创建子窗口|窗口最初是可见的|创建的是按键按钮 m_btnWnd->Create( “你好 ”,WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, CRect(20,20,120,60),this,201);//创建 CFont *font=this->GetFont();//获取对话框的字体 m_btnWnd->SetFont(font);//设置控件字体 return TRUE;//(程序原有的) } 代码中,Create 用来创建一个按钮控件,该函数的第一个参数用来指定该按钮的标题, 第二个参数用来指定控件的风格,第三个参数用来指定它在父窗口中的位置和大小,第四 个参数用来指定父窗口指针,最后一个参数是指定该控件的标识值。 WS_CHILD 表示按钮是作为对话框的一个子窗口来创建的。 WS_VISIBLE 是使控件可见。 BS_PUSHBUTTON 表示创建的是按键按钮。 (4)编译并运行 2、控件的数据交换和数据效验(数据成员) (198 页) 使用 ClassWizard 可以很容易地定义一个控件的成员变量及其数据范围。 例如: 上面的 CMyDlg 类的按钮控件 IDC_BUTTON1 添加并使用其成员变量 m_MyBtn,步骤如下: (1)打开上例项目,ViewClassWizardMember Variables选定 Class name 中为 CMyDlg,然后在 Control IDs 列表中点黑 IDC_BUTTON1AddVariable (或双击鼠标左键) ,弹出 Add Member Variable 对话框,如书 198 页图 5.17 写好数据成员名:m_MyBtn 下面 Category 和 Variables type 里的不动 OK 见表上已建成(如:书 199 页图 5.18) 下面是建成员变量的三个对话框图:
mfc对话框使用
mfc对话框使用MFC对话框使用指南MFC (Microsoft Foundation Classes) 是微软开发的一套类库,用于快速实现 Windows 程序的开发。
其中,对话框是 Windows 程序中常用的图形用户界面,本文将介绍 MFC 对话框的使用方法。
一、创建对话框1.在 Visual Studio 中选择 File ➡️ New ➡️ MFC Application,选择对话框类型,点击 Finish。
2.在弹出的对话框属性编辑器中,可以更改对话框的标题、大小、背景颜色等属性。
3.在对话框上添加控件,如按钮、文本框、列表框等。
二、控件的属性设置1.选中控件,右键点击 Properties,弹出控件属性编辑器。
2.在格式中设置控件的字体、颜色、大小等。
3.在常规中设置控件的 ID 号,和提示信息等。
4.在事件中设置控件的响应事件,如单击事件、双击事件等。
三、控件的事件响应1.打开类向导,选择类视图中的一个控件,添加消息映射。
2.在消息映射中设置事件响应函数。
3.在事件响应函数中实现相应的逻辑功能。
四、对话框操作1.打开类向导,选择类视图中的对话框。
2.添加成员变量,获取对话框上的控件对象。
3.在对话框中添加响应函数,如确定按钮、取消按钮等。
4.在响应函数中实现对话框的操作功能,如关闭对话框、保存数据等。
五、运行程序1.生成程序,运行程序。
2.在程序中测试对话框、控件的交互功能。
以上的 MFC 对话框使用指南仅作为基础的入门介绍,通过掌握以上的操作步骤和方法,可以快速地了解和使用 MFC 对话框的功能,并应用到自己的开发项目当中。
同时,对于技术提升有兴趣的读者,还可以进一步学习如何使用代码实现更多的对话框功能和复杂的交互逻辑。
修改MFC应用程序的图标、光标、托盘图标、窗口风格的方法
其中,hIcon用来指定要删除的图标句柄。 3. 图标的显示 图标的显示一般有两种方法:一是通过静态图片控件来显示,或在其他(如按钮) 控件设置显示;二是通过函数CDC::DrawIcon用来将一个图标绘制在指定设备的位置处 (这一方法以后再讨论)。 4. 图标示例 下面来看一个示例,如图5.5所示,单击[开始]按钮,3个图标就会每隔100ms随机显示, 且此时[开始]按钮变成[停止]。单击[停止]按钮,图标停止更新,按钮的名称变成“开 始”,如果3个图标的图案都是一样的,则弹出消息对话框,显示“恭喜你!”,否则 显示“失败!”。
5.2图标
(4)在CMainFrame::OnCreate函数的最后添加计时器设置代码:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; ... SetTimer(1, 500, NULL); return 0; }
其中,lpszResourceName和nIDResource分别表示图标资源的字符串名和标识。函 数返回的是一个图标句柄。 如果不想使用新的图标资源,也可使用系统中预定义好的标准图标,这时需调用 CWinApp::LoadStandardIcon 函数,其原型如下:
HICON LoadStandardIcon( LPCTSTR lpszIconName ) const;
图5.6 添加并设计的图标
5.2图标
(4)在ResourceView页面中,双击“Dialog”下的IDD_EX_RANDICON_DIALOG, 打开对话框资源模板。将对话框的标题设为“图标使用”。删除“TODO: 在这里设置对 话控制。”静态文本控件和[取消]按钮,将[确定]按钮标题改为“退出”。 (5)打开对话框网格,参照图5.5所示,调整对话框大小,分别依次添加3个静态图 片控件,ID号分别设置为IDC_STATIC_1、IDC_STATIC_2和IDC_STATIC_3,类型选择 为“图标”,图像依次选择为IDI_ICON1、IDI_ICON2和IDI_ICON3,在样式属性中,分 别选中“图像居中”。 (6)添加一个按钮控件,ID号为IDC_BUTTON_START,标题为“开始”。 (7)按Ctrl+W键,打开MFC ClassWizard的Member Variables页面,依次为 IDC_STATIC_1、IDC_STATIC_2和IDC_STATIC_3设置CStatic类的Control变量 m_wndIcon1、m_wndIcon2和m_wndIcon3。 (8)切换到Messsage Maps页面,为按钮IDC_BUTTON_START添加 BN_CLICKED消息映射,保留默认的映射函数名,添加下列代码: (9)再次打开MFC ClassWizard的Messsage Maps页面,为CEx_RandIconDlg类 添加WM_TIMER消息映射,并在映射函数中添加下列代码: (10)编译运行并测试。
MFC教程 对话框和对话框类CDialog
12. 对话框和对话框类CDialog对话框经常被使用,因为对话框可以从模板创建,而对话框模板是可以使用资源编辑器方便地进行编辑的。
1. 模式和无模式对话框对话框分两种类型,模式对话框和无模式对话框。
1. 模式对话框一个模式对话框是一个有系统菜单、标题栏、边线等的弹出式窗口。
在创建对话框时指定WS_POPUP, WS_SYSMENU, WS_CAPTION和DS_MODALFRAME风格。
即使没有指定WS_VISIBLE风格,模式对话框也会被显示。
创建对话框窗口时,将发送WM_INITDIALOG消息(如果指定对话框的DS_SETFONT风格,还有WM_SETFONT消息)给对话框过程。
对话框过程(Dialog box procedure)不是对话框窗口的窗口过程(Windowprocedure)。
在Win32里,对话框的窗口过程由Windows系统提供,用户在创建对话框窗口时提供一个对话框过程由窗口过程调用。
对话框窗口被创建之后,Windows使得它成为一个激活的窗口,它保持激活直到对话框过程调用::EndDialog函数结束对话框的运行或者Windows激活另一个应用程序为止,在激活时,用户或者应用程序不可以激活它的所属窗口(Owner window)。
从某个窗口创建一个模式对话框时,Windows自动地禁止使用(Disable)这个窗口和它的所有子窗口,直到该模式对话框被关闭和销毁。
虽然对话框过程可以Enable所属窗口,但是这样做就失去了模式对话框的作用,所以不鼓励这样做。
Windows创建模式对话框时,给当前捕获鼠标输入的窗口(如果有的话)发送消息WM_CANCLEMODE。
收到该消息后,应用程序应该终止鼠标捕获(Release the mouse capture)以便于用户能把鼠标移到模式对话框;否则由于Owner窗口被禁止,程序将失去鼠标输入。
为了处理模式对话框的消息,Windows开始对话框自身的消息循环,暂时控制整个应用程序的消息队列。
MFC之托盘
在VC++中,想实现最小化MFC程序的时候,最小化到系统托盘,需要调用NOTIFYICONDATA类下面我们就来讲解一下如何简单实现一个系统托盘我们以对话框程序为列第一步:在Dlg类中//定义一个NOTIFYICONDATA类的成员变量,用来设置托盘NOTIFYICONDATA NotifyIcon;第二步:声明一个消息响应函数afx_msg void OnNotifyIcon(WPARAM wParam,LPARAM IParam); 上面那条代码也放在Dlg的头文件中第三步:定义一个自定义消息#define WM_NC WM_USER+1上面那条代码也在Dlg的头文件中声明注册消息ON_MESSAGE(WM_NC,OnNotifyIcon)上面那条代码在Dlg类中第四步:在Dlg头文件中添加一个函数用来响应点击最小化按钮void changeMini();并在Dlg类中实现这个函数//响应最小化消息void CChangeScreenDlg::changeMini(){ShowWindow(SW_HIDE);NotifyIcon.cbSize=sizeof(NOTIFYICONDATA);NotifyIcon.hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);NotifyIcon.hWnd=m_hWnd;lstrcpy(NotifyIcon.szTip,"MediaCraft EMMG");NotifyIcon.uCallbackMessage=WM_NC;NotifyIcon.uFlags=NIF_ICON | NIF_MESSAGE | NIF_TIP;Shell_NotifyIcon(NIM_ADD,&NotifyIcon);}第五步:截获最小化事件在Dlg类中找到OnSysCommand函数修改代码如下if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}//拦截最小化事件if(nID==SC_MINIMIZE){//ToTray();//用我们自己的消息响应最小化事件changeMini();}else{CDialog::OnSysCommand(nID, lParam);}第六步:响应托盘的鼠标事件也是实现我们第二部声明的消息响应函数void CChangeScreenDlg::OnNotifyIcon(WPARAM wParam,LPARAM IParam){if ((IParam == WM_LBUTTONDOWN) || (IParam == WM_RBUTTONDOWN)){ModifyStyleEx(0,WS_EX_TOPMOST);ShowWindow(SW_SHOW);}}最后一步:在类的析构函数中记得销毁托盘图标对象Shell_NotifyIcon(NIM_DELETE, &NotifyIcon);傻朋提示:以上NOTIFYICONDATA类的一些具体参数,请参阅MSDN一、NOTIFYICONDATA结构NOTIFYICONDATA结构包含了系统用来处理托盘图标的信息,它包括选择的图标、回调消息、提示消息、图标对应的窗口等内容。
C++托盘
C++托盘背景需求:1、MFC 对话框最小化时,只显示系统右下角托盘图标。
2、双击托盘,对话框还原。
3、右键点击托盘,弹出“关闭”菜单,可关闭对话框。
实现步骤:1、创建MFC 对话框程序(本例程序名为TaskbarIcon ),属性中设置“MinimizeBox”为true 。
2、定义自定义消息宏。
1 #define NOTIFY_SHOW WM_USER+25003、OnSysCommand (系统消息响应函数)添加对话框最小化执行代码。
01 void CTaskbarIconDlg::OnSysCommand(UINT nID, LPARAM lParam) 02 {03 if (SC_MINIMIZE == nID)04 {05 NOTIFYICONDATA nid;06 nid.cbSize = (DWORD)sizeof(NOTIFYICONDATA);07 nid.hWnd = this->m_hWnd;08 nid.uID = IDR_MAINFRAME;09 nid.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP ; 10 nid.uCallbackMessage = NOTIFY_SHOW;//自定义的消息名称11 nid.hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME));12 wcscpy_s(nid.szTip, _T("图标测试"));//信息提示条1314 Shell_NotifyIcon(NIM_ADD,&nid);//在托盘区添加图标15 ShowWindow(SW_HIDE);//隐藏主窗口16 return;17 }1819 //...系统自带代码20 }4、托盘自定义消息响应01 BEGIN_MESSAGE_MAP(CTaskbarIconDlg, CDialog)02 //...省略其他消息映射0304 ON_MESSAGE(NOTIFY_SHOW, OnTrayIcon)05 //}}AFX_MSG_MAP06 END_MESSAGE_MAP()0708 afx_msg LRESULT OnTrayIcon(WPARAM wParam, LPARAM lParam); 0910 LRESULT CTaskbarIconDlg::OnTrayIcon(WPARAM wParam, LPARAM lParam) 11 {12 if (wParam != IDR_MAINFRAME)13 {14 return 1;15 }1617 switch(lParam)18 {19 case WM_RBUTTONUP:20 {21 //右键起来时弹出快捷菜单,这里只有一个“关闭” 2223 //声明一个弹出式菜单24 //增加菜单项“关闭”,点击则发送消息WM_CLOSE 给主窗口(已25 //隐藏),将程序结束。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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();}经过以上的步骤,就编写出了一个简单的可以最小化到托盘的程序。
该程序在一启动时,在托盘创立应用程序的图标,最小化程序时隐藏主窗口,双击托盘区的图标时,显示主窗口,右键点击托盘区窗口时,弹出菜单进行相应的操作。