|
Hello everybody.
Once, I'm in need of catching even when a tab key is pressed. I've tried WM_KEYDOWN, WM_CHAR, MENU KEY, ... But it doesn't work. Can anyone help to catch the tab key even.
Thanks in advance.
NHH.
|
|
|
|
|
You should probably override PreTranslateMessage .
Merry XMas to you,
Bartosz Bien
|
|
|
|
|
Hello Bartosz Bien,
I've followed your help, and it works fine.
Thank you very much.
Have a good time.
|
|
|
|
|
just moved from a 266mhz to a 1.2g laptop
Will MS VC++ 6.0 with sp5 work and be stable on XP? That is the only licensed version I have.
Thanks
Joe
"You can't throw yourself a parade every time you win, and you can't bury yourselves when you lose."-Levon Kirkland Philadelphia Eagles
|
|
|
|
|
JoeSox wrote:
Will MS VC++ 6.0 with sp5 work and be stable on XP?
Work, yes. Stable, mostly. VC 6 crashes about once a day on my XP box at work, which is a shame because I've never had VC crash on non-XP. Thus I blame XP
--Mike--
If it doesn't move and it should: WD-40. If it moves and it shouldn't: duct tape.
1ClickPicGrabber - Grab & organize pictures from your favorite web pages, with 1 click!
My really out-of-date homepage
Sonork-100.19012 Acid_Helm
|
|
|
|
|
I use VC6 with SP4 (5?) on XP Pro and XP Home just fine. It doesn't crash for me.
Neville Franks, Author of ED for Windows. www.getsoft.com
Make money with our new Affilate program
|
|
|
|
|
Thanks, what kind of system do you have (Ram, processor, etc)?
Like your program and website
|
|
|
|
|
JoeSox wrote:
Thanks, what kind of system do you have (Ram, processor, etc)?
Desktop is a P3 550Mhz with 256M RAM running XP Home which is a heavy duty VC++ development machine. ie. Where I develop ED4W.
Notebook is a Dell Inspiron 4150 1GHz with 256M RAM running XP Pro, Wireless LAN etc.
JoeSox wrote:
Like your program and website
Thanks. Always interested in feedback from C++ developers. You might want to give the free trial a whirl.
Neville Franks, Author of ED for Windows. www.getsoft.com
Make money with our new Affilate program
|
|
|
|
|
Follow-up Q...
I was thinking of putting VC++ and .NET on the same OS (WinXP) but common sense tells me not to.
So I think I will use Virtual PC and make a Windows 98se install so I can flip-flop.
What do you think?
Thanks Mike, you da CP man!! Thanks for your articles!!
|
|
|
|
|
VC 6 and VS.NET get along fine, many folks have posted about it here. Just install VC 6 first, then VS.NET. (And VS.NET only runs on NT, so don't bother trying it on 98SE.)
--Mike--
If it doesn't move and it should: WD-40. If it moves and it shouldn't: duct tape.
1ClickPicGrabber - Grab & organize pictures from your favorite web pages, with 1 click!
My really out-of-date homepage
Sonork-100.19012 Acid_Helm
|
|
|
|
|
Michael Dunn wrote:
Work, yes. Stable, mostly. VC 6 crashes about once a day on my XP box at work, which is a shame because I've never had VC crash on non-XP. Thus I blame XP
Under my XP Pro, VS6 Std worked fine with SP4, and started to crash almost daily after applying SP5 to it. Either is it XP or VS, we can then blame... MS.
And also the just-in-time debugging feature fails to work when moved from 2000 to XP! If I run a program outside the debugger and it crashes, pressing Cancel doesn't get me into the code.
Merry XMas,
Bartosz Bien
|
|
|
|
|
My program used gdiplus.dll.i make another dll file name TransToGif.dll to Translate BMP to Gif which using gdiplus.dll.it run very very in my computer which install VS.net in it. and i want make it run in another computer.the computer only install Windows XP.i copyed Gdiplus.dll,TransToGif.dll into windows\system32 and windows\system and program directory. but when i run the program it told me that can't find TransToGif.dll.i kown that it acturlly can't find gdiplus.dll or the gdiplus.dll is not worked.but i don't kown how to make it work.i kown that gdiplus use COM to work.but what COM should i registe first. can anybody help me? thank you!
|
|
|
|
|
I need to load a image file from command line.And I do in this way,
<<in app="">>
cmdInfo.m_nShellCommand = CCommandLineInfo::FileOpen;
<<in doc="">>
OnFileOpen()
{
.....
}
But when this image is invalid image, I have to exit the program.In this Doc class, if I use exit(0) it will cause memroy leak.
How to avoid memory leak when I exit in this occasion?
Thx ahead.
|
|
|
|
|
Use PostQuitMessage(exit_code); .
Software Zen: delete this;
|
|
|
|
|
I have tried the PostQuitMessage() before. But it can not terminate the program immidiately from the OnFileOpen().After sending this message, it will go on to do following steps until main program deals with this message.
|
|
|
|
|
Someone asked me the other day "what if the thread dies unexpectedly?" And I don't mean exits normally but just somehow dies. Is that possible?
I can't remember ever seeing code that checked a thread for abnoral termination.
I know a thread can hang. What's the best way to detect if a thread has hung?
Todd Smith
|
|
|
|
|
I'm not an expert, but one can check the thread handle to see if the thread is valid or not.
I suppose that if correctly coded, the thread shouldn't hang but rather exit it's loop. There should be no reason that the thread would just die or hang other than a code bug. Usually the OS would not start the thread if there were not enough resources available.
The way I've kept an eye on the threads was by posting thread messages from the worker to the main thread that reflect thread status, or utilize some type of watchdog that keeps an eye on the thread. If something doesn't happen (or the thread's task isn't completed within X timeout), the watchdog kills the thread or posts a message to the main thread. I have yet to see a thread hang or die for no reason, but if it did and coding was correct, I suspect that the entire system would be hung too. Well, as was stated before, I'm not an expert.
Regards,
Paul...
|
|
|
|
|
A thread can end in three ways, a) it returns from its thread function (or main/WinMain if it's the primary thread in the process), b) it generates an unhandled exception (GPF, C++ exception), or c) some other thread kills it. b and c count as "unexpected", but the answer is "not much". Exceptions can be handled and dealt with, but there is no way to prevent some other app from calling TerminateThread() .
--Mike--
If it doesn't move and it should: WD-40. If it moves and it shouldn't: duct tape.
1ClickPicGrabber - Grab & organize pictures from your favorite web pages, with 1 click!
My really out-of-date homepage
Sonork-100.19012 Acid_Helm
|
|
|
|
|
What's the typical technique of determining if a thread gets killed or hangs?
My main application launches a thread and then waits for a message to be posted from the thread. If a message never gets posted then the main application pretty much gets stuck waiting. What should my main process do to see if the thread is still alive?
Can a main process catch an exception thrown by a child thread?
Todd Smith
|
|
|
|
|
Todd Smith wrote:
What's the typical technique of determining if a thread gets killed or hangs?
DWORD dw;
dw = WaitForSingleObject ( thread_handle, 0 );
if ( WAIT_TIMEOUT == dw )
else if ( WAIT_OBJECT_0 == dw )
Can a main process catch an exception thrown by a child thread?
No, an exception can only be caught by the thread that generated it (the compiler goes up the stack looking for catch or __except handlers), so another thread can't handle it.
--Mike--
If it doesn't move and it should: WD-40. If it moves and it shouldn't: duct tape.
1ClickPicGrabber - Grab & organize pictures from your favorite web pages, with 1 click!
My really out-of-date homepage
Sonork-100.19012 Acid_Helm
|
|
|
|
|
Actually, there is a fourth way (even that technically, from the kernels POV it might be your "c").
I don't know if it has been fixed in NT5 or NT5.1 (not using Windows anymore for real server tasks), but in NT4 it was not unheard of by us doing heavy server development that some idiot forgotten to release a resource. From what we understood (not having access to the OS src has obviously been a problem in tracking such bugs), when some handle table got full (apparently "someone" decided to put hard-coded handle-table-sizes into even NT4) the thread, and actually the whole process, just vanished from the face of the earth. No log message, no error handling code run, no nothing. It just vanished.
|
|
|
|
|
Hi,
I have two different questions:
1.) Does a message handler for ON_MESSAGE() need to be defined as afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam); or as afx_msg void OnMyMessage(WPARAM wParam, LPARAM lParam); ?
I am confused, because I (accidently) used the "void" version and never got any compiler or runtime error in the past.
2.) What is IMPLEMENT_DYNAMIC() macro used for? Well, take my appology that I don't know MFC very well and from MSDN I don't get any newbie description what is it for. For me even more intersting: when would I need to use this macro and what does it give me?
Thanks and hohoho, Moak
PS: If you wonder how both question are related... they are not. I'm currently playing with multiple inheritance and MFC. I derived a dialog from CDialog + a (non-CObject) class and got strange compiler errors.
|
|
|
|
|
1. You should definately be declaring that the function returns an LRESULT.
afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
You may think it's not a big deal because it never crashed, but it's not safe (or predictable) to specify the incorrect return type on the function, especially if Windows wants to use the value returned from the function to decide what to do. In the case that you specify a "void" return type, the EAX register, which holds the return value, will have undefined data in it.
2. IMPLEMENT_DYNAMIC, in conjunction with DECLARE_DYNAMIC let's you determine the type of CObject derived objects at runtime. So, you can do something like this:
class CBaseClass : public CObject
{
DECLARE_DYNAMIC(CBaseClass)
};
IMPLEMENT_DYNAMIC(CBaseClass,CObject)
class CDerivedClass : public CBaseClass
{
DECLARE_DYNAMIC(CDerivedClass)
};
IMPLEMENT_DYNAMIC(CDerivedClass,CBaseClass)
CBaseClass * pBaseClass = new CDerivedClass;
if( pBaseClass->IsKindOf( RUNTIME_CLASS( CDerivedClass ) ) )
{
CDerivedClass * pDerivedClass = static_cast<CDerivedClass*>(pBaseClass);
}
else
{
}
It's basically just a runtime time system that MFC uses, and you can use also. Beware that the IsKindOf function shouldn't be used in high performance situations, because it can be quite slow to lookup the type of the class. Also, it's only necessary to do this kind of thing in rare circumstances, or serialization.
Sorry if I haven't explained it well.
Chris Richardson
Programmers find all sorts of ingenious ways to screw ourselves over. - Tim Smith
|
|
|
|
|
thx Chris, it helps a lot!
I wonder why I never got any warning when using a message handler returning void . Good that it's fixed now.
|
|
|
|
|
How could i create a window without title bar that floats over parent dialog but does not take away parents focus when clicked,
ie. functions similar to floating CToolbar, but without buttons, title bar and
accepts CDialog as a parent ?
Which class can be used to achive this, CMiniDockFrameWnd ?
|
|
|
|