|
(Don't forget error handling and storing and resetting the previous font to the DC too...)
Please let me know how can i do the same..
|
|
|
|
|
HFONT originalFont = (HFONT)::SelectObjeft(the_hdc, (HFONT)(*the_cfont_pointer));
...perform drawing or whatever you wish to do with the DC and the font here...
::SelectObject(the_hdc, originalFont);
With error handling i just generally meant checking your pointers and handles against NULL and so on, just the usual stuff.
> The problem with computers is that they do what you tell them to do and not what you want them to do. <
> Life: great graphics, but the gameplay sux. <
|
|
|
|
|
Thanks for ur reply..
if i used only...below line..
(HFONT)::SelectObjeft(the_hdc, (HFONT)(*the_cfont_pointer));
and if do not do..
::SelectObject(the_hdc, originalFont);
may i know the disadvantage
|
|
|
|
|
Your font will still be selected in the device context, which means that if some other text is written on the screen, it will be with your font and not the default font.
|
|
|
|
|
Well, first of all, why you should do it is because the documentation[^] clearly states so:
This function returns the previously selected object of the specified type. An application should always replace a new object with the original, default object after it has finished drawing with the new object.
Aside of this, i believe if you don't do it, it can lead to resource leaks. For example, when you later on destroy your CFont object, it will try to call DeleteObject on the font resource, however, since this font is still selected into your DC, it will fail, but your CFont gets destroyed anyways, and since this CFont was your only "connection" to the actual font resource (your CFont's m_hFont member held the handle to this resource), you loose control over it, it will sit in memory, taking up space in Windows's resource pool, and never get freed up (unless it gets destroyed when your application quits, i believe the system now does that, it didn't used to in the old WIn95-98 times i think). There are probably many other possibilities how one can screw up things by forgetting to restore graphic tools, but i am not aware of them, never did any "research" about this topic really.
> The problem with computers is that they do what you tell them to do and not what you want them to do. <
> Life: great graphics, but the gameplay sux. <
|
|
|
|
|
I had wrote a dialog based application. I want to hide main dialog at startup. I use ShowWindow( SW_HIDE ) function in InitDialog of DialogBox, but it is not working
Kindly help !!!
thanks in advance
-kk.tvm-
|
|
|
|
|
Try setting "Visible" to "FALSE" on your dialog in the resource editor.
> The problem with computers is that they do what you tell them to do and not what you want them to do. <
> Life: great graphics, but the gameplay sux. <
|
|
|
|
|
|
Well, if you haven't changed it, then by default a dialog based application calls DoModal on the dialog and DoModal has -as far as i can tell from the code- showing the dialog hardcoded into it. This generally makes
sense since usually there's no point in having an Invisible MODAL dialog in your application.
However, I can think of 3 things you could try:
1. Write your own DoModal, using the MFC code (copy-pasting) but removing the "show the dialog" part. Not a very nice solution but might work...
2. When displaying your dialog, either change its size to 0 or move it outside of the user's screen (in OnInitDialog) so the user doesn't actually see the dialog when it comes up, and in OnInitDialog post some message (WM_APP for example) to your dialog and in the message's handler, hide your dialog and restore the right position or size. This is an even uglier solution if you ask me...
3. Don't use domodal, change your app to use a modeless dialog, this you can create invisible and it won't be shown "automatically", i'd go this path if i were you, changing the application to use a modeless dialog instead of the modal one isn't too much trouble and it is the most elegant solution.
> The problem with computers is that they do what you tell them to do and not what you want them to do. <
> Life: great graphics, but the gameplay sux. <
|
|
|
|
|
thanks for your solutions
-kk.tvm-
|
|
|
|
|
kk.tvm wrote: I use ShowWindow( SW_HIDE ) function in InitDialog of DialogBox, but it is not working
Until InitDialog() has returned, the dialog window is not shown. So, don't be surprised if that fails.
Instead, put that ShowWindow(SW_HIDE) call as the first line within your dialog's OnPaint() handler. BTW, may I politely ask why are you hiding the dialog window?
It is a crappy thing, but it's life -^ Carlo Pallini
|
|
|
|
|
Hi Rajesh
It worked, but not smooth. I developed a system tray application, it will run automatically when system starts. So i like to avoid screen appearance when starting
thank u very much
-kk.tvm-
|
|
|
|
|
What do you mean "not smooth"? If you're using a tray application, and you want the dialog to be shown at some point of time, you may have to slightly tweak this approach. Because, if you're hiding the window within the OnPaint() handler, the window will NEVER be shown! (My assumption was that you never want the dialog to be shown).
But, you can use a boolean data member to decide if or not to hide the window.
It is a crappy thing, but it's life -^ Carlo Pallini
|
|
|
|
|
|
use the ShowWindow( SW_HIDE ) at the end of the oninit function, so your dialog is fully initialized and can react approbiate. Think about howthe user restores the dialog
Press F1 for help or google it.
Greetings from Germany
|
|
|
|
|
|
If you want to advertise, pay for it like others do. This forum is exclusively for C++/MFC queries. Your post will be removed.
It is a crappy thing, but it's life -^ Carlo Pallini
|
|
|
|
|
I am developing an application to play mp3 files using directshow .I want to show visualization like windows media player .But I am not getting how do i this . Is there any filter or any technique to show visualization in custom mp3 player.
|
|
|
|
|
what's the meaning of 'visualization'?
it's my pleasure to make friend with you.
|
|
|
|
|
Visualization is the visualization effects on to the renderer screen. such that when we play mp3 or any audio file in the media player then in the media player it produces the Album Art or Bars & Waves or Battery visualization effects.
|
|
|
|
|
I have a SDI project. I try to change the background colors of both its View and Frame.
For the View, i try :
CMyView::CmainframeView()
{
m_brush.CreateSolidBrush(RGB(100, 255, 100));
}
BOOL CMyView::OnEraseBkgnd(CDC* pDC)
{
return TRUE;
}
void CMyView::OnDraw(CDC* pDC)
{
pDC->SelectObject(&m_brush);
CRect rect;
pDC->GetClipBox(&rect);
pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(), PATCOPY);
}
and it works really well ! But when i try to change background color of CMyFrame :
int CMyFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
m_brush.CreateSolidBrush(RGB(255, 0, 100));
}
BOOL CMyFrame::OnEraseBkgnd(CDC* pDC)
{
return TRUE;
}
void CMyFrame::OnPaint()
{
CPaintDC pDC(this);
pDC.SelectObject(&m_brush);
CRect rect;
pDC.GetClipBox(&rect);
pDC.Rectangle(rect);
pDC.PatBlt(rect.left, rect.top, rect.Width(), rect.Height(), PATCOPY);
}
the background color only changes when the window is resize, but it flirt. I also try to hande WM_SIZE message but it doesn't help. Can you give me some suggestions ?
|
|
|
|
|
Not really sure what you're trying to achieve by painting on the frame because the frame is pretty much covered with other things.
CPaintDC will only give you the DC for the client area.
To paint other areas, use CWindowDC .
«_Superman_»
I love work. It gives me something to do between weekends.
|
|
|
|
|
I have two DateTime picker Controls in my dialog: (1) One is for collecting the Users selected date(style is: :spin Control) the other control is (2) simply collects the time the User selects.
In (1) which selection do you select in the Property Page for the control, ie, DTN_DATETIMECHANGED, etc. And once you have made that selection what is the code (in MFC) for retrieving the data?
In (2) which selection do you select in the Property Page for the control, ie, DTN_DATETIMECHANGED, etc. And once you have made that selection what is the code (in MFC) for retrieving the data? I want to insure the format recieved is hh:mm (no seconds).I need sample code for each control: (1) and (2).
I need working examples; if you do not have such, don't bother responding, PLEASE!
A C++ programming language novice, but striving to learn
|
|
|
|
|
Larry Mills Sr wrote: ...what is the code (in MFC) for retrieving the data?
Use the GetTime() method.
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
David, the first (1) picker has an assigned varable of m_cDate and the second (2) has an assigned varable of m_cTime. if I use CString str = m_cDate.GetTime() will it return a str with the value in the picker? and should this value be received in the DTN_DATETIMECHANGED notification function or what function should I select in the PropertyPage for the picker? I don't know, that's why I'm asking?
A C++ programming language novice, but striving to learn
|
|
|
|