Drawing on CEditView or CRichEditView
Seth Goldstein -- seth@mathworks.com Tuesday, January 23, 1996 Hi folks, I've been just about tearing out my hair over this one... All I want to do is receive OnDraw (or even OnPaint) calls so I can touch up a CEditView or CRichEditView with my own little decorations. Overriding OnDraw doesn't work (it never gets called, because that's blocked by CCtrlView::OnPaint). Overriding OnPaint almost works, except I can't call C*EditView::OnPaint, so only my stuff gets painted. Is there a way to do this within MFC? Am I missing something obvious? If not, any suggestions for doing it using Win32? Thanks a million, Seth -- +------------------------------------------------------+ | Seth Goldstein email: seth@mathworks.com | | The Mathworks, Inc. http://www.mathworks.com | | info: info@mathworks.com | |------------------------------------------------------| | PGP Public Key on server | | http://www-swiss.ai.mit.edu/~bal/pks-toplev.html | +------------------------------------------------------+
Mike Blaszczak -- mikeblas@msn.com Friday, January 26, 1996 [Mini-digest: 2 responses] Seth Goldstein wrote: > All I want to do is receive OnDraw (or even OnPaint) > calls so I can touch up a CEditView or CRichEditView with > my own little decorations. The Red Hot Chili Peppers, in a Rolling Stone interview a few years ago, said that they were finally "popular enough to sell the kids dodads to sew on their underwear". I'm happy to see that MFC is finally popular enough that people want to sew dodads on their edit controls. > Is there a way to do this within MFC? Am I missing something > obvious? If not, any suggestions for doing it using Win32? You need to subclass the edit control that lives in the view. To do that, you need to override the whole view class and override the Create() function. So: 1) Create your own derivative of CEditView 2) Create your own derivative of CEdit 3) In CYourView::Create(), let MFC create the window then call SubclassDlgItem() to hook CYourEdit to the edit control created by MFC for the view 4) Override OnPaint() in CYourEdit and do whatever the heck you'd like. .B ekiM TCHAR szRHCP[] = _T("Out on my porch 'cause I lost my house key, pick up my book I read Bukowski."); -----From: Chong ZhangOn Tue, 23 Jan 1996, Seth Goldstein wrote: > Hi folks, > > I've been just about tearing out my hair over this one... > > All I want to do is receive OnDraw (or even OnPaint) > calls so I can touch up a CEditView or CRichEditView with > my own little decorations. > > Overriding OnDraw doesn't work (it never gets called, > because that's blocked by CCtrlView::OnPaint). Overriding > OnPaint almost works, except I can't call C*EditView::OnPaint, > so only my stuff gets painted. > > Is there a way to do this within MFC? Am I missing something > obvious? If not, any suggestions for doing it using Win32? Can you call CCtrlView::OnDraw from your OnPaint? > > Thanks a million, > Seth > -- It may not be worth a million thanks :-) > +------------------------------------------------------+ > | Seth Goldstein email: seth@mathworks.com | > | The Mathworks, Inc. http://www.mathworks.com | > | info: info@mathworks.com | > |------------------------------------------------------| > | PGP Public Key on server | > | http://www-swiss.ai.mit.edu/~bal/pks-toplev.html | > +------------------------------------------------------+ >
Seth Goldstein -- seth@mathworks.com Monday, January 29, 1996 I've managed to get the result I've been looking for just by subclassing CRichEditView and overriding OnPaint. By the way, I left out an important piece of information (:v)), that my scribblings only need to be in the margins, not on top of the text itself. First, I had to call Default() inside of OnPaint (ahem...newbie alert). The second problem was that when I did my drawing, the control stopped doing *its* drawing. The cause was that the Class Wiz' default scaffolding declared a CPaintDC for me. The constructor for CPaintDC called BeginPaint, which validated the update region. Therefore, the output from calling Default() was clipped to nothing. My solution was to use the CClientDC instead of the CPaintDC, since my little scribblings are so inexpensive. Hope I'm not pointing a cannon at myself... Thanks for your help, Seth -- +------------------------------------------------------+ | Seth Goldstein email: seth@mathworks.com | | The Mathworks, Inc. http://www.mathworks.com | | info: info@mathworks.com | |------------------------------------------------------| | PGP Public Key on server | | http://www-swiss.ai.mit.edu/~bal/pks-toplev.html | +------------------------------------------------------+
| Вернуться в корень Архива |