怎么样在MFC中创建动态控件
CButton *pButton = new CButton[4];
for(int i=0;i<4;i++)
pButton[i].Create("第一个", WS_CHILD|BS_DEFPUSHBUTTON|WS_VISIBLE|BS_AUTOCHECKBOX,
CRect(10, 80, 200, 100), this, 123+i);
//这里我没有更改每个控件的位置,你设置的CRect(10, 80, 200, 100),所以,你要分别设置这四个控件的位置,比如CRect(10+50*i,10,50+50*i,50)
工具箱空白处右键-》选择项-》浏览-》(找到activex的dll)-》打开-》确定 这时,在工具箱里就有你写的ActiveX控件了,把它拖到界面上即可
在MFC中怎么动态创建各种控件,以及添加相应的响应事件。
放置静态控件时必须先建立一个容器,一般是对话框,这时我们在对话框编辑窗口中,从对象窗口中拖出所需控件放在对话框中即可,再恰当批改控件ID,设置控件属性,一个静态控件就创建好了,当对话框被显示时,其上的控件也会显示。
静态控件不须要调用Create()函数来创建。
动态控件是指在须要时由Create()创建的控件,这与预先在对话框中放置的控件是不合的。
一、创建动态控件:
创建动态控件有很大不同,以下以按钮为例,看一下动态控件的创建过程:
1.建立控件ID号:
ID号是控件的标识,创建控件前必须先为它设置一个ID号。
打开资料中的“String Table”,在空白行上双击鼠标,这时会弹出一个ID属性对话框,在此中的ID编辑框中输入ID,如:IDC_MYBUTTON,在Caption中输入控件题目或注解(注:Caption框不能为空,为空会导致创建失败),这里我输入的是按钮上要显示的文字--动态按钮。
2.建立控件对象:
不同种类的控件应创建不合的类对象:
按钮控件 CButton (包含通俗按钮、单选按钮和复选按钮)
编辑控件 CEdit
静态文本控件 CStatic
标签控件 CTabCtrl
扭转控件 CSpinButtonCtrl
滑标控件 CSliderCtrl
多信息编辑控件 CRichEditCtrl
进度条控件 CProgressCtrl
迁移转变条控件 CSrcollBar
组合框控件 CComboBox
列表框控件 CListBox
图像列表控件 CImageCtrl
树状控件 CTreeCtrl
动画控件 CAnimateCtrl
本例中我们创建一个CButton类的通俗按钮。首先直接定义CButton对象,如:CButton m_MyBut;这种定义只能用来给静态控件定义把握变量,不能直接用于动态控件。
正确做法是用new调用CButton机关函数生成一个实例:
[cpp] view plain copy
CButton *p_MyBut = new CButton();
然后用CButton类的Create()函数创建,该函数原型如下:
BOOL Create( LPCTSTR lpszCaption, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );
lpszCaption是按钮上显示的文本;
dwStyle指定按钮风格,可所以按钮风格与窗口风格的组合,取值有:
窗口风格:
WS_CHILD 子窗口,必须有
WS_VISIBLE 窗口可见,一般都有
WS_DISABLED 禁用窗口,创建初始状况为灰色不成用的按钮时应用
WS_TABSTOP 可用Tab键选择
WS_GROUP 成组,用于成组的单选按钮中的第一个按钮
按钮风格:
BS_PUSHBUTTON 下压式按钮,也即通俗按钮
BS_AUTORADIOBUTTON 含主动选中状况的单选按钮
BS_RADIOBUTTON 单选按钮,不常用
BS_AUTOCHECKBOX 含主动选中状况的复选按钮
BS_CHECKBOX 复选按钮,不常用
BS_AUTO3STATE 含主动选中状况的三态复选按钮
BS_3STATE 三态复选按钮,不常用
以上风格指定了创建的按钮类型,不能同时应用,但必须有其一。
BS_BITMAP 按钮大将显示位图
BS_DEFPUSHBUTTON 设置为默认按钮,只用于下压式按钮,一个对话框中只能指定一个默认按钮
rect指定按钮的大小和地位;
pParentWnd指导拥有按钮的父窗口,不能为NULL;
nID指定与按钮接洽关系的ID号,用上一步创建的ID号。
不同控件类的Create()函数略有不同,可参考相干材料。
例:p_MyBut->Create( "动态按钮", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, CRect(20,10,80,40), this, IDC_MYBUTTON );
这样,我们就在当前对话框中的(20,10)处创建了宽60,高30,按钮文字为“动态按钮”的下压式按钮。
为了使创建过程更便利易用,我定义了如下函数:
[cpp] view plain copy
CButton* CTextEditorView::NewMyButton(int nID,CRect rect,int nStyle)
{
CString m_Caption;
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 ); //创建按钮
return p_Button;
}
此中m_Caption.LoadString( nID )是从字符串表中读取按钮文本,如许在创建按钮ID时,应当把文本设置好,参数nStyle为除必须风格外的额外风格。
以下,我调用该函数创建三个按钮,并指定第一个按钮为默认按钮,按钮的ID已预先设置好了:
[cpp] view plain copy
CButton *p_MyBut[3];
p_MyBut[0] = NewMyButton( ID_MYBUT1, CRect(10,20,50,35), BS_DEFPUSHBUTTON );
p_MyBut[1] = NewMyButton( ID_MYBUT2, CRect(55,20,95,35), 0 );
p_MyBut[2] = NewMyButton( ID_MYBUT3, CRect(100,20,140,35), 0 );
二、动态控件的响应:
动态控件的响应函数不能直接用ClassWizard添加,只能手动添加。仍以上方的按钮为例,我们建造按钮的单击响应函数。
1.在MESSAGE_MAP中添加响应函数:
MESSAGE_MAP表中定义了消息响应函数,其格局为:消息名(ID,函数名),当我们用ClassWizard添加函数时,会主动添加在AFX_MSG_MAP括起的区间内,如:
[cpp] view plain copy
BEGIN_MESSAGE_MAP(CTextEditorView, CFormView)
//{{AFX_MSG_MAP(CTextEditorView)
ON_BN_CLICKED(IDC_ICONBUT0, OnIconbut0)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
手工添加时不要添加到AFX_MSG_MAP区间内,以防ClassWizard不克不及正常工作,如:
[cpp] view plain copy
BEGIN_MESSAGE_MAP(CTextEditorView, CFormView)
//{{AFX_MSG_MAP(CTextEditorView)
ON_BN_CLICKED(IDC_ICONBUT0, OnIconbut0)
//}}AFX_MSG_MAP
ON_BN_CLICKED(ID_MYBUT1, OnMybut1)
ON_BN_CLICKED(ID_MYBUT2, OnMybut2)
ON_BN_CLICKED(ID_MYBUT3, OnMybut3)
END_MESSAGE_MAP()
此中ON_BN_CLICKED是按钮单击消息。
2.在头文件中添加函数定义:
用ClassWizard添加函数时,会在头文件的AFX_MSG区间内添加函数定义,如:
[cpp] view plain copy
protected:
//{{AFX_MSG(CTextEditorView)
afx_msg void OnIconbut0();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
我们仿照这种情势,只是把函数定义添加到AFX_MSG区间外就行了:
[cpp] view plain copy
protected:
//{{AFX_MSG(CTextEditorView)
afx_msg void OnIconbut0();
//}}AFX_MSG
afx_msg void OnMybut1();
afx_msg void OnMybut2();
afx_msg void OnMybut3();
DECLARE_MESSAGE_MAP()
如何在Visual Studio 2015中创建MFC窗体应用
我们在使用Visual Studio 2015创建桌面应用的时候,最经常遇到的就是Winform和MFC了,那么如何在Visual Studio 2015中创建MFC窗体应用呢?下面我给大家分享一下。工具\/材料 VisualStudio2015 首先我们打开Visual Studio 2015软件,点击顶部的文件菜单,然后选择新建下面的项目选项,如下图所示 接下来在弹出的...
学习MFC框架如何创建的过程
CChildFrame做为子窗口包含于MDIClient中(可以包含多个),CChildFrame里面则是真实的文档表示窗口CMDITestView了。 我们从这里开始:\/\/ CMDITestApp 初始化BOOL CMDITestApp::InitInstance() 做为CWinApp的派生类,通常需要重载InitInstance(), ExitInstance()两个函数,以完成应用的初始化和退出。我们现在...
MFC中用Cwnd类创建一个最简单的窗口
pMainWnd == NULL)m_pMainWnd = new COurWnd();m_pMainWnd->ShowWindow(m_nCmdShow);return TRUE;};COurApp myapp;大致步骤,新建win32项目,然后在工程属性中把使用标准windows库改为在静态库或动态库中使用mfc。代码适用于vc2008 unicode工程中,如果是非unicode,请把字符串常量前大写的L去掉 ...
mfc 创建图形插入符时,在哪里写代码?(纯新手菜鸟,希望高手指教)_百度...
就会释放销毁,因此我们可以将它,设置为Cview的一个成员变量,即在CView中加入代码:Private:CBitmap bitmap;完整代码为:bitmap.LoadBitmap(IDB_BITMAP1);\/\/初始化 CretCaret();ShowCaret();我也是初学,对这个有些迷糊,查到资料说是这样子,你有清楚的做法吗?发我,谢谢。我qq:460752384 ...
vs2010 mfc中如何在视图中创建一个图形,然后用鼠标能拖动,双击它还会弹 ...
创建一个从CStatic派生的类即可 该类显示图形,并处理鼠标消息使之能拖动并弹出对话框。
MFC 怎样新建一个窗体 ?
当前窗口,有一个窗口类吧,例如CMyDlg(只是举个例子,名字是你自己取的)。然后用这个类新建一个对象dlg2 最后调用dlg2.DoModal();
怎样用MFC做一个图形界面程序
给你个最最简单的MFC程序。你可以打开2005 新建win32 程序 建立空项目 然后编写如下代码\/\/hello.cpp include <afxwin.h> \/\/ 说明应用程序类 class CHelloApp : public CWinApp { public:virtual BOOL InitInstance();};\/\/ 建立应用程序类的实例 CHelloApp HelloApp;\/\/ 说明主窗口类 class CHello...
基于对话框的MFC应用程序怎么建立?
即,可以直接使用MFC的CFrameWnd类实现一个窗口,但是CWinApp不能直接使用,必须派生一个用户类,因为Windows程序的启动顺序是:实例全局对象,WinMain,…,如果不实例CWinApp,找不到机会创建窗口,而派生之后,就可以重载CWinApp::InitInstance函数,AfxWinMain里会调用这个函数。10. 使用File|New,选择Resource...
用MFC如何创建文件夹?
CString strFolderPath="c:\\\\test"\/\/ 判断路径是否存在 if (!PathIsDirectory(m_strFolderPath) ){ CString strMsg;strMsg.Format ("指定路径\\"%s\\"不存在,是否创建?", m_strFolderPath);if (AfxMessageBox(strMsg, MB_YESNO) == IDYES){ if (!Create...
MFC中怎么创建一颗树 而且动态的去增加结点
先建立root HTREEITEMroot = m_tree.InsertItem(_T(""),TVI_ROOT);for(iter = pView->a.begin(); iter != pView->a.end(); iter++)\/\/a是一个向量用来存储建立子节点数据 { HTREEITEMrootItem = m_tree.InsertItem(iter->second,root);} \/\/我的向量是一个map,所以a.second表示a向量...
闻虽头孢: mfc中,定义private:Cbutton m_btn;//运行的地方输入m_btn.Create(L”增加的按钮!”,BS_DEFPUSHBUTTON | WS_VISIBLE | WS_CHILD,CRect(0,0,100,100),this,123);第一个参数就是按钮的标题,不用多说了;第二个参数是按钮的类型...
共和县19170945532: mfc怎样动态的创建activex控件 - ?
闻虽头孢: 工具箱空白处右键-》选择项-》浏览-》(找到activex的dll)-》打开-》确定 这时,在工具箱里就有你写的ActiveX控件了,把它拖到界面上即可
共和县19170945532: MFC 中怎么动态创建Picture Control控件 - ?
闻虽头孢: 用炫彩界面库 ,XPic_Create() 创建图片控件, 或者用UI设计器直接拖拽.MFC太老了,好多年不用了.
共和县19170945532: MFC中的单文档程序,如何在界面上添加控件 - ?
闻虽头孢: 动态创建,调用控件的Create函数 比如 CEdit *pEdit=new CEdit; pEdit->Create(WS_VISIBLE|ES_LEFT,CRect(100,100,200,140),this,WM_USER+100);//或者使用CreateEx() pEdit->ShowWindow(SW_SHOW);
共和县19170945532: 在VC中MFC,新建对话框该如何建立控件啊?(比如static text , edit box等等) - ?
闻虽头孢: 可以在工具箱中点击对应的图标.然后在对话框上画出即可,如动态创建,如cedit,CEdit* pEdit = new CEdit; pEdit->Create(ES_MULTILINE | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER, CRect(10, 10, 100, 100), this, 1);
共和县19170945532: MFC如何动态创建多个edit控件 - ?
闻虽头孢: 不一定是要动态创建,只要实现这个效果就可以了.毕竟你要动态创建的话,你窗口的大小,以及创建出来的edit控件布局也很难做好.建议方法: 先在界面上布置好最大数量的edit控件,然后全部隐藏,窗口大小也可以适当缩小一部分,然后动态输入的时候,只要把edit控件显示出来就可以了
共和县19170945532: MFC动态创建控件的问题. - ?
闻虽头孢: 我的解决办法:GetDlgItem(IDC_DisplayAera)->GetClientRect(&m_Rect) this->ClientToScreen(m_Rect); //this表示相对于主窗口
共和县19170945532: mfc 动态创建按钮,如何理解MFC中的动态创建? - ?
闻虽头孢: MFC的动态创建是通过一些宏来实现的.主要过程是:1.在要实现动态创建的类(classA)的声明代码处加入一个静态的CRuntimeClass变量(b),并重载GetRuntimeClass()函数以返回b,并声明动态建立函数(C())(通过在类的声明处...
共和县19170945532: 关于MFC单文档中控件的添加与操作 - ?
闻虽头孢: 动态添加的控件的ID肯定是你动态创建控件的时候提供的, 添加文本就直接((CEdit *)GetDlgItem(int nID))->SetWindowText(CStrin & cstr);
共和县19170945532: MFC中怎么在状态栏中加入静态文本控件和编辑框控件? - ?
闻虽头孢: 动态创建 头文件中声明:CEdit* m_Edits; cpp文件的OnInitDialog函数中:m_Edits=new CEdit(50); for(int i=0;i<50;i++) { m_Edits[i].Create(……); } 程序执行结束时:for(int i=0;i<50;i++) { delete []m_Edits; } 不过这种情况只适合你所有的Edit控...