|
I've dusted off one very old project I was involved in. There was similar problem - there was a CListCltr directly on CDialog (no list controls) which was disappearing after Alt+Tab. Adding a WM_ACTIVATEAPP handler solved the problem:
void CSomeDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
{
CDialog::OnActivate(nState, pWndOther, bMinimized);
if (nState == WA_ACTIVE)
{
m_lst.BringWindowToTop();
}
}
Tomasz Sowinski -- http://www.shooltz.com
|
|
|
|
|
Hmm, I did like this
- Added ON_WM_ACTIVATEAPP in the message map
- Added the OnActivate method to one of the dialogs
- Added a breakpoint at CDialog::OnActivate(...)
but the breakpoint was never found... Did I do something wrong?
/T
|
|
|
|
|
|
[Tomasz, please send me a mail instead because I have to poll for new messages... don't know why but I'm not getting any replies in my mailbox.]
Yes, I clicked the tab -> the dialog with the CListCtrl showed up -> I clicked the CListCtrl somewhere -> tabbed away -> tabbed back -> the CListCtrl is gone.
Now I wanted to check which window was on the top of the z-order by using GetTopWindow(). And I did this by reacting to a click on the dlg, not the CListCtrl, AFTER I had toggled back the app (that is when the CListCtrl had disappeared). So I set a breakpoint in the OnLButtonDown handler to check the handles for the dialog and the ctrl. If the CListCtrl is beneath the dialog then the handles of ctrl and top should NOT be equal. At least that's what I thought...
void CsomeDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
CWnd* ctrl = &m_List;
CWnd* dlg = this;
CWnd* top = GetTopWindow();
}
The handles were all different... but that maybe depends on something else... what wa important here was that when I pressed F5 to continue running the app, the CListCtrl showed up again...?!?!
|
|
|
|
|
Check top->GetDlgCtrlID(). It may give you an idea which window is on top,
Tomasz Sowinski -- http://www.shooltz.com
|
|
|
|
|
Yes, it did! It says the dialog is on top. But, from what I know the CListCtrl is a child window of the dialog and therefore the ctrl should be visible as well... or is it not a child window? Do I have to make an explicit call to m_List.Create from the dlg to make it a child? I always thought that I if I drag a ctrl on a dialog, the explicit creation of the ctrl is not needed since the wizard adds a variable for me and updates the DDX stuff...
It's like the ctrl doesn't update its painting...
Well, I'll send you a sample project.
/T
|
|
|
|
|
I've just realized that you're clicking on a dialog surface - it's no surprise that it becomes a top window.
Anyway, I have no idea why aren't you getting a WM_ACTIVATEAPP message. Can you check with Spy++, if your app gets one when you Alt-Tab?
BTW: you don't need to call Create on m_List. It's created by Windows during the call to DialogBox or CreateDialog.
Tomasz Sowinski -- http://www.shooltz.com
|
|
|
|
|
Hi Tomasz,
I just got a solution to the problem with a little help from another Codeproject dude [thx Joel!].
The thing is that whenever a WM_ERASEBKGND is received by a CTabCtrl, all window children of CTabCtrl that are CListCtrls don't get properly repainted if they have been "focused".
The fix is just to call RedrawWindow on the CListCtrl when ever appropriate.
As always Tomasz, thx for your superb help and 'be there'-frequency!
/Tommy
|
|
|
|
|
Also, I must add, when the CListCtrl is gone I can activate parts of it by clicking "on it"... It lights up row wise but the entire CListCtrl border doesn't show... Somehow it reacts to my mouse clicks. Is it then possible it is hidden by a window with higher z since it responds to user actions?
|
|
|
|
|
Hi all,
I would like to remove the menu from my mainframe in MFC. Does anybody know how?
Thanks,
James
(2b || !2b)
|
|
|
|
|
CWnd::SetMenu(NULL) removes the menu. If you have MDI app, you'll also have to override CFrameWnd::OnUpdateFrameMenu.
Tomasz Sowinski -- http://www.shooltz.com
|
|
|
|
|
Hi,
I am using GDI+ to convert a batch of TIFFS to JPEGS - i was just wondering how i can resize a image object and then save it out. Does it have to go via a 'graphics' object.
Because I can't see a convenient way to save the graphics object out to a jpeg after i have done my drawimage.
Cheers
Richard
|
|
|
|
|
I answered this already. You build the graphics object using the Bitmap, then resize it and the bitmap will be resized.
Christian
After all, there's nothing wrong with an elite as long as I'm allowed to be part of it!! - Mike Burston Oct 23, 2001
|
|
|
|
|
Thanks, did see your reply , though it didn't really help me much, i tend to find message that are posted a few pages back tend to get ignored . Had a look at your tutorial to.
I recognise i have to use the Graphics class, i wrote the following code to try and manipulate an image from a file, as a start basis.
//Source Image
Image* image = new Image(L"c:\\test.bmp");
Graphics* imageGraphics = Graphics::FromImage(image);
Pen* blackpen= new Pen(Color(0, 0, 0, 0), 10);
Point point1(0, 0);
Point point2(100, 300);
// Draw A line.
imageGraphics->DrawLine(blackpen, point1, point2);
imageGraphics->Flush(FlushIntentionSync);
// Get the CLSID of the JPG
if (GetEncoderClsid(L"image/jpeg", &encoderClsid) == -1)
MessageBox("No suitable encoder");
MessageBox("About to save");
stat = image->Save(L"c:\\conv.jpg", &encoderClsid, NULL);
MessageBox("Done");
if(stat != Ok)
{
//Have A Failure Log
char err[255];
wsprintf(err,"%d", stat);
MessageBox("Failure: stat = ");
}
delete blackpen;
delete imageGraphics;
delete image;
GdiplusShutdown(gdiplusToken);
Thanks Again, must start and try and hekp out on the forum myself!
Rich
|
|
|
|
|
The reason the above code didn't draw a line on the saved image, was because of the encoder, if i was drawing on a jpeg and saving to a jpeg. It would of.
As for my image conversion routine. I ended up having to use a 'Bitmap' object in order to create a new image, this was done through passing the contructor a HBITMAP. Couldn't see how you could create a new image in GDI+ anyother way???
Cheers
Rich
|
|
|
|
|
Hi,
I am engaged in a project ,now I require some source
code of a simple( not scientific) calcutor to speed up
my process in this project.Who can help me?
You can send it to my Email ,fengrux@hotmail.com
regards.
|
|
|
|
|
Here you go:
#include <iostream.h>
int main()
{
int a = 1;
int b = 1;
int c = a + b;
cout << "Non-scientific calculation: " << c << endl;
return 0;
}
I know. Terribly lame joke. It's late and I'm delirious. I need to get some sleep. Good luck with your project.
Jon Sagara
"After all is said and done, usually more is said than done." -- Unknown
|
|
|
|
|
|
Bwahahahahaa - if you can't write a calculator, I presume you are writing a hello world and want it to calculate how many characters it has.
This is an interesting take on the 'please do my homework, I am too lazy and stupid' theme. Thanks for sharing it. Now go and do your own homework.
Christian
After all, there's nothing wrong with an elite as long as I'm allowed to be part of it!! - Mike Burston Oct 23, 2001
|
|
|
|
|
You're a very helpful person aren't you!
Well, looking at what you've contributed to this site, suggests you don't know the answer to this poor persons question.
Never mind I will email him a parser and GUI for his calculator.
|
|
|
|
|
You are a moron. First of all, I answer a *lot* of questions here and only have a small number of articles as I am not allowed to contribute by order of my boss.
You, on the other hand, are so stupid as to think that this guy is actually working on some project, even though he is too inexperienced to even write a calculator ( my first C++ project as I recall), especially as Windows COMES WITH ONE (i.e. it is doubtful he has any reason to 'need' one ). Do you think that it will help this person if they get to skip this particular lesson ? Will you keep on helping them through their education ? What about when their degree gets them a job even though they STILL can't write a calculator, because you mailed it too them ? Will you do all their work then ?
My solace is that your parser and GUI will probably land him a fail because it will be more than was required ( almost certainly a command line program ). I'm not mean spirited, it's you who is screwing this guy over. If he was honest about his need ( an assignment ), posted some code and asked for help, I'd reply immediately and be happy to put time into explaining where he is going wrong. You are happy to hurt his chances of succeeding in C++ in order to feel good about yourself for doling out what he asked for, a complete solution that robs him of the chance to learn how it is done himself.
Christian
After all, there's nothing wrong with an elite as long as I'm allowed to be part of it!! - Mike Burston Oct 23, 2001
|
|
|
|
|
Gob shite
|
|
|
|
|
Sorry, what language is that ?
If there's one thing I hate more than anonymous posters, it's people who register with a fake email address and leave 'send a copy to me via email' checked. Are you this stupid in real life ? I dunno how you survive if you are.
Christian
After all, there's nothing wrong with an elite as long as I'm allowed to be part of it!! - Mike Burston Oct 23, 2001
|
|
|
|
|
It's skool vacation, so my Mom let me use hur computor, sorry for mi bad ingleesh.
|
|
|
|
|
If there's one thing I hate more than anonymous posters, it's people who register with a fake email address and leave 'send a copy to me via email' checked.
I agree with that totally!!!!!!!
Nish
Sonork ID 100.9786 voidmain
www.busterboy.org
Nish is a BIG fan of Goran Ivanisevic
|
|
|
|