<p>I used the owner-drawn strategy on CMyListBox class which derives from CListBox. I only want the DrawItem() method to perform when I insert an item in the listbox. But the method is invoked many times. How can I change to invoke it whenever I need.</p>

The DrawItem() method is called whenever there is a requirement to draw any given item in the listbox.  If you do not respond to it you are likely to get a blank area in your list box, where the drawn data has been erased and you have not refreshed it.  If you really do not think the drawing is necessary, you could do something like
```
```
void CMyListBox::DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct )
{
   if (!m_DrawingEnabled)
     return;
}
```
```
Where m_DrawingEnabled is a member you maintain to stop unnecessary draws,