|
Reinstall the last service pack for Visual Studio, maybe that will do.
Andres Manggini.
Buenos Aires - Argentina.
|
|
|
|
|
If I got the handle of a application instance, can I get all of its windows' handles? Please help me
Law is meaningless without chaos.
Chaos without Law is equal to destruction.
Chaos and Law create our rich and colorful world.
|
|
|
|
|
|
Yes, it is. Can I get the handle?
Law is meaningless without chaos.
Chaos without Law is equal to destruction.
Chaos and Law create our rich and colorful world.
|
|
|
|
|
Application instance handle will be useless; it's provided for backward compatibility (all processes see identical value). You'll have to get a process ID instead. Then, as Norm suggested, you should use EnumWindows. For each window call GetWindowThreadProcessId and compare the IDs. Note that this technique gives you handles of toplevel windows; if you want their child you'll have to use EnumChildWindows.
Tomasz Sowinski -- http://www.shooltz.com
|
|
|
|
|
EnumWindowsProc?
Norm Almond
Chief Technical Architect
FS Walker Hughes Limited
|
|
|
|
|
It works fine. Thank you very much!
But I think enumeration's performance isn't very high. Are there any other solutions?
Law is meaningless without chaos.
Chaos without Law is equal to destruction.
Chaos and Law create our rich and colorful world.
|
|
|
|
|
Hi All,
I have one MFC GUI stand-alone application (its SDI doc/view architecture) and I want to convert it to ATL inproc dll. To do that I have added all the required files + resource file from MFC app to new ATL application. To invoke GUI from one of the interface method, I have created document template and then used CreateNewFrame.
When I use this ATL dll from a client application, it properly pops up GUI with some limitions. Accelerators dont work and tool bar buttons dont get the command ui message. I mean the menu items get update but associated tool bar buttons dont update. Does anybody tell me what is wrong ? Is there any different way to pop up GUI from ATL dlls ? Explicit loading of accelerator table also does not work.
Thanks,
Sujata.
|
|
|
|
|
Have you looked at WTL that comes with the Platform SDK. I think it might help you.
Michael
|
|
|
|
|
True !!! This is a second option I can consider. But the simplest and the fastest solution is removing MFC application's InitInstance and creating frame by my own in dll. Unfortunatly I dont have much knowledge about WTL. Does it support similar doc-view architecture ?
Thanks,
Sujata.
|
|
|
|
|
Probably PreTranslateMessage doesn't work when you invoke your component from client app. Override this function in your frame class (if it's not there yet) and put the breakpoint; if it doesn't fire, this is the source of your problems.
Explicit loading of accelerator table also does not work.
Loading doesn't have any effect visible to the user. You have to call ::TranslateAccelerator in the message loop if you want working accelerators. The problem is that you can't control the message loop from withing component - it's in the client app.
Tomasz Sowinski -- http://www.shooltz.com
|
|
|
|
|
Thank you for the response.
I tried to override PreTranslateMsg in my frame class and also added TraslateAccelerator call. But PreTraslateMessage never gets fire.
Thanks,
Sujata.
|
|
|
|
|
PreTranslatemessage is called from within message loop somewhere in CWinThread. In your case it will not work - message loop is out of your control inside the client application.
Tomasz Sowinski -- http://www.shooltz.com
|
|
|
|
|
So does it mean that MFC DOC-View could not work properly with ATL ? Is there any other way to invoke GUI from ATL inproc ?
Thanks,
Sujata.
|
|
|
|
|
So does it mean that MFC DOC-View could not work properly with ATL?
I don't know. I think you could play with multiple threads and invoke your application in the separate GUI thread with its own message queue. Have no idea if this is worth the effort.
Tomasz Sowinski -- http://www.shooltz.com
|
|
|
|
|
Great ! Thanks, I will try out.
Sujata.
|
|
|
|
|
I wrote DLL How can I compile it in Release mode ?
|
|
|
|
|
The build toolbar in VC++ has a combo box, from there you can choose the Release mode setting. Then compile.
Michael
|
|
|
|
|
|
Look on the build menu, you should have a Set Active Configuration option. In there should be a list of configurations. One should be Win32 Release or somethink like that.
Michael
|
|
|
|
|
1. If I choose this option (Win32 Reelease) and compile my proj I get Debug library with dll file that create and not something with Release.
2. What is the different between regular dll to Release ?
|
|
|
|
|
1. The default naming convention is for each type dll to have the same name -- they are put in different folders. Using Windows Explorer you will see the folders in your project folder. One is a debug and the other a release folder. You can change the name of the dll if you wish in Project | Settings, click the Link tab.
2. There are lots of differences between debug and release versions. Most of them are the way the compiler optomizes your code. You need to study the optinization flags (there are a lot of them) in MSDN or other books to realize what the compiler does to your code in release mode. In a nutshell, it rearranges the code, eliminating redundencies, inefficiencies, and makes it run faster. You need to be careful about this because I have seen it sometimes (but not very often) make wrong decisions.
|
|
|
|
|
Hi all,
I must create an application that capture all Pressed keys from the keyboard. My difficult is that i can't capture the Keys that is pressed outside my application.
Really i'm able to capture all the keys that are pressed into my application, but if my application works in backgroud and some keys are pressed it doesn't intercept.
Is there anybody going to help me?
If someone can help me send the solution to my E-Mail address : benmar@libero.it
Thanks!!!
|
|
|
|
|
You'll have to create a global hook. Check the docs for SetWindowsHookEx.
Tomasz Sowinski -- http://www.shooltz.com
|
|
|
|
|
You need to create a global keyboard hook using SetWindowsHookEx(WH_KEYBOARD...)
You need to set your HOOKPROC in a DLL. MSDN has more info I think.
|
|
|
|