Windows controls in OCX not visible in VB4 in design mode
Claus Michelsen -- cmi@cri.dk Thursday, January 02, 1997 Environment: VC++ 4.2-flat, Win 95 I am trying to implement an OCX which contains several Windows controls (such as edit, static, tree controls, etc.) but have problems with the fact that an OCX developed in VC doesn't always have a window (e.g. in design mode in VB4). I am currently creating the Windows controls in the OCX in the following manor: int CCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (COleControl::OnCreate(lpCreateStruct) == -1) return -1; m_static.Create(_T("&Test:"), WS_CHILD|WS_VISIBLE, CRect(0, 0, 100, 20), this)); m_edit.Create(WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER, CRect(0, 21, 100, 40), this, 100)); return 0; } This will however not work when the OCX doesn't have a window since the function is never called. Do I have to have a metafile I can show in design mode, or what? I really hope somebody can help me with this, because I am stuck. Best regards, Claus Michelsen Software Engineer CRI A/S, Denmark
Mike Blaszczak -- mikeblas@nwlink.com Thursday, January 02, 1997 At 07:40 1/2/97 -0100, Claus Michelsen wrote: >Environment: VC++ 4.2-flat, Win 95 >Do I have to have a metafile I can show in design >mode, or what? Yep. OLE Controls are OLE objects; they might not get a window and their container might ask them for a cached representation of their data. .B ekiM http://www.nwlink.com/~mikeblas/ I'm afraid I've become some sort of speed freak. These words are my own. I do not speak on behalf of Microsoft.
Mike Bryga -- MBryga@PickSys.com Monday, January 06, 1997 Regarding: > Environment: VC++ 4.2-flat, Win 95 > I am trying to implement an OCX which contains several Windows = controls > (such as edit, static, tree controls, etc.) but have problems with the = fact > that an OCX developed in VC doesn't always have a window (e.g. in = design > mode in VB4).=20 Claus, I derived the following from Tom Armstrong's book on ClassWizard = sub-classed Ole Controls - he also has a nice web site with lots of = info. He adds a function DrawDesign() that is called by OnDrawMetafile() = and conditionally by OnDraw() in design mode. It just paints the = rectangle and the default object name at design time. void CMyControl::OnDraw( CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid) { if (!AmbientUserMode()) DrawDesign(pdc, rcBounds); else DoSuperclassPaint(pdc, rcBounds); } void CMyCOntrol::OnDrawMetafile( CDC* pdc, const CRect& rcBounds) { DrawDesign(pdc, rcBounds); } void CMyControl::DrawDesign( CDC* pdc, const CRect& rcBounds) { CString lpString =3D AmbientDisplayName(); CBrush bkBrush(TranslateColor(GetBackColor())); pdc->FillRect(rcBouns, &bkBrush); pdc->SetTextColor(TranslateColor(GetForeColor())); pdc->SetBkMode(TRANSPARENT); pdc->SetTextAlign(TA_LEFT | TA_TOP); pdc->ExtTextOut(rcBounds.left + 1, rcBounds.top + 1, ETO_CLIPPED, rcBounds, lpString, lpString.GetLength(), NULL); } Hope this helps - I just typed it in, so I can't gaurantee it will = compile or run. Mike
| Вернуться в корень Архива |