|
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'm sorry, I don't understand. Do you mean call SetFocus() for the buttons?
|
|
|
|
|
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.
|
|
|
|
|
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.
|
|
|
|
|
Hmm... So the style can not be accepted
- How about EnumChildWindows(..)
(at the ending of your drawing procedure)
and RedrawWindow(..) for each child
in its (of EnumChildWindows(..) ) callback function ?
virtual void BeHappy() = 0;
|
|
|
|
|
I did something similar. After the drawing procedure, I have each button redraw itself, and this appears to be working. Thanks to all for your time and help! 
|
|
|
|
|
Hello, I have been working on an MFC project that looks like a registry editor which have a treeview on the left side and listview on the right side. Once the user sets focus on one item in the listview and clicks ctrl+c, how do we add a functionality to copy the listview item text into the clipboard? please help.
|
|
|
|
|
|
Hi,
How to put marquee progress bar in win32 under windows XP.
|
|
|
|
|
Create your progress bar with PBS_MARQUEE[^] style.
You can start and stop the animation, and control its speed using PBM_SETMARQUEE[^] message. 
|
|
|
|
|
|
I am getting compilation error:
C2065: 'PBS_MARQUEE' : undeclared identifier
I written the code the InitDialog()
HWND hwndProgress=GetDlgItem(m_hwnd,IDC_PROGRESS1);
SetWindowLongPtr(hwndProgress, GWL_STYLE, PBS_MARQUEE);
My application is win32. Please suggest??
|
|
|
|
|
Check your SDK version and the value asigned to the WINVER symbol.
May be the definition of that constant is disabled by a old WINVER number
2 bugs found.
> recompile ...
65534 bugs found.
|
|
|
|
|
as emilo told, you can see those values in CommCtrl.h as
#if (_WIN32_WINNT >= 0x0501)
#define PBS_MARQUEE 0x08
#endif // _WIN32_WINNT >= 0x0501
#if (_WIN32_WINNT >= 0x0501)
#define PBM_SETMARQUEE (WM_USER+10)
#endif // _WIN32_WINNT >= 0x0501
so check your source code (probably in targetver.h) for #define _WIN32_WINNT and check the value.
Also, you can try defining those values manually in your code as
#define PBS_MARQUEE 0x08
#define PBM_SETMARQUEE (WM_USER+10)

|
|
|
|
|
err... this should be said to the OP not to myself
2 bugs found.
> recompile ...
65534 bugs found.
|
|
|
|
|
he might have seen it already 
|
|
|
|
|
Hi all,
There is a volume in my hard drive that currently does not has any drive letter. I need to assign a drive letter to this volume. Please suggest me some way to do so.
If a volume has any drive letter already then I can change it's drive letter by getting it's GUID and assign any other drive letter easily. But if the volume does not has any drive letter then how can I get its GUID to assign a drive letter.
If there is any other way to do this please suggest me.
Thanks & Regards
Madan
|
|
|
|
|
If you are asking not related to API, then just check this article from microsoft.
It will help you do that [^]
Величие не Бога может быть недооценена.
|
|
|
|
|
|
How could I run one of my class member Functions in a new thread:
ex:
class e
{
...
public:
void myMainLoopFunc(void){...}
};
I want to run myMainLoopFunc in a new thread what should I do?
|
|
|
|
|
I think you should get familiar with AfxBeginThread([^])
And its usage, surely u will understand how to do that by understanding about AfxBeginThread.
well here is a code. Make the myMainLooFunc with the specified function signature and static(To know why, check the msdn for more help).
class e
{
...
public:
static UINT myMainLoopFunc(LPVOID kodata)
{
...
}
};
Величие не Бога может быть недооценена.
|
|
|
|