Need some mfc dc wrapper help (CClientDC,CPaintDC etc)

Started by
-1 comments, last by Zeke 21 years, 8 months ago
Ok ive got a problem to do with skinning a dialog with a bitmap and an activeX control. Ill Show you some code to make things clearer: My OnPaint() handler:
  
CPaintDC dc(this); // device context for painting

HDC hdc=dc.GetSafeHdc();
if(m_pSkin)//m_pSkin is my calss for skinning

{
	m_pSkin->Skin(&hdc);//CSkin::Skin(HDC*) just bitblits

                            //from its stored dc (with the bmp)

                            //to the hdc passed in

}
::ReleaseDC(GetSafeHwnd(),hdc);
  
this works perfectly until i add a custom made activex control. The problem is that my activex control doesnt show up. I figured it was because the call to Skin() draws over the control (even though it doesnt paint over other controls like buttons and edit controls) so i did a bit of tinkering. I changed the CPaintDC to CClientDC and lo and behold it worked. I dont really understand the difference between CPaintDC and CClientDC (i know that CClientDC is the dc of the client area only but thats all)so I have no idea why this works but i was happy. That is until I put an OutputDebugString("Painting") in the OnPaint function. To my dismay it triggers over and over and over. I had no idea why, but if I change it back to CPaintDC it only triggers when its supposed to and the same if i remove the call to ::ReleaseDC() but if i remove that then i will get resource leaks right? Can anyone tell me why OnPaint is called over and over if i call ReleaseDC() with CClientDC and yet doesnt if i call ::ReleaseDC() with CPaintDC. And what is the difference between these 2 dc''s (also should i only be using CPaintDC in OnPaint()?) Finally does anyone have any idea on how to skin a window with an activex control on it and be able to show the activeX control without these problems? Sorry for all the questions but I feel I need to learn more about this area because i know very little about device contexts. Thanks for any help you can offer
Just my thoughts take them as you will. "People spend too much time thinking about the past, whatever else it is, its gone"-Mel Gibson, Man Without A Face

This topic is closed to new replies.

Advertisement