并使对话框作为ocx的形状,随ocx的大小变化而变化
是在OnDraw中做吗,怎么做呢?在线等!!!!!!!!答者有分

解决方案 »

  1.   

    将对话框当作子窗口放进OCX中,在WM_SIZE里面根据OCX窗口大小调整对话框大小
      

  2.   

    如果是开发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);}
      

  3.   

    ocx自带有窗口,你可以在这窗口里面create你想使用的大多数控件,何必往ocx中放对话框呢?
      

  4.   

    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); //对话框显示
      

  5.   

    可以 添加 对话框 资源 到  项目中 ,然后 生成一个 对话框类来 控制,在  控件 头文件 中 定义 该对话框变量: dlg1
    在 控件实现文件 中的  OnCreate 事件中  通过 dlg1.Create(IDD_DIALOG1,this);dlg1.ShowWindow(SW_SHOW);来生成并显示OK了