Derived class OnPaint() question
-
Hi guys, I am creating a CEdit derived class and I notice the overriden
OnPaint()
will not get called if I don't useCreate()
to create the control. If I draw a CEdit control on my dialog from Resource Editor and uses it by a pointer (assuming the CEdit derived class is CMyEdit:pMyEdit = (CMyEdit *)GetDlgItem(IDC_MY_EDIT); pMyEdit->SetFont(&editFont, TRUE); pMyEdit->SetWindowText(_T("Testing"));
the
OnPaint()
is never called. But the following will do:pMyEdit->Create(dwStyle, Rect, this, IDC_MY_EDIT);
Why is that? What does it mean when a control has been created from the resource editor, compared to created manually in the code? Also, is there a member function for CEdit that can be overriden to let redraw of only the content (text) and background colour? Pretty much the same as
DrawItem()
for CListCtrl. Thanks alot -
Hi guys, I am creating a CEdit derived class and I notice the overriden
OnPaint()
will not get called if I don't useCreate()
to create the control. If I draw a CEdit control on my dialog from Resource Editor and uses it by a pointer (assuming the CEdit derived class is CMyEdit:pMyEdit = (CMyEdit *)GetDlgItem(IDC_MY_EDIT); pMyEdit->SetFont(&editFont, TRUE); pMyEdit->SetWindowText(_T("Testing"));
the
OnPaint()
is never called. But the following will do:pMyEdit->Create(dwStyle, Rect, this, IDC_MY_EDIT);
Why is that? What does it mean when a control has been created from the resource editor, compared to created manually in the code? Also, is there a member function for CEdit that can be overriden to let redraw of only the content (text) and background colour? Pretty much the same as
DrawItem()
for CListCtrl. Thanks alot -
The two member functions SetFont() and SetWindowText() send different messages to the edit window rather than WM_PAINT. For example, SetWindowText() sends WM_SETTEXT. You can override OnDraw() in the edit view. Kuphryn
Thanks kuphryn, So it seems that for CEdit control not all display related operations will go through WM_PAINT (i.e. in MFC,
OnPaint()
) at the end. I found it a bit odd: using different ways when they all lead to the CEdit control's display needing to be refreshed eventually. I happened to find this post[^] which the guy asks exactly what I was looking. The control is the CEdit type, so I won't be able to overridingOnDraw()
. I need something that has the appearance and functionalities of the CEdit and which then I can have/create a general function to customise its output(display) content (e.g. text, background colours), once for all. Thanks. -
Thanks kuphryn, So it seems that for CEdit control not all display related operations will go through WM_PAINT (i.e. in MFC,
OnPaint()
) at the end. I found it a bit odd: using different ways when they all lead to the CEdit control's display needing to be refreshed eventually. I happened to find this post[^] which the guy asks exactly what I was looking. The control is the CEdit type, so I won't be able to overridingOnDraw()
. I need something that has the appearance and functionalities of the CEdit and which then I can have/create a general function to customise its output(display) content (e.g. text, background colours), once for all. Thanks. -
It is possible to override OnDraw() in an edit view. What type of CEdit object is it? Kuphryn
Hi Kuphryn, I creat and use the CEdit control from the resource view, it's Edit Control by the name. I'd use a CEdit derived class with it, like in my original post. And I'm hoping to handle the text content painting operation myself. I looked on MSDN and I couldn't find possible
OnDraw()
for CEdit, can you kindly give me an example? Thanks again. -
Hi Kuphryn, I creat and use the CEdit control from the resource view, it's Edit Control by the name. I'd use a CEdit derived class with it, like in my original post. And I'm hoping to handle the text content painting operation myself. I looked on MSDN and I couldn't find possible
OnDraw()
for CEdit, can you kindly give me an example? Thanks again. -
Hi Kuphryn, perhaps my original post wasn't not clear. That's exactly what I was doing in the first place, to add the WM_PAINT handler by overriding
OnPaint()
in the sub-class. The problem I am having is thatOnPaint()
is never called if I use the sub-class directly with the control I created from the resource view. But if I explicitly create the control in run-time usingCreate()
,OnPant()
gets called no problem. You can look my first post for the example. Thanks.