ActiveX控件的OnDraw函数可以实现一个输入框和一个按钮吗?
其中输入框中可以填写任意文本,点击按钮后将文本提交.
如果不能够,那有没有其他的办法可以实现那?
谢谢~~

解决方案 »

  1.   

    是这样的,不知道你是否注意到了ActiveX的Ctrl类是派生自一个COleControl的,而COleControl是派生自CWnd的.对于一个窗口,你可以放任何windows控件在上面.
      

  2.   

    当然,我曾经为了方便,创建了一个child属性的dialog,没有边框,贴在了这个ctrl里,因为这样你可以在资源视图中方便的设计你的界面布局了
      

  3.   

    派生个CDialog 如CMyDialog
    你Ctrl中申明一个成员变量:CMyDialog m_dlgMain.;
    在Ctrl OnCreate中处理: extern C****App theApp;
    CRect rect;
    theApp.m_pMainWnd = &m_dlgMain;
    theApp.m_pActiveWnd = this; if(m_dlgMain.Create(IDD_DIALOG_MAIN, this))
    {
    GetClientRect( rect);
    m_dlgMain.SetWindowPos(NULL , rect.left ,rect.top + 100 ,rect.Width() , rect.Height() , SWP_SHOWWINDOW);
    }然后就想普通的对话框设计了
      

  4.   

    IDD_DIALOG_MAIN 为你CMyDialog的资源ID
      

  5.   

    可以。
    画一个Edit控件就可以了,相应按钮消息就行了,不知你要将内容提交到哪里?
      

  6.   

    int CSComListCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct) 
    {
    if (COleControl::OnCreate(lpCreateStruct) == -1)
    return -1;

    CRect rect;
    GetClientRect(&rect);
    rect.DeflateRect (1,1,1,1); m_pEdit = new CsEdit; DWORD dwStyle = WS_GROUP | WS_VISIBLE | WS_CHILD /*| WS_BORDER*/ | ES_AUTOHSCROLL;// | WS_TABSTOP;//ES_READONLY;
    //int height = ::GetSystemMetrics(SM_CYVSCROLL);
    int cx = GetSystemMetrics(SM_CXVSCROLL);
    int yEdge = ::GetSystemMetrics(SM_CYEDGE);
    rect.right -= (cx+ yEdge);
    m_pEdit->Create(dwStyle,rect,this,IDC_EDIT); m_pButton = new CsButton;

    rect.left = rect.right+1;
    rect.right += cx;   //dwStyle = DFCS_SCROLLDOWN | DFCS_FLAT;
    //dwStyle |= DFCS_PUSHED; dwStyle = BS_OWNERDRAW | WS_VISIBLE | WS_CHILD;// | WS_TABSTOP;
      
    m_pButton->Create ("",dwStyle,rect,this,IDC_BUTTON); return 0;
    }void CSComListCtrl::OnSize(UINT nType, int cx, int cy) 
    {
    COleControl::OnSize(nType, cx, cy);

    if(cx == 0 || cy == 0)
    return; CRect windowRect;
    GetWindowRect(&windowRect);
    CWnd* pWnd = GetParent();
    if(pWnd)
    {
    pWnd->ScreenToClient (&windowRect);
    SetRectInContainer(&windowRect);
    } CRect rect(0,0,cx,cy); rect.DeflateRect (4,2,2,2);
    int vcx = GetSystemMetrics(SM_CXVSCROLL);
    m_pEdit->MoveWindow (rect.left ,rect.top + 1 ,rect.Width() - (cy - 1), rect.Height () - 2); //rect.left = rect.right - vcx;
    rect.left = rect.right - (cy - 3);
    m_pButton->MoveWindow(&rect);

    }
      

  7.   

    采用有窗口的activex,也就是设定 m_bWindowOnly=TRUE;
    采用资源或者是动态的Create都可以的。OnDraw里面只能画一些东西,不能画控件的。
      

  8.   

    在你的CSComListCtrl构造函数里,直接写上,m_bWindowOnly=TRUE,就可以了
      

  9.   

    但好象没有m_bWindowOnly 这个成员变量呀
      

  10.   

    我是用MFC ActiveX ControllWizard 创建的
      

  11.   

    晕,前段时间面试的时候老是问一些ActiveX的控件的问题,看来今晚得去补一下呀。