问了好多次,没有人能回答。。。。
8 个解决方案
#1
up
#2
顶
#3
你在其他地方如何调用 MFC ActiveX 你在那个框架里就如何调用。
如果你不会调用 ActiveX 就去学习 ActiveX 。
如果你不会调用 ActiveX 就去学习 ActiveX 。
#4
用对话框做容器的话就是一件很简单的事。 可要在ATL做的COM中是没有容器的。 还望多多指教???
#5
在http://www.xue68.com 搜索到过类似的解决方法
#6
没找到啊.
#7
在使用一个已注册的ActiveX控件之前,必须先用组件廊将该控件添加到应用程序中,步骤如下:
1.从Project菜单选择Add To Project下的Components and Controls。
2.在弹出的对话框中双击Registered ActiveX Control子目录,打开此目录。
3.选择你需要的控件,点击Insert按钮,弹出Confirm Classes对话框。
4.在列出的类名中选择需要的类(缺省为全选中,最好接受缺省设置),点击OK,关闭Confirm Classes对话框。
5.点击Close关闭组件廊,该控件的图标即加入到对话框编辑器的控件面板上。
这样,我们就可以在对话框中像使用Windows标准控件那样使用该控件了。但在某些应用中,你可能需要在非对话框容器(如应用程序的窗口)中嵌入ActiveX控件。这时没有对话框编辑器,我们应怎样在非对话框容器中使用ActiveX控件呢?
当组件廊将ActiveX控件添加到你的应用程序后,组件廊会创建一些包裹类(即在Confirm Classes对话框中列出的那些类)。其中有一个类的基类是CWnd,该类是控件的包裹类,它被用作控件与控件包容器之间的接口,有两个公有的Create成员函数:
virtual BOOL Create(LPCTSTR lpszClassName,
LPCTSTR lpszWindowName, DWORD dwStyle,
const RECT& rect, CWnd* pParentWnd, UINT nID,
CCreateContext* pContext = NULL)
和BOOL Create(LPCTSTR lpszWindowName, DWORD dwStyle,
const RECT& rect, CWnd* pParentWnd, UINT nID,
CFile* pPersist = NULL, BOOL bStorage = FALSE,
BSTR bstrLicKey = NULL)
我们就可以使用该控件的包裹类的Create函数在非对话框容器中动态地创建此控件的实例。
步骤如下:(本例中欲加入的控件名为MSFlexGrid ,CMSFlexGrid是控件的包裹类,msflexgrid.h是包裹类的头文件)
1.在视类头文件(本例中为TestView.h)中的类定义前加上
#include “msflexgrid.h”
2. 在TestView.h中CTestView类定义的protected部分加上控件包裹类类型的成员变量声明:
class CTestView : public CView
{
...
protected:
CMSFlexGrid m_fgrid;
...
};
3. 用ClassWizard为类CTestView 添加消息WM_CREATE的处理函数CTestView::OnCreate,在此函数中,调用控件类CMSFlexGrid的Create函数:
int CTestView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
// ****** Add your code below this line ********** //
m_fgrid.Create(NULL, WS_VISIBLE,
CRect(50,50,100,100), this, 0); //用this指针作为指向父窗口的指针 m_fgrid.SetCols(2);
m_fgrid.SetRows(10);
m_fgrid.SetTextMatrix(0,0,"序号");
m_fgrid.SetTextMatrix(0,1,"姓名");
// ****** Add your code above this line ********** //
return 0;
}
4.重新链接工程,运行。可以看到当应用程序的视窗生成时,控件也动态地生成了。
5.如果你以后还想改变控件的位置和大小,可以继承CWnd::MoveWindow()函数。例如,若想使控件充满整个窗口,并在父窗口移动和缩放时也随之移动和缩放,可以添加消息WM_SIZE的处理函数OnSize,并加入如下代码:
void CTestView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
m_fgrid.MoveWindow(0,0,cx,cy);
}
1.从Project菜单选择Add To Project下的Components and Controls。
2.在弹出的对话框中双击Registered ActiveX Control子目录,打开此目录。
3.选择你需要的控件,点击Insert按钮,弹出Confirm Classes对话框。
4.在列出的类名中选择需要的类(缺省为全选中,最好接受缺省设置),点击OK,关闭Confirm Classes对话框。
5.点击Close关闭组件廊,该控件的图标即加入到对话框编辑器的控件面板上。
这样,我们就可以在对话框中像使用Windows标准控件那样使用该控件了。但在某些应用中,你可能需要在非对话框容器(如应用程序的窗口)中嵌入ActiveX控件。这时没有对话框编辑器,我们应怎样在非对话框容器中使用ActiveX控件呢?
当组件廊将ActiveX控件添加到你的应用程序后,组件廊会创建一些包裹类(即在Confirm Classes对话框中列出的那些类)。其中有一个类的基类是CWnd,该类是控件的包裹类,它被用作控件与控件包容器之间的接口,有两个公有的Create成员函数:
virtual BOOL Create(LPCTSTR lpszClassName,
LPCTSTR lpszWindowName, DWORD dwStyle,
const RECT& rect, CWnd* pParentWnd, UINT nID,
CCreateContext* pContext = NULL)
和BOOL Create(LPCTSTR lpszWindowName, DWORD dwStyle,
const RECT& rect, CWnd* pParentWnd, UINT nID,
CFile* pPersist = NULL, BOOL bStorage = FALSE,
BSTR bstrLicKey = NULL)
我们就可以使用该控件的包裹类的Create函数在非对话框容器中动态地创建此控件的实例。
步骤如下:(本例中欲加入的控件名为MSFlexGrid ,CMSFlexGrid是控件的包裹类,msflexgrid.h是包裹类的头文件)
1.在视类头文件(本例中为TestView.h)中的类定义前加上
#include “msflexgrid.h”
2. 在TestView.h中CTestView类定义的protected部分加上控件包裹类类型的成员变量声明:
class CTestView : public CView
{
...
protected:
CMSFlexGrid m_fgrid;
...
};
3. 用ClassWizard为类CTestView 添加消息WM_CREATE的处理函数CTestView::OnCreate,在此函数中,调用控件类CMSFlexGrid的Create函数:
int CTestView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
// ****** Add your code below this line ********** //
m_fgrid.Create(NULL, WS_VISIBLE,
CRect(50,50,100,100), this, 0); //用this指针作为指向父窗口的指针 m_fgrid.SetCols(2);
m_fgrid.SetRows(10);
m_fgrid.SetTextMatrix(0,0,"序号");
m_fgrid.SetTextMatrix(0,1,"姓名");
// ****** Add your code above this line ********** //
return 0;
}
4.重新链接工程,运行。可以看到当应用程序的视窗生成时,控件也动态地生成了。
5.如果你以后还想改变控件的位置和大小,可以继承CWnd::MoveWindow()函数。例如,若想使控件充满整个窗口,并在父窗口移动和缩放时也随之移动和缩放,可以添加消息WM_SIZE的处理函数OnSize,并加入如下代码:
void CTestView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
m_fgrid.MoveWindow(0,0,cx,cy);
}
#8
如果不支持MFC可以实现IOleContainer就可以了.
#1
up
#2
顶
#3
你在其他地方如何调用 MFC ActiveX 你在那个框架里就如何调用。
如果你不会调用 ActiveX 就去学习 ActiveX 。
如果你不会调用 ActiveX 就去学习 ActiveX 。
#4
用对话框做容器的话就是一件很简单的事。 可要在ATL做的COM中是没有容器的。 还望多多指教???
#5
在http://www.xue68.com 搜索到过类似的解决方法
#6
没找到啊.
#7
在使用一个已注册的ActiveX控件之前,必须先用组件廊将该控件添加到应用程序中,步骤如下:
1.从Project菜单选择Add To Project下的Components and Controls。
2.在弹出的对话框中双击Registered ActiveX Control子目录,打开此目录。
3.选择你需要的控件,点击Insert按钮,弹出Confirm Classes对话框。
4.在列出的类名中选择需要的类(缺省为全选中,最好接受缺省设置),点击OK,关闭Confirm Classes对话框。
5.点击Close关闭组件廊,该控件的图标即加入到对话框编辑器的控件面板上。
这样,我们就可以在对话框中像使用Windows标准控件那样使用该控件了。但在某些应用中,你可能需要在非对话框容器(如应用程序的窗口)中嵌入ActiveX控件。这时没有对话框编辑器,我们应怎样在非对话框容器中使用ActiveX控件呢?
当组件廊将ActiveX控件添加到你的应用程序后,组件廊会创建一些包裹类(即在Confirm Classes对话框中列出的那些类)。其中有一个类的基类是CWnd,该类是控件的包裹类,它被用作控件与控件包容器之间的接口,有两个公有的Create成员函数:
virtual BOOL Create(LPCTSTR lpszClassName,
LPCTSTR lpszWindowName, DWORD dwStyle,
const RECT& rect, CWnd* pParentWnd, UINT nID,
CCreateContext* pContext = NULL)
和BOOL Create(LPCTSTR lpszWindowName, DWORD dwStyle,
const RECT& rect, CWnd* pParentWnd, UINT nID,
CFile* pPersist = NULL, BOOL bStorage = FALSE,
BSTR bstrLicKey = NULL)
我们就可以使用该控件的包裹类的Create函数在非对话框容器中动态地创建此控件的实例。
步骤如下:(本例中欲加入的控件名为MSFlexGrid ,CMSFlexGrid是控件的包裹类,msflexgrid.h是包裹类的头文件)
1.在视类头文件(本例中为TestView.h)中的类定义前加上
#include “msflexgrid.h”
2. 在TestView.h中CTestView类定义的protected部分加上控件包裹类类型的成员变量声明:
class CTestView : public CView
{
...
protected:
CMSFlexGrid m_fgrid;
...
};
3. 用ClassWizard为类CTestView 添加消息WM_CREATE的处理函数CTestView::OnCreate,在此函数中,调用控件类CMSFlexGrid的Create函数:
int CTestView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
// ****** Add your code below this line ********** //
m_fgrid.Create(NULL, WS_VISIBLE,
CRect(50,50,100,100), this, 0); //用this指针作为指向父窗口的指针 m_fgrid.SetCols(2);
m_fgrid.SetRows(10);
m_fgrid.SetTextMatrix(0,0,"序号");
m_fgrid.SetTextMatrix(0,1,"姓名");
// ****** Add your code above this line ********** //
return 0;
}
4.重新链接工程,运行。可以看到当应用程序的视窗生成时,控件也动态地生成了。
5.如果你以后还想改变控件的位置和大小,可以继承CWnd::MoveWindow()函数。例如,若想使控件充满整个窗口,并在父窗口移动和缩放时也随之移动和缩放,可以添加消息WM_SIZE的处理函数OnSize,并加入如下代码:
void CTestView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
m_fgrid.MoveWindow(0,0,cx,cy);
}
1.从Project菜单选择Add To Project下的Components and Controls。
2.在弹出的对话框中双击Registered ActiveX Control子目录,打开此目录。
3.选择你需要的控件,点击Insert按钮,弹出Confirm Classes对话框。
4.在列出的类名中选择需要的类(缺省为全选中,最好接受缺省设置),点击OK,关闭Confirm Classes对话框。
5.点击Close关闭组件廊,该控件的图标即加入到对话框编辑器的控件面板上。
这样,我们就可以在对话框中像使用Windows标准控件那样使用该控件了。但在某些应用中,你可能需要在非对话框容器(如应用程序的窗口)中嵌入ActiveX控件。这时没有对话框编辑器,我们应怎样在非对话框容器中使用ActiveX控件呢?
当组件廊将ActiveX控件添加到你的应用程序后,组件廊会创建一些包裹类(即在Confirm Classes对话框中列出的那些类)。其中有一个类的基类是CWnd,该类是控件的包裹类,它被用作控件与控件包容器之间的接口,有两个公有的Create成员函数:
virtual BOOL Create(LPCTSTR lpszClassName,
LPCTSTR lpszWindowName, DWORD dwStyle,
const RECT& rect, CWnd* pParentWnd, UINT nID,
CCreateContext* pContext = NULL)
和BOOL Create(LPCTSTR lpszWindowName, DWORD dwStyle,
const RECT& rect, CWnd* pParentWnd, UINT nID,
CFile* pPersist = NULL, BOOL bStorage = FALSE,
BSTR bstrLicKey = NULL)
我们就可以使用该控件的包裹类的Create函数在非对话框容器中动态地创建此控件的实例。
步骤如下:(本例中欲加入的控件名为MSFlexGrid ,CMSFlexGrid是控件的包裹类,msflexgrid.h是包裹类的头文件)
1.在视类头文件(本例中为TestView.h)中的类定义前加上
#include “msflexgrid.h”
2. 在TestView.h中CTestView类定义的protected部分加上控件包裹类类型的成员变量声明:
class CTestView : public CView
{
...
protected:
CMSFlexGrid m_fgrid;
...
};
3. 用ClassWizard为类CTestView 添加消息WM_CREATE的处理函数CTestView::OnCreate,在此函数中,调用控件类CMSFlexGrid的Create函数:
int CTestView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
// ****** Add your code below this line ********** //
m_fgrid.Create(NULL, WS_VISIBLE,
CRect(50,50,100,100), this, 0); //用this指针作为指向父窗口的指针 m_fgrid.SetCols(2);
m_fgrid.SetRows(10);
m_fgrid.SetTextMatrix(0,0,"序号");
m_fgrid.SetTextMatrix(0,1,"姓名");
// ****** Add your code above this line ********** //
return 0;
}
4.重新链接工程,运行。可以看到当应用程序的视窗生成时,控件也动态地生成了。
5.如果你以后还想改变控件的位置和大小,可以继承CWnd::MoveWindow()函数。例如,若想使控件充满整个窗口,并在父窗口移动和缩放时也随之移动和缩放,可以添加消息WM_SIZE的处理函数OnSize,并加入如下代码:
void CTestView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
m_fgrid.MoveWindow(0,0,cx,cy);
}
#8
如果不支持MFC可以实现IOleContainer就可以了.