MFC动态生成控件

合集下载

使用MFC开发ActiveX(ocx)控件

使用MFC开发ActiveX(ocx)控件

作者: 中国电波传播研究所青岛分所郎锐时间: 2004-03-09出处: yesky一、前言二、建立工程框架三、属性、方法以及事件的添加四、实现属性表五、在包容程序中使用ActiveX控件六、小结前言ActiveX控件是一种实现了一系列特定接口而使其在使用和外观上更象一个控件的COM组件。

ActiveX控件这种技术涉及到了几乎所有的COM和OLE的技术精华,如可链接对象、统一数据传输、OLE文档、属性页、永久存储以及OLE 自动化等。

ActiveX控件作为基本的界面单元,必须拥有自己的属性和方法以适合不同特点的程序和向包容器程序提供功能服务,其属性和方法均由自动化服务的IDispatch接口来支持。

除了属性和方法外,ActiveX控件还具有区别于自动化服务的一种特性--事件。

事件指的是从控件发送给其包容程序的一种通知。

与窗口控件通过发送消息通知其拥有者类似,ActiveX控件是通过触发事件来通知其包容器的。

事件的触发通常是通过控件包容器提供的 IDispatch接口来调用自动化对象的方法来实现的。

在设计ActiveX控件时就应当考虑控件可能会发生哪些事件以及包容器程序将会对其中的哪些事件感兴趣并将这些事件包含进来。

与自动化服务不同,ActiveX控件的方法、属性和事件均有自定义(custom)和库存(stock)两种不同的类型。

自定义的方法和属性也就是是普通的自动化方法和属性,自定义事件则是自己选取名字和Dispatch ID的事件。

而所谓的库存方法、属性和事件则是使用了ActiveX控件规定了名字和Dispatch ID的"标准"方法、属性和事件。

ActiveX控件可以使COM组件从外观和使用上能与普通的窗口控件一样,而且还提供了类似于设置Windows标准控件属性的属性页,使其能够在包容器程序的设计阶段对ActiveX控件的属性进行可视化设置。

ActiveX控件提供的这些功能使得对其的使用将是非常方便的。

mfc listcontrol 控件使用总结整理

mfc listcontrol 控件使用总结整理

mfc listcontrol 控件使用总结整理MFC List Control控件是MFC框架中的一个常用控件,用于显示和管理列表数据。

以下是对MFC List Control控件使用的一些总结整理:1. 创建控件:通过在对话框资源中添加List Control控件进行创建,或者在代码中使用Create()函数动态创建。

2. 设置风格:可以通过代码设置控件的风格,如设置单选模式、多选模式、网格线等。

3. 设置列头:通过调用InsertColumn()函数来设置控件的列头,可以设置列标题、宽度等属性。

4. 添加项:可以通过调用InsertItem()函数来添加行(项),可以设置每个项的数据、图标等属性。

5. 设置子项:通过调用SetItemText()函数来设置每个项的子项的文本内容。

6. 获取选定项:可以通过调用GetNextItem()函数来获取当前选中项的索引,然后可以通过GetItemText()函数来获取选中项的内容。

7. 删除项:可以通过调用DeleteItem()函数来删除指定的项。

8. 排序:可以通过调用SortItems()函数来对List Control控件的内容进行排序。

9. 自定义绘制:可以通过重写OnCustomDraw()函数来实现对List Control控件的自定义绘制,如改变项的背景颜色、文本颜色等。

10. 列表视图:可以通过设置控件的样式为列表视图,来实现更复杂的数据展示和交互功能,如拖拽、排序、编辑等。

需要注意的是,MFC List Control控件的使用需要注意内存释放和资源管理,例如在动态创建控件时需要手动调用DeleteObject()函数来释放资源。

另外,对于大量数据的操作,可以考虑使用虚拟列表实现数据的延迟加载,以提高性能和响应速度。

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中好用的自定义控件使用方式

MFC中自定义控件的使用方式如下:1. 创建一个新的类,继承自CWnd或CButton等需要扩展的控件类。

2. 重载控件类的消息处理函数,如OnPaint、OnLButtonDown等。

3. 在需要使用自定义控件的地方,实例化该控件类并调用其Create成员函数进行创建。

4. 将创建好的控件添加到窗口或其他容器中。

以下是一个简单的自定义控件示例:```cpp// MyCustomControl.h#pragma onceclass CMyCustomControl : public CButton{public:CMyCustomControl();virtual ~CMyCustomControl();protected:afx_msg void OnPaint();DECLARE_MESSAGE_MAP()};``````cpp// MyCustomControl.cpp#include "MyCustomControl.h"CMyCustomControl::CMyCustomControl(){}CMyCustomControl::~CMyCustomControl(){}BEGIN_MESSAGE_MAP(CMyCustomControl, CButton)ON_WM_PAINT()END_MESSAGE_MAP()void CMyCustomControl::OnPaint(){CPaintDC dc(this); // device context for paintingCRect rect;GetClientRect(&rect); // get client area rectangleCDC memDC; // create memory device contextmemDC.CreateCompatibleDC(&dc); // create compatible DC with paint DCCBitmap bitmap; // create bitmap objectbitmap.CreateCompatibleBitmap(&dc, rect.Width(), rect.Height()); // create bitmap with client area sizeCBitmap* pOldBitmap = memDC.SelectObject(&bitmap); // select bitmap into memory DC for drawing// draw your custom content here using memDC and bitmap objects// ...memDC.SelectObject(pOldBitmap); // restore old bitmap object from memory DCbitmap.DeleteObject(); // delete bitmap object when done with itmemDC.DeleteDC(); // delete memory DC when done with it}```在需要使用自定义控件的地方:```cpp// MainFrm.cpp or other relevant file#include "MyCustomControl.h"// ...CMyCustomControl* pCtrl = new CMyCustomControl(); // create custom control instancepCtrl->Create(WS_CHILD | WS_VISIBLE, CRect(10, 10, 100, 50), this, IDC_MYCUSTOMCTRL); // create custom control and add to parent window or container (e.g., CFrameWnd) as child control with ID IDC_MYCUSTOMCTRL```。

MFC编程总结各种控件使用说明

MFC编程总结各种控件使用说明

MFC各种控件的使用说明把整数显示为时间格式的方法:Int minute=5; int sec=5;CString strTime;strTime.Format("%02d:%02d",minute,sec);GetDlgItem(IDC_STAT_DIS)->SetWindowText(strTime);定时器的使用方法:在函数BOOL CDingshiqiDlg::OnInitDialog(){SetTimer(1,1000,NULL);}添加语句SetTimer(1,1000,NULL);定时器1秒钟中断一次.然后添加消息WM_TIMER对应的消息函数:void CDingshiqiDlg::OnTimer(UINT nIDEvent){}播放系统声音的方法:在头文件添加这两句#include<mmsystem.h>#pragma comment (lib,"winmm.lib")然后调用函数: PlaySound("SystemStart",NULL,SND_ALIAS|SND_ASYNC);VC++6.0控件工具箱:2 图形控件(picture):常用于显示位图(Bitmap)和图标(Icon)3 静态文本(Static Text):MFC提供了CStatic类支持静态控件。

(1)更改该控件上字体的方法是:该控件的ID为IDC_STATIC1,IDC_STATIC2.CFont * f1;f1 = new CFont;f1 -> CreateFont( 25 , // nHeight15, // nWidth0 , // nEscapement0 , // nOrientationFW_BOLD, // nWeightFALSE , // TRUEbItalicFALSE, // bUnderline0 , // cStrikeOutDEFAULT_CHARSET, //ANSI_CHARSET nCharSetOUT_DEFAULT_PRECIS, // nOutPrecisionCLIP_DEFAULT_PRECIS, // nClipPrecisionDEFAULT_QUALITY, // nQualityDEFAULT_PITCH | FF_SWISS, // nPitchAndFamily_T( " 宋体" )); // lpszFacGetDlgItem(IDC_STATIC1)-> SetFont(f1);GetDlgItem(IDC_STATIC2)-> SetFont(f1);另一种改变字体大小的方法: 在函数外定义CStatic m_static;CFont font;m_static.SubclassDlgItem(IDC_STAT_DIS,this);LOGFONT log;GetObject(::GetStockObject(DEFAULT_GUI_FONT),sizeof(log),&log);log.lfHeight=300; //改log.lfWidth=120; //改log.lfCharSet=GB2312_CHARSET;lstrcpy(log.lfFaceName, _T("宋体"));font.CreateFontIndirect(&log);m_static.SetFont(&font);(2) 把整数显示在该控件的方法:IDC_STAT_DIS为控件IDInt minute=5,sec=5;CString strTime;strTime.Format("%02d:%02d",minute,sec);GetDlgItem(IDC_STAT_DIS)->SetWindowText(strTime);另外一种显示的方法:CStatic*pst=(CStatic *)GetDlgItem(IDC_STAT_DIS);pst->SetWindowText("00:00");4 编辑框(Edit Box):MFC提供了CEdit类支持编辑框控件。

mfc中tabcontrol控件用法

mfc中tabcontrol控件用法

mfc中tabcontrol控件用法TabControl控件是MFC中常用的窗口控件之一,用于创建多个选项卡,并在每个选项卡上显示不同的内容。

下面将介绍一下MFC中TabControl控件的基本用法。

首先,在MFC应用程序的对话框或窗口中添加一个TabControl控件。

可以通过在资源编辑器中拖放TabControl控件,或动态创建TabControl控件。

接下来,需要在代码中对TabControl控件进行初始化。

可以通过以下步骤来完成:1. 首先,定义一个成员变量来保存TabControl控件的指针,例如:```CTabCtrl m_tabCtrl;```2. 在对话框或窗口的OnInitDialog()函数中,将成员变量与TabControl控件关联起来,例如:```m_tabCtrl.SubclassDlgItem(IDC_TAB_CONTROL, this);```其中IDC_TAB_CONTROL是TabControl控件的ID,this表示当前对话框或窗口。

3. 接下来,可以设置TabControl控件的属性,例如添加选项卡、设置选项卡的文本等。

通过以下代码示例来添加两个选项卡:```m_tabCtrl.InsertItem(0, _T("Tab 1"));m_tabCtrl.InsertItem(1, _T("Tab 2"));```4. 接下来,可以在每个选项卡上添加子控件,以显示不同的内容。

可以使用对话框或窗口的Create()函数动态创建子控件,并将其与选项卡关联起来。

例如,在第一个选项卡上添加一个编辑框:```CWnd* pTabWnd = new CWnd;pTabWnd->Create(NULL, _T(""), WS_CHILD | WS_VISIBLE, CRect(0, 0, 200, 200), &m_tabCtrl, 0);```其中,CWnd是子控件的基类,编辑框是其中的一种。

MFC控件

MFC控件

使用Windows标准控件我们在前面曾提到过,控件是一些行为标准化了的窗口,一般用于对话框或其它窗口中充当与用户交互的元素。

在Visual C++中,可以使用的控件分成三类:(1) Windows标准控件Windows标准控件由Windows操作系统提供,在Windows 95中还提供了一些新增的控件。

所有这些控件对象都是可编程的,我们可以使用Visual C++提供的对话框编辑器把它们添加到对话框中。

Microsoft基础类库(MFC)提供了封装这些控件的类,它们列于表6.1。

表6.1 Windows标准控件续表6.1前面提到过,在MFC中,类CWnd是所有窗口类的基类,很自然的,它也是所有控件类的基类。

Windows标准控件在以下环境下提供:∙Windows 95∙Windows NT 3.51及以后版本∙Win32s 1.3∙注意:∙Visual C++ 4.2及以后版本不再支持Win32s。

(2) ActiveX控件ActiveX控件可用于对话框中,也可用于HTML文档中。

这种控件过去被称为OLE 控件。

本书将在专门的章节中来讲述关于ActiveX控件的知识。

这里仅指出ActiveX控件使用了与标准控件完全不同的接口和实现方法。

(3) 其它MFC控件类除了Windows标准控件和自己编写的或者来自于第三方软件开发商的ActiveX 控件以外,MFC还提供了另外三种控件,它们由下面的三个类进行封装:∙类CBitmapButton用于创建以位图作为标签的按钮,位图按钮最多可以包括四个位图图片,分别代表按钮的四种不同状态。

∙类CCheckListBox用于创建选择列表框,这种列表框中的每一项前面有一个复选框,以决定该项是否被选中。

∙类CDragListBox用于创建一种特殊的列表框,这种列表框允许用户移动列表项。

在本章我们仅讲述第一类控件,即Windows标准控件。

所涉及的内容包括各个控件的使用及相应的技巧。

mfc动态创建EDIT控件

mfc动态创建EDIT控件

mfc动态创建EDIT控件知识点:CWnd::CreateCWnd::CreateExSpy++⼯具动态创建控件⼀、 CWnd::Create 参数virtual BOOL Create( LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);BOOL CreateEx(DWORD dwExStyle, LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, LPVOID lpParam = NULL);dwExStyle扩展样式0x204lpszClassName类名未知的话可以⽤spy++获取lpszWindowName窗⼝名dwStyle风格rect矩形pParentWnd⽗窗⼝nID窗⼝IDpContext窗⼝上下⽂环境⼆、代码测试:int CDialog_Dynamics_Create::OnInitDialog(void){CDialog::OnInitDialog();// TODO: 在此添加控件通知处理程序代码// myedt.Create(WS_BORDER|WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL|ES_CENTER,CRect(0,0,100,50),this,100081);//myedt.CWnd::Create(L"Edit",L"myedit",0x50010080,CRect(0,0,100,50),this,100081);//myedt.CWnd::CreateEx(0x204,L"Edit",L"myedit",0x50010080,CRect(0,0,100,50),this,100081);myedt.CreateEx(WS_EX_CLIENTEDGE,L"Edit",L"myedit",WS_BORDER|WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL|ES_CENTER,CRect(0,0,100,50),this,100081);myedt2.Create(WS_BORDER|WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL|ES_CENTER,CRect(0,60,100,110),this,100082);return0;}dwExStyle扩展窗⼝风格:•WS_EX_ACCEPTFILES 指明⽤这个风格创建的窗⼝能够接受拖放⽂件。

MFC控件使用手册

MFC控件使用手册

图 6. 6 为控件映射添加成员变量
5. 检查一下现在的 ClassWizard 对话框(图 6.7)与图 6.5 相比有何不同。在图 6.7 所示的对话框中下方的 Maximum characters 文本框中输入 50。由字面意思 可以很容易猜出其含义,即将编辑框 IDC_EDIT 中可能的最长字符串的大小限制 为 50。单击 OK 关闭对话框。
具体值,而只需要记住相应的助记符。对于这里的编辑框控件,我们只需要记住 IDC_EDIT 即可,而不需要关心它等于 1001。接着,我们在 Styles 选项卡中设置 了 Multiline 属性,同时清除了 Auto HScroll 属性,两者共同作用使用得编辑 框 IDC_EDIT 支持多行文本,并且如文本行的长度超过编辑框宽度时自动回行。
第一节 使用对话框编辑器和 ClassWizard
对于大多数 Windows 标准控件,我们一般都使用对话框编辑器来将它们添加到对 话框中。
图 6. 1 在 ResourceView 中选择对话框 IDD_DIALOGDEMO_DIALOG
图 6. 2 控件的 Properties 对话框
图 6. 3 对话框编辑器的 Controls 工具窗口 在下面的过程中,我们将一个编辑框控件添加到在第四章创建的基于对话框的 MFC 框架应用程序的主对话框窗口中。 1. 首先,在 Workspace 窗口的 ResourceView 选项内双击 DialogDemo resources\Dialog 节点下的 IDD_DIALOGDEMO_DIALOG 图标。上面的操作如图所 示。 2. 用鼠标选中标有“要做……”的静态文本控件。右击鼠标,从上下文菜单中 选择 Properties,打开如图 6.2 所示的对话框,在 Caption 文本框中输入新的 控件文本:“在下面的文本框中输入一些字符”,然后将静态文本控件拖动到对 话框的左上角。 3. 从 Controls 工具窗口(如图 6.3 所示,如果在你的资源编辑器中看不到该工 具窗口,可以在工具条上右击鼠标,从上下文菜单中选择 Controls)中选择编辑 控件图标 ,在对话框中绘制一个编辑框控件,如图 6.4 所示。 在该编辑框控件的 Properties 窗口的 General 选项卡中输入其 ID 为 IDC_EDIT。 然后在 Styles 选项卡下将 Multiline 复选框划上勾,并消除 Auto HScroll 复选 框前的勾。 4. 右击该编辑框控件,从上下文菜单中选择 ClassWizard 命令,打开 ClassWizard 对话框,该对话框看起来如图 6.5 所示。

MFC创建动态链接库DLL并调用方法详解

MFC创建动态链接库DLL并调用方法详解

MFC创建动态链接库DLL并调⽤⽅法详解实例⼀:1、创建⼀个动态链接库⼯程,如login_dll。

2、在原⼯程头⽂件或者新建头⽂件如showdlg.h定义动态链接库的导出函数,代码如下:#include "stdafx.h"#define EXPORT __declspec(dllexport)extern "C" EXPORT void __stdcall Showdialg(char* pText);3、在动态链接库源⽂件中定义showdialog函数,代码如下:void _stdcall Showdialg(char* pText){MessageBox(NULL,pText,"提⽰⼀",0);}注:此步编译后,即可⽣成dll与lib⽂件,因为_stdcall是⼀种⽐较流⾏的函数调⽤约定,(或者可以不⽤_stdcall),如果使⽤的时候,为了防⽌发⽣函数命令改编的情况,可以定义⼀个.def⽂件,其中加⼊EXPORTS节,设置导出函数名,如下所⽰:LIBRARY "login_dll"EXPORTSShowdialg = Showdialg4、创建⼀个基于对话框的⼯程。

5、定义⼀个函数指针类型,其定义与动态链接库的函数原型相同,代码如下:typedef void (__stdcall * funShowInfo)(char* pchData);6、处理按键单击事件,加载动态链接库,代码如下:void Cuse_login_dllDlg::OnBnClickedOk(){HMODULE hMod = LoadLibrary("login_dll.dll");if (hMod != NULL){funShowInfo ShowInfo;ShowInfo = (funShowInfo)GetProcAddress(hMod,"Showdialg");if (ShowInfo)ShowInfo("传⼊参数成功且调⽤正常");}FreeLibrary(hMod);}其中,第5步与第6步是通过LoadLibrary函数动态加载链接库的⽅法,下⾯介绍⼀下静态加载链接库的⽅法:1、加载链接库的头⽂件,将动态链接库头⽂件拷贝到当前⼯程中,并在当前⼯程头⽂件进⾏声明。

MFC自定义控件编写过程

MFC自定义控件编写过程

MFC自定义控件编写过程MFC(Microsoft Foundation Classes)是一个C++应用程序框架,用于开发Windows应用程序。

它提供了许多已经封装好的类和方法,用于开发Windows GUI应用程序。

MFC提供了丰富的控件,但有时我们可能需要开发自定义控件来满足特定的需求。

下面是MFC自定义控件的编写过程。

1.创建MFC项目首先,打开Visual Studio,并选择创建一个新的MFC应用程序项目。

在创建向导中,选择一个适当的应用程序类型和选项,然后指定项目的名称和位置。

点击“完成”按钮创建项目。

2.设计控件界面3.为控件添加代码4.自定义控件逻辑在项目中生成自定义控件的处理逻辑。

打开控件的源文件,并为其添加相应的消息和事件处理函数。

例如,如果要在按钮控件上添加单击事件处理函数,请在对应的按钮控件的单击事件处理函数中添加代码。

您还可以根据需要添加特定的功能和逻辑。

5.编译和测试在完成自定义控件的编码后,可以进行编译测试。

选择“生成”菜单中的“解决方案”选项,或者使用快捷键Ctrl + Shift + B来编译项目。

然后选择“调试”菜单中的“以调试模式启动”选项,或者使用快捷键F5来运行项目。

检查自定义控件是否按预期工作。

6.部署自定义控件一旦自定义控件编写完成并通过了测试,可以将其部署到其他项目中使用。

将自定义控件的源文件和相关资源文件复制到新的项目中,然后在新的项目中按照相同的方式创建控件界面并添加代码。

总结:MFC自定义控件的编写过程可以简单概括为创建MFC项目、设计控件界面、添加代码、自定义控件逻辑、编译和测试以及部署自定义控件。

通过遵循这个过程,我们可以轻松地在MFC应用程序中开发和使用自定义控件,以满足特定需求。

编写自定义控件需要熟悉MFC框架和相关的C++编程知识,对于有经验的开发人员来说是相对简单的任务。

VCMFC之ListCtrl控件使用经验总结

VCMFC之ListCtrl控件使用经验总结

VCMFC之ListCtrl控件使用经验总结本文将从创建ListCtrl控件、数据的插入、删除和修改、列表项的选择和排序等方面,总结一些经验和注意事项。

一、创建ListCtrl控件创建ListCtrl控件的方法有很多,下面介绍两种常用的方法。

2. 动态创建ListCtrl控件:可以通过CListCtrl类的Create函数来动态创建ListCtrl控件。

例如:```cppCListCtrl m_listCtrl;m_listCtrl.Create(WS_CHILD , WS_VISIBLE , LVS_REPORT, CRect(0, 0, 500, 300), this, IDC_LIST_CTRL);```此外,还可以通过控件向导创建ListCtrl控件,控件向导在创建ListCtrl控件时会生成相关的代码。

二、数据的插入、删除和修改1.插入数据:可以使用InsertItem函数向ListCtrl控件中插入新的项。

例如:```cppm_listCtrl.InsertItem(0, _T("Item 1"));2.删除数据:可以使用DeleteItem函数删除ListCtrl控件中的其中一项。

例如:```cppm_listCtrl.DeleteItem(0);```3.修改数据:可以通过SetItemText函数修改ListCtrl控件中其中一项的文字。

例如:```cppm_listCtrl.SetItemText(0, 1, _T("Modified Item"));```三、列表项的选择和排序1.列表项的选择:可以使用GetNextItem函数和SetItemState函数来获取和设置ListCtrl控件中的选中项。

例如:```cppint nItem = m_listCtrl.GetNextItem(-1, LVNI_SELECTED);m_listCtrl.SetItemState(nItem, LVIS_SELECTED, LVIS_SELECTED);2.列表项的排序:可以使用SortItems函数对ListCtrl控件中的数据进行排序。

MFC中进度条控件的使用方法

MFC中进度条控件的使用方法

MFC中进度条控件的使用方法MFC(Microsoft Foundation Class)进度条控件是一种用于显示任务进度的常见控件,可以在界面中显示一个动态的进度条,以便用户了解任务的进度情况。

在本文中,将介绍MFC中如何使用进度条控件,并详细说明其使用方法。

1.创建进度条控件在MFC应用程序的对话框资源中添加一个进度条控件,控件ID可以自定义。

然后在对应的对话框类中添加一个变量用于关联该控件,方法如下:```cpp#include <afxcmn.h> // 导入控件类的头文件class CMyDialog : public CDialogEx//...protected:CProgressCtrl m_progress; // 声明一个变量用于关联进度条控件};```2.初始化进度条在对话框类中的OnInitDialog(函数中,通过m_progress变量获取进度条控件的指针,并进行初始化设置。

```cppBOOL CMyDialog::OnInitDialogCDialogEx::OnInitDialog(;//获取进度条控件的指针CProgressCtrl* pProgress =(CProgressCtrl*)GetDlgItem(IDC_PROGRESS1);//设置进度条范围(默认为0-100)pProgress->SetRange(0, 100);//设置进度条初始位置pProgress->SetPos(0);return TRUE;}```3.更新进度条的进度在任务进行中,可以通过SetPos(函数设置进度条的当前位置,用以更新进度条的进度。

```cppvoid CMyDialog::DoTaskfor (int i = 0; i <= 100; i++)m_progress.SetPos(i);//执行任务代码...}}```4.设置进度条样式进度条控件还支持一些样式设置,可以通过SetStyle(函数进行设置。

MFC编程入门之二十四(常用控件:列表框控件ListBox)

MFC编程入门之二十四(常用控件:列表框控件ListBox)

MFC编程⼊门之⼆⼗四(常⽤控件:列表框控件ListBox) 前⾯两节讲了⽐较常⽤的按钮控件,并通过按钮控件实例说明了具体⽤法。

本⽂要讲的是列表框控件(ListBox)及其使⽤实例。

列表框控件简介 列表框给出了⼀个选项清单,允许⽤户从中进⾏单项或多项选择,被选中的项会⾼亮显⽰。

列表框可分为单选列表框和多选列表框,顾名思义,单选列表框中⼀次只能选择⼀个列表项,⽽多选列表框可以同时选择多个列表项。

列表框也会向⽗窗⼝发送通知消息。

这些通知消息含义如下: LBN_DBLCLK:⽤户⽤⿏标双击了⼀列表项,只有具有LBS_NOTIFY的列表才能发送该消息。

LBN_ERRSPACE:列表框不能申请⾜够的动态内存来满⾜需要。

LBN_KILLFOCUS:列表框失去焦点。

LBN_SELCANCEL:当前的选择被取消,只有具有LBS_NOTIFY的列表框才能发送该消息。

LBN_SETFOCUS:列表框获得输⼊焦点。

WM_CHARTOITEM:当列表框收到WM_CHAR消息后,向⽗窗⼝发送该消息,只有具有LBS_WANTKEYBOARDINPUT风格的列表框才会发送该消息。

WM_VKEYTOITEM:当列表框收到WM_KEYDOWN消息后,向⽗窗⼝发送该消息,只有具有LBS_WANTKEYBOARDINPUT风格的列表框才会发送该消息。

列表框控件的创建 MFC将列表框控件的所有操作都封装到了CListBox类中。

创建列表框控件时,可以在对话框模板中直接拖⼊列表框控件ListBox,然后添加控件变量使⽤。

但如果需要动态创建列表框,就要⽤到CListBox类的Create成员函数了。

Create成员函数的原型如下: virtual BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID ); 参数rect指定了列表框控件的位置和尺⼨,pParentWnd为⽗窗⼝的指针,nID⽤于指定列表框控件的ID。

mfc 控件顺序

mfc 控件顺序

mfc 控件顺序
在MFC(Microsoft Foundation Class)中,控件的顺序可以通过动态创建时设置样式,或使用Tab键顺序等方式进行改变。

控件顺序指的是用户通过不同的输入设备(如鼠标、键盘等)进行控件操作时,控件接收输入焦点的顺序。

合理的控件顺序可以提高用户界面的易用性,使用户在操作的过程中更加顺畅。

控件顺序的影响因素包括界面布局和控件类别。

控件在界面中的位置和排列方式会直接影响控件的访问顺序。

通常,从左上角到右下角的阅读顺序被认为是一种合理的控件访问顺序。

不同类型的控件可能有不同的默认访问顺序。

例如,在一个对话框中,按钮类控件通常有更高的优先级,因为用户经常需要直接操作按钮。

如果您希望调整MFC中的控件顺序,可以参考以下步骤:
1.在动态创建控件的时候STYLE设置成为WS_CHILD|WS_VISIBLE |WS_TABSTOP,其中WS_TABSTOP是影响TAB顺序的。

先创建的控件T AB顺序在前。

如果要颠倒TAB顺序的话,就把在创建控件时把WS_T ABSTOP去掉,并增加对“TAB键被按下”事件的捕捉,人工使用SET FOCUS来控制TAB顺序。

2.编辑界面按下ctrl+D键,就会出现所有控件的Tab键顺序,按照自己想要的顺序依次点击控件的数字标识,就可以重新安排控件的TAB键顺序。

mfc调用active控件

mfc调用active控件

mfc调用active控件
MFC(Microsoft Foundation Class)是一种用于开发Windows 应用程序的C++类库,而ActiveX控件是一种可重用的软件组件,通常用于在Web浏览器或其他容器应用程序中显示交互式内容。

在MFC中调用ActiveX控件可以通过以下步骤实现:
1. 首先,你需要在MFC应用程序中创建一个对话框或视图来容纳ActiveX控件。

你可以在资源编辑器中添加一个ActiveX控件,或者在代码中动态创建和添加ActiveX控件。

2. 然后,你需要在MFC应用程序中使用类向导来生成ActiveX 控件的包装类。

在Visual Studio中,你可以使用“添加类”对话框来生成包装类。

3. 生成包装类后,你可以在对话框或视图类的代码中实例化ActiveX控件的包装类对象,并调用其方法或设置其属性。

例如,你可以使用Create函数创建ActiveX控件的实例,并使用其提供的方法来实现所需的功能。

4. 最后,在MFC应用程序的消息映射函数中处理ActiveX控件
的事件,例如按钮点击事件或文本框内容改变事件。

你可以通过包装类提供的事件映射功能来实现对ActiveX控件事件的处理。

总的来说,MFC调用ActiveX控件涉及到创建包装类、实例化控件对象、调用控件方法和处理控件事件等步骤。

通过这些步骤,你可以在MFC应用程序中有效地使用ActiveX控件实现丰富的交互式功能。

MFC控件使用详细教程

MFC控件使用详细教程

MFC控件使用详细教程MFC(Microsoft Foundation Classes)是微软公司开发的一套面向对象的C++类库,旨在简化Windows应用程序的开发。

其中包括了一系列的控件类,用于构建Windows用户界面。

本文将介绍MFC控件的使用,并提供详细的教程。

1.创建MFC应用程序首先,打开Visual Studio开发环境,选择创建MFC应用程序项目。

在项目向导中,选择“对话框”应用程序类型。

2.添加控件到对话框在MFC应用程序中,用户界面的主要组成部分是对话框。

打开对话框资源文件(通常是一个名为“MainDlg”的文件),可以看到空白的对话框。

从工具箱中选择所需的控件,例如按钮(Button)、文本框(Edit Control)等。

点击工具箱中的控件,然后在对话框上绘制一个矩形,即可在对话框中添加该控件。

3.设置控件属性选中添加的控件,可以在“属性”窗口中设置其属性。

例如,可以设置按钮的文本、大小、位置等。

4.响应控件事件控件可以触发各种事件,例如按钮点击事件。

为了响应这些事件,我们需要添加相应的事件处理程序。

在资源视图中,右键点击对话框资源文件,选择“添加事件处理程序”。

然后,选择要响应的事件,例如按钮的点击事件。

在出现的对话框中,输入事件处理程序的名称,并选择成员变量的名称。

点击“确定”后,Visual Studio会自动生成事件处理程序的代码。

5.控件的常用操作- 设置控件的文本:使用SetWindowText函数,例如SetWindowText("Hello");- 获取控件的文本:使用GetWindowText函数,例如CString str; GetWindowText(str);- 启用或禁用控件:使用EnableWindow函数,例如EnableWindow(FALSE)可以禁用控件;- 显示或隐藏控件:使用ShowWindow函数,例如ShowWindow(SW_HIDE)可以隐藏控件;- 设置或获取控件的位置、大小:使用SetWindowPos和GetWindowRect函数,例如SetWindowPos(NULL, x, y, width, height)可以设置控件的位置和大小;- 样式和外观设置:使用ModifyStyle和SetWindowLong函数,例如在按钮上设置图标和文字风格。

mfc groupbox的用法

mfc groupbox的用法

mfc groupbox的用法MFC(Microsoft Foundation Classes)是一种用于开发Windows应用程序的框架。

MFC中的GroupBox控件用于将其他控件分组,以便更好地组织和管理用户界面。

GroupBox通常显示为一个矩形框,内部包含其他控件,可以与这些控件一起移动、调整大小等。

GroupBox的主要作用是:1. 分组控件:将相关的控件放在同一个GroupBox中,便于用户理解和操作。

2. 视觉整合:GroupBox可以提供一种视觉上的整合效果,使一组相关的控件看起来更加紧密和有序。

3. 逻辑关联:GroupBox可以用于创建逻辑上相互关联的控件组,例如选项卡式的界面,不同GroupBox显示不同的控件组。

使用MFC的GroupBox控件需要以下步骤:1. 在资源编辑器中拖放一个GroupBox控件到窗口上。

2. 在代码中声明一个成员变量以表示GroupBox控件,例如CButtonm_GroupBox;3. 在DoDataExchange函数中添加控件的关联宏,例如DDX_Control(pDX,IDC_GROUPBOX, m_GroupBox),以便在运行时与控件进行关联。

4. 在初始化对话框函数OnInitDialog()中,可以设置GroupBox的文本标题,例如m_GroupBox.SetWindowT ext(_T("Group Box"))。

5. 在GroupBox中添加其他控件,通过拖放操作或者使用Create函数动态创建控件,并设置它们的位置、大小等属性。

6. 根据需要,可以通过调用m_GroupBox.EnableWindow(FALSE)禁用GroupBox控件,或者通过m_GroupBox.ShowWindow(SW_HIDE)隐藏GroupBox控件。

注意:GroupBox只是一个可以容纳其他控件的容器,在逻辑和数据处理上并没有特殊之处,与其他MFC控件一样,可以通过消息处理函数响应用户的操作,并实现相应的功能。

C#动态生成控件以及添加事件处理

C#动态生成控件以及添加事件处理

C#动态⽣成控件以及添加事件处理有时候需要在程序运⾏到⼀定时候或者某个事件之后需要动态⽣成控件在C#下⼀般⽅式是: private Button Db=new Button() ; ="Dy_Button" //设定名称 Db.Location=new Point(100,200);//设定位置 。

//其他属性设置 //这⾥添加消息处理 。

this.Controls.Add (Db);//添加到控件组中 这样就完成了动态⽣成但是需要给控件添加消息处理事件 那么现在就需要在⽣成控件添加到控件组前增加如下语句:DPB.MouseClick += new EventHandler(this.pictureBox_MouseClick); 现在编写这个消息处理的函数pictureBox_Click() private void pictureBox_MouseClick(object sender,EventArgs e) { MessageBox.Show("click"); } 这样完成了事件处理的添加 ⾸先,创建⼀个全局变量"i "⽤来区分各个新的按钮:private int i=0; 然后在已有的按钮中添加⽅法如下: private void button1_Click(object sender, System.EventArgs e) { i++; Button b = new Button();//创建⼀个新的按钮 ="b"+i;//这是我⽤来区别各个按钮的办法 System.Drawing.Point p = new Point(12,13+i*30);//创建⼀个坐标,⽤来给新的按钮定位 b.Location = p;//把按钮的位置与刚创建的坐标绑定在⼀起 panel1.Controls.Add(b);//向panel中添加此按钮 b.Click += new System.EventHandler(btn_click);//将按钮的⽅法绑定到按钮的单击事件中b.Click是按钮的单击事件 }完成以上步骤就已经可以进⾏动态按钮的创建下⾯我们来讲如何对新建的按钮添加对应的事件⽅法btn_click(): private void btn_click(object sender, System.EventArgs e) { Button b1 = (Button)sender;//将触发此事 完成以上步骤就已经可以进⾏动态按钮的创建 下⾯我们来讲如何对新建的按钮添加对应的事件⽅法btn_click(): private void btn_click(object sender, System.EventArgs e) { Button b1 = (Button)sender;//将触发此事件的对象转换为该Button对象 MessageBox.Show(""+); } ⾄此就已经完成了动态创建按钮和事件 为控件动态添加事件 实现的功能是在⽹页上的Panel中动态添加⼀个Button,并为这个Button写⼀个单击事件。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第三个:ID为IDC_MYRADIO3,Caption为单选3
其中Caption为按钮上要显示的文字,可根据需要设置。
2.用CButton类的Create()函数生成三个单选按钮:
为方便起见,先定义一个函数生成单选按钮:
CButton* CTextEditorView::NewMyRadio(int nID,CRect rect,int nStyle)
静态控件不需要调用Create()函数来创建。
而创建动态控件有很大不同,以下以按钮为例,看一下动态控件的创建过程:
1.建立控件ID号:
ID号是控件的标识,创建控件前必须先为它设置一个ID号。
打开资源中的“String Table”,在空白行上双击鼠标,这时会弹出一个ID属性对话框,在其中的ID编辑框中输入ID,如:IDC_MYBUTTON,在Caption中输入控件标题或注解(注:Caption框不能为空,为空会导致创建失败),这里我输入的是按钮上要显示的文字--动态按钮。
BS_CHECKBOX 复选按钮,不常用
BS_AUTO3STATE 含自动选中状态的三态复选按钮
BS_3STATE 三态复选按钮,不常用
以上风格指定了创建的按钮类型,不能同时使用,但必须有其一。
BS_BITMAP 按钮上将显示位图
BS_DEFPUSHBUTTON 设置为默认按钮,只用于下压式按钮,一个对话框中只能指定一个默认按钮
{
}
void CTextEditorView::OnMybut2()
{
……
}
void CTextEditorView::OnMybut3()
{
……
}
除了按钮的响应函数外,你还可以用上面获得的指针访问按钮,如:
修改按钮的大小和位置:p_MyBut[0]->MoveWindow(……);
修改按钮文本:p_MyBut[0]->SetWindowText(……);
显示/隐藏按钮:p_MyBut[0]->ShowWindow(……);等等。
三、回收资源:
由于动态控件对象是由new生成的,它不会被程序自动释放,所以需手工释放。在控件不再使用时可以删除它:
if( p_MyBut[0] )
我们先来看静态制作方法:在对话框中放置三个单选按钮,设置属性如下:
Radio1属性:Visible、Group、Tab stop、Auto
Radio2属性:Visible、Tab stop、Auto
Radio3属性:Visible、Tab stop、Auto
这样的属性设置就把三个单选按钮分成了一组,它们一次只能有一个被选中,若对话框中还有其它成组的单选按钮,使用时也会互不干扰。但这时还没有使第一个按钮处于选中状态。
正确做法是用new调用CButton构造函数生成一个实例:
CButton *p_MyBut = new CButton();
然后用CButton类的Create()函数创建,该函数原型如下:
BOOL Create( LPCTSTR lpszCaption, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );
在MFC中创建动态控件的生成与响应 c/c++ mfc 动态按钮
动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的。
一、创建动态控件:
为了对照,我们先来看一下静态控件的创建。
放置静态控件时必须先建立一个容器,一般是对话框,这时我们在对话框编辑窗口中,从工具窗口中拖出所需控件放在对话框中即可,再适当修改控件ID,设置控件属性,一个静态控件就创建好了,当对话框被显示时,其上的控件也会显示。
图像列表控件???? CImageCtrl
树状控件???????????? CTreeCtrl
动画控件???????????? CAnimateCtrl
本例中我们创建一个CButton类的普通按钮。注意不能直接定义CButton对象,如:CButton m_MyBut;这种定义只能用来给静态控件定义控制变量,不能用于动态控件。
2.在头文件中添加函数定义:
用ClassWizard添加函数时,会在头文件的AFX_MSG区间内添加函数定义,如:
protected:
//{{AFX_MSG(CTextEditorView)
afx_msg void OnIconbut0();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
return p_Button;
}
其中m_Caption.LoadString( nID )是从字符串表中读取按钮文本,这样在创建按钮ID时,应该把文本设置好,参数nStyle为除必须风格外的额外风格。
以下,我调用该函数创建三个按钮,并指定第一个按钮为默认按钮,按钮的ID已预先设置好了:
CButton *p_MyBut[3];
lpszCaption是按钮上显示的文本;
dwStyle指定按钮风格,可以是按钮风格与窗口风格的组合,取值有:
窗口风格:
WS_CHILD???? 子窗口,必须有
WS_VISIBLE???? 窗口可见,一般都有
WS_DISA钮时使用
WS_TABSTOP???? 可用Tab键选择
m_Caption.LoadString( nID ); //取按钮标题
CButton *p_Button = new CButton();
ASSERT_VALID(p_Button);
p_Button->Create( m_Caption, WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | nStyle, rect, this, nID );???? //创建按钮
我们模仿这种形式,只是把函数定义添加到AFX_MSG区间外就行了:
protected:
//{{AFX_MSG(CTextEditorView)
afx_msg void OnIconbut0();
//}}AFX_MSG
afx_msg void OnMybut1();
afx_msg void OnMybut2();
手工添加时不要添加到AFX_MSG_MAP区间内,以防ClassWizard不能正常工作,如:
BEGIN_MESSAGE_MAP(CTextEditorView, CFormView)
//{{AFX_MSG_MAP(CTextEditorView)
ON_BN_CLICKED(IDC_ICONBUT0, OnIconbut0)
delete p_MyBut[0];
以上就是按钮控件动态生成的方法。下面,再看一下单选按钮的动态生成问题。
四、实例:单选按钮组的动态生成
单选按钮也属于CButton类,但由于单选按钮总是成组使用的,所以它在制作和使用上与普通按钮有一定区别。
假设有三个单选按钮组成一组,初始时,第一个单选按钮处于选中状态。
BEGIN_MESSAGE_MAP(CTextEditorView, CFormView)
//{{AFX_MSG_MAP(CTextEditorView)
ON_BN_CLICKED(IDC_ICONBUT0, OnIconbut0)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
afx_msg void OnMybut3();
DECLARE_MESSAGE_MAP()
3.编写消息响应函数:
以上是把消息和函数关联起来了,具体在单击按钮后应做的工作在函数中完成:
void CTextEditorView::OnMybut1()
{
MessageBox( "哈!你单击了动态按钮。" );
以上就是通常制作单选按钮组的办法,现我们欲改为动态生成,主要要解决按钮分组和单击控制问题。以下为制作步骤:
1.定义三个单选按钮的ID:
打开资源中的“String Table”,在其中添加三个ID值:
第一个:ID为IDC_MYRADIO1,Caption为单选1
第二个:ID为IDC_MYRADIO2,Caption为单选2
WS_GROUP???? 成组,用于成组的单选按钮中的第一个按钮
按钮风格:
BS_PUSHBUTTON 下压式按钮,也即普通按钮
BS_AUTORADIOBUTTON 含自动选中状态的单选按钮
BS_RADIOBUTTON 单选按钮,不常用
BS_AUTOCHECKBOX 含自动选中状态的复选按钮
二、动态控件的响应:
动态控件的响应函数不能用ClassWizard添加,只能手动添加。仍以上面的按钮为例,我们制作按钮的单击响应函数。
1.在MESSAGE_MAP中添加响应函数:
MESSAGE_MAP表中定义了消息响应函数,其格式为:消息名(ID,函数名),当我们用ClassWizard添加函数时,会自动添加在AFX_MSG_MAP括起的区间内,如:
2.建立控件对象:
不同种类的控件应创建不同的类对象,
按钮控件???????????? CButton???? (包括普通按钮、单选按钮和复选按钮)
编辑控件???????????? CEdit
静态文本控件???? CStatic
标签控件???????????? CTabCtrl
旋转控件???????????? CSpinButtonCtrl
相关文档
最新文档