怎样将简单的MFC对话框在ocx中显示?

wml231 2009-12-05 04:21:07
并使对话框作为ocx的形状,随ocx的大小变化而变化
是在OnDraw中做吗,怎么做呢?

在线等!!!!!!!!答者有分
...全文
271 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
aa_0910 2010-01-01
  • 打赏
  • 举报
回复
ding.....
我在地球 2009-12-22
  • 打赏
  • 举报
回复
可以 添加 对话框 资源 到 项目中 ,然后 生成一个 对话框类来 控制,在 控件 头文件 中 定义 该对话框变量: dlg1
在 控件实现文件 中的 OnCreate 事件中 通过 dlg1.Create(IDD_DIALOG1,this);dlg1.ShowWindow(SW_SHOW);来生成并显示

OK了
RockEx 2009-12-19
  • 打赏
  • 举报
回复
1, 在“资源“视图中,右键”对话框“,选择”插入对话框“来创建一个默认的对话框。

2, 删除默认产生的“确定“和”取消“按钮,调整对话框大小为230*40。

3,更改对话框ID为IDD_MAINDIALOG,并修改对话框属性:Border—none, Style – Child, System Menu – False, Visible – True.(这几个属性很重要,否则对话框可能不能显示)


5,为对话框创建一个类,名为CMainDialog,


现在我们为类增加成员变量:

1,为CMyActiveXCtrl类增加一个变量m_MainDialog,类型为CMainDialog


增加支持代码

1,为CMyActiveXCtrl处理WM_CREATE事件的代码,在其中加入:

m_MainDialog.Create(IDD_MAINDIALOG, this);

并在OnDraw函数中加入:

m_MainDialog.MoveWindow(rcBounds, TRUE); //对话框显示
wml231 2009-12-19
  • 打赏
  • 举报
回复
哦,也是,不过我的控件是第三方的,不知道能创建不,需要测试下
rambo_ghaip 2009-12-16
  • 打赏
  • 举报
回复
ocx自带有窗口,你可以在这窗口里面create你想使用的大多数控件,何必往ocx中放对话框呢?
Dan_M 2009-12-16
  • 打赏
  • 举报
回复
4楼正解
wml231 2009-12-14
  • 打赏
  • 举报
回复
多谢,回去我试下,晚些散分
wml231 2009-12-06
  • 打赏
  • 举报
回复
属性好像没戏,多谢两位,4楼的方法能详细点吗?
NET_SPY_SHI 2009-12-06
  • 打赏
  • 举报
回复
如果是开发ocx,可以这样:
假设ocx的名称为SMC_NTM,使用MFC创建
CSMC_NTMCtrl::CSMC_NTMCtrl()
{
InitializeIIDs(&IID_DSMC_NTM, &IID_DSMC_NTMEvents);

EnableSimpleFrame();
// TODO: 在此初始化控件的实例数据。
}
void CSMC_NTMCtrl::OnDraw(
CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
{
if (!pdc)
return;

// TODO: 用您自己的绘图代码替换下面的代码。
//pdc->FillRect(rcBounds, CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));
//pdc->Ellipse(rcBounds);
m_TheOCXDialog->MoveWindow(rcBounds,TRUE);//对话框显示
}
// CSMC_NTMCtrl 消息处理程序
//初始化对话框
int CSMC_NTMCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (COleControl::OnCreate(lpCreateStruct) == -1)
return -1;

// TODO: 在此添加您专用的创建代码
m_TheOCXDialog=new COCXDialog();
m_TheOCXDialog->Create(IDD_DIALOG_OCX,this);
m_TheOCXDialog->ShowWindow(SW_SHOW);
return 0;
}

//调整对话框大小
void CSMC_NTMCtrl::OnSize(UINT nType, int cx, int cy)
{
COleControl::OnSize(nType, cx, cy);

// TODO: 在此处添加消息处理程序代码
CRect rectTmp;
this->GetClientRect(rectTmp);
m_TheOCXDialog->MoveWindow(rectTmp,TRUE);

}
yexiaoya 2009-12-05
  • 打赏
  • 举报
回复
可以设置那个 控件的属性 好像
zoulie 2009-12-05
  • 打赏
  • 举报
回复
将对话框当作子窗口放进OCX中,在WM_SIZE里面根据OCX窗口大小调整对话框大小
wml231 2009-12-05
  • 打赏
  • 举报
回复
d
wml231 2009-12-05
  • 打赏
  • 举报
回复
没有啊,我就是想写个控件,控件加载就显示对话框里的信息
然后,用户拖动和拉伸控件,对话框随之变化,
很难做到吗?
WecanHuang 2009-12-05
  • 打赏
  • 举报
回复
你要反其道而行之?
那估计要改很多代码

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧