how to properly display buttons over an image
-
I have a CFormView where I want to display an image and show some buttons over the image. I get the device context for the view, create a compatible bitmap, use the LPPICTURE Render(*) function to display the image file into the DC, then use BitBlt(*) of CDC to display the image. The buttons are placed onto the form. This kind of works, although if I display another window over the form, or move the cursor into the title bar or the system status bar, all the buttons disappear. I would like to place the buttons dynamically, and tried to use SetWindowPos(*) for one of the buttons. But when I called SetWindowPos(*) for that button, everything (image and other buttons) disappeared. Is there a proper way to display buttons over an image so they don't disappear, and also to do so dynamically?
-
I have a CFormView where I want to display an image and show some buttons over the image. I get the device context for the view, create a compatible bitmap, use the LPPICTURE Render(*) function to display the image file into the DC, then use BitBlt(*) of CDC to display the image. The buttons are placed onto the form. This kind of works, although if I display another window over the form, or move the cursor into the title bar or the system status bar, all the buttons disappear. I would like to place the buttons dynamically, and tried to use SetWindowPos(*) for one of the buttons. But when I called SetWindowPos(*) for that button, everything (image and other buttons) disappeared. Is there a proper way to display buttons over an image so they don't disappear, and also to do so dynamically?
Maybe try on window focus to hide then reshow the buttons. A small workaround!
-
I have a CFormView where I want to display an image and show some buttons over the image. I get the device context for the view, create a compatible bitmap, use the LPPICTURE Render(*) function to display the image file into the DC, then use BitBlt(*) of CDC to display the image. The buttons are placed onto the form. This kind of works, although if I display another window over the form, or move the cursor into the title bar or the system status bar, all the buttons disappear. I would like to place the buttons dynamically, and tried to use SetWindowPos(*) for one of the buttons. But when I called SetWindowPos(*) for that button, everything (image and other buttons) disappeared. Is there a proper way to display buttons over an image so they don't disappear, and also to do so dynamically?
There are four questions :) : - where do you draw (what function of the view) ? - where do you create the buttons ? - how do you create the buttons ? - what can you see at the places of the "hidden" buttons ?
virtual void BeHappy() = 0;
-
There are four questions :) : - where do you draw (what function of the view) ? - where do you create the buttons ? - how do you create the buttons ? - what can you see at the places of the "hidden" buttons ?
virtual void BeHappy() = 0;
I call the functions to draw in the OnDraw(CDC* pDC) function of the CFormView The buttons are put on the form with the resource editor, then I assigned names with class wizard. The image is displayed correctly so it looks like the image is overwriting the buttons. Interestingly, when the cursor is moved to the title bar, the OnDraw gets called, and the buttons disappear. I put in code to detect when the cursor is in the title bar and call Invalidate() in the form to cause OnDraw to be called again, then the buttons are displayed.
-
I call the functions to draw in the OnDraw(CDC* pDC) function of the CFormView The buttons are put on the form with the resource editor, then I assigned names with class wizard. The image is displayed correctly so it looks like the image is overwriting the buttons. Interestingly, when the cursor is moved to the title bar, the OnDraw gets called, and the buttons disappear. I put in code to detect when the cursor is in the title bar and call Invalidate() in the form to cause OnDraw to be called again, then the buttons are displayed.
Please try to set
WS_CLIPCHILDREN
style to your form (possible from the resource editor too) :)virtual void BeHappy() = 0;
-
Please try to set
WS_CLIPCHILDREN
style to your form (possible from the resource editor too) :)virtual void BeHappy() = 0;
-
Please try to set
WS_CLIPCHILDREN
style to your form (possible from the resource editor too) :)virtual void BeHappy() = 0;
Oops, I was a little hasty. I also show static text below the button. I call OnCtlColor(*) and set the hbr (HBRUSH) returned to a hollow brush. The text is then displayed over the image. After setting WS_CLIPCHILDREN, the text background is no longer transparent but light gray.
-
Maybe try on window focus to hide then reshow the buttons. A small workaround!
-
Oops, I was a little hasty. I also show static text below the button. I call OnCtlColor(*) and set the hbr (HBRUSH) returned to a hollow brush. The text is then displayed over the image. After setting WS_CLIPCHILDREN, the text background is no longer transparent but light gray.
Hmm... So the style can not be accepted :) - How about
EnumChildWindows(..)
(at the ending of your drawing procedure) andRedrawWindow(..)
for each child in its (ofEnumChildWindows(..)
) callback function ?virtual void BeHappy() = 0;
-
Hmm... So the style can not be accepted :) - How about
EnumChildWindows(..)
(at the ending of your drawing procedure) andRedrawWindow(..)
for each child in its (ofEnumChildWindows(..)
) callback function ?virtual void BeHappy() = 0;