|
You can override RunMessageLoop() in your CAtlExeModuleT derived class but since you're using a
modal dialog as a main window, it will never get called.
Something's going to have to change in the app's design to get this to work
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Hello Mark,
Thank you for your answer. Would it help to make the dialog non-modal?
Is it called automatically from _AtlModule.WinMain()?
And when I override RunMessageLoop(), what do I have to put in, then?
If I had to change the design of the app, what could I do to have
the minimal effort? - Pooh, so complicated, I hope we will finally
get it work.
At first, thank you again that you are helping me so bravely.
At next, I wish you a good weekend and if you want maybe write you
again on Monday.
Best regards,
Peter.
|
|
|
|
|
Hello Mark,
I hope you don't mind me posting my question also in other forums?
I think this is sensible trying to reach as many people as possible.
Maybe anyone has already solved the problem with the two ATL/MFC
event loops, so we could both learn from him/her.
But I think we are on a good way, we shouldn't give up since the
aim should be close. - Do you know who else we could ask? - Who could
know such things?
So once again many thanks for you help so far and please don't stop
answering me, your help is so precious for me.
I hope you will have a relaxing weekend (even from me and a
good start into the next week.
Best regards,
Peter.
|
|
|
|
|
Hello Mark,
I hope you aren't angry? - I'm a little desperated. Don't you have
the possibility to ask someone who knows about this main event loop
stuff in MFC and ATL? Who could know this? Until now, your answers
were the most helpful. Please don't stop answering me.
Best regards,
Peter.
|
|
|
|
|
Hi Peter,
Sorry about that, I let email notification of your post slip down my inbox.
Definitely post the problem anywhere you can It's always good to have a variety
of possible solutions to draw from.
Anyway, the issue was the message loop. I looked in the ATL code and
using a modal dialog main window won't work. ATL just passes it to a Windows modal
dialog API so there's no way to get the messages over to the MFC side.
I saw an interesting post (on another site) yesterday that seemed like an easy solution.
It's probably similar to the one in the Microsoft link you found.
Starting with an MFC app, override the Run() method in the CWinApp class.
In the override, don't call the base class Run() - Instead, override the ATL message loop
method and call that. In that override pass messages to the CWinApp PreTranslateMessage().
It's not much different than what we've been discussing, and it would still require your ATL
main window to be modeless.
MArk
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Hi Mark,
thank you for your kind reply and sorry for my delayed answer, I have
to work on another project in parallel so I can not always answer
immediately. - To our issue:
Do you mean to set up a new MFC EXE project in Visual Studio?
Could you tell me the site you mentioned where you found the post?
When overriding the Run() method and not calling the base class' Run()
isn't there a danger some necessary initialisation isn't done?
So the only code in the overridden CWinApp.Run() is the call to the
ATL message loop method (what is its name)? And the only code in the
ATL message loop method is the call to CWinApp.PreTranslateMessage()?
Would you mind posting an example? Of course I will try for myself in
parallel, but in the case I get stuck I won't lose that much time.
Maybe it would save your time, too, before I may had to ask you more
questions. Sorry for that, but I don't have a good book where all
those processes like PreTranslateMessage() and Run() are described.
In the library there are only books which describe how to use the
Visual Studio Wizards but not those programming details.
Kind enough of you that you help me so much.
At first I wish you a nice weekend and hope we are just close to the
solution.
Best regards and till soon,
Peter.
|
|
|
|
|
Hi Mark,
I searched the web during the weekend and now understand the MFC
startup mechanism better (how the messaging in ATL works, however,
is still not clear to me). But when I include the MFC windowing stuff
via afxwin.h, the WinMain() function gets also included (after some
ways around: afxwin.h -> afx.h -> afxver_.h -> afxv_w32.h -> windows.h
->winbase.h). So this collides with the _tWinmain definition (_tWinMain
is equal to WinMain, as defined in tchar.h which is included via
afxv_32.h after windows.h). That is, when following the MFC architec-
ture I really should kick off the own _tWinMain definition?
The approach you mentioned sounds promising as it seems to correspond
to the approach in the Microsoft support link you re-mentioned.
So the place to multiplex the messages between the MFC and the ATL
objects in my application seems to be the PreTranslateMessage()
function. So I don't have to override PreTranslateMessage()? Wouldn't
it be sufficient to override PreTranslateMessage instead of the
procedure you proposed? Why do I have to first override CWinApp::Run()
which calls the ATL message loop (how should I do that?) which in
turn calls PreTranslateMessage()? Why this zig-zag-course? What should
I do in the ATL message loop? - Only the call to PreTranslateMessage?
Or is there more to be done? So the way becomes clearer now, although
not all details are clear to me already.
Would be great if you could answer and maybe drop a little example
code so I get the picture.
Best regards,
Peter.
|
|
|
|
|
I have search, read, and tried a lot of directions and finally got a sample that works. I'm posting it here hoping to receive feedback, i cannot oversee it all and this code is only running for a couple of hours now....
One explicit wish that i had is that i do not want to initialize MFC nor show a gui when the ATL Local COM server is only processing commandline arguments (like regserver/unregserver).
Code:
// TestStub.cpp : Implementation of WinMain
#include "stdafx.h"
#include "resource.h"
#include "TestStub.h"
#include "TestDlg.h"
//
// The MFC Module
//
class CTestStubApp : public CWinApp
{
public:
// Overrides
virtual BOOL InitInstance();
virtual int ExitInstance();
virtual int Run();
DECLARE_MESSAGE_MAP()
};
BOOL CTestStubApp::InitInstance()
{
CWinApp::InitInstance();
AfxEnableControlContainer();
//Create a modeless dialog
m_pMainWnd = new CTest();
dynamic_cast<ctest*>(m_pMainWnd)->Create(IDD_TEST, 0);
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
m_pMainWnd->SetFocus();
return TRUE;
}
int CTestStubApp::ExitInstance()
{
//Cleanup
delete m_pMainWnd;
m_pMainWnd = 0;
return CWinApp::ExitInstance();
}
int CTestStubApp::Run()
{
//Do not invoke MFC CWinApp::Run(), messages for MFC are handled through the ATL message handler (RunMessageLoop)
//CWinApp::Run()
return 0;
}
BEGIN_MESSAGE_MAP(CTestStubApp, CWinApp)
END_MESSAGE_MAP()
CTestStubApp theApp;
//
// The ATL Module
//
class CTestStubModule
: public CAtlExeModuleT<cteststubmodule>
{
public :
DECLARE_LIBID(LIBID_TestStubLib)
DECLARE_REGISTRY_APPID_RESOURCEID(IDR_TestSTUB, "{45383526-A2CD-4CA4-9170-AE3DBF5EFB8E}")
HRESULT PreMessageLoop(int nShowCmd) throw();
void RunMessageLoop() throw();
HRESULT PostMessageLoop() throw();
};
HRESULT CTestStubModule::PreMessageLoop(int nShowCmd) throw()
{
//Initialize the MFC module
theApp.InitInstance();
return CAtlExeModuleT<cteststubmodule>::PreMessageLoop(nShowCmd);
}
void CTestStubModule::RunMessageLoop() throw()
{
MSG msg;
while (GetMessage(&msg, 0, 0, 0) > 0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
//Route msg to MFC
theApp.PreTranslateMessage(&msg);
}
}
HRESULT CTestStubModule::PostMessageLoop() throw()
{
//Deinitialize the MFC module
theApp.ExitInstance();
return CAtlExeModuleT<cteststubmodule>::PostMessageLoop();
}
CTestStubModule _AtlModule;
extern "C" int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nShowCmd)
{
//Initialize the MFC library
AfxWinInit(hInstance, hPrevInstance, lpCmdLine, nShowCmd);
return _AtlModule.WinMain(nShowCmd);
}
Some keywords for searchengines on this topic:
ATL, local COM server, CAtlExeModuleT, AfxWinInit, RunMessageLoop, AfxGetResourceHandle assert
|
|
|
|
|
Hello
I need to use a ddk and used aall wizard of ddk
i just could include ntddk.h but
when include other file like video.h it give me
many error.
thanks
|
|
|
|
|
in my expereince you can't
you can use Visual Studio (any edition) as the IDE but when it comes to building you need to use the DDK builders for your target platform.
i've been doing alot with the DDK of late and i only use VS05 as my IDE (very limited IDE doesnt link to all ddk functions)
you may be able to include all the header/libaray files but you will first need to remove the SDK references as the DDK and SDK have some files of the same name but different uses (they both cant be used at the same time).
i havent done that however as it would be a pain to keep swopping between them.
|
|
|
|
|
Hi,
There is a project at the following url showing how to sort the images in terms of similarity with the selected reference image using CIBR method .
http://www.codeproject.com/bitmap/cbir.asp
But the input image in this case is .jpg image.
How can we modify this project so that it can work for .bmp images as input also.Is CIBR method equally applicable to .bmp images also.
Regards
|
|
|
|
|
Maynka wrote: How can we modify this project so that it can work for .bmp images as input also.
You learn and understand how the image classes used in the project work and figure it out.
Maynka wrote: Is CIBR method equally applicable to .bmp images also.
I don't know since I have no knowledge of CIBR method, but if it were my project I would use Google and learn and understand CIBR so I would "know" what the heck I was doing in my own freakin project. *sigh*
|
|
|
|
|
You made me chuckle
¡El diablo está en mis pantalones! ¡Mire, mire!
Real Mentats use only 100% pure, unfooled around with Sapho Juice(tm)!
SELECT * FROM User WHERE Clue > 0
0 rows returned
Save an Orange - Use the VCF!
VCF Blog
|
|
|
|
|
Jim Crafton wrote: You made me chuckle
Now if only we could make some of these developers "think".
|
|
|
|
|
led mike wrote: Now if only we could make some of these developers "think".
That feature is not available until v2.
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
YOu almost killed me.... I was chewing
|
|
|
|
|
Did you try to modify? if yes whats the result?
|
|
|
|
|
Has anyone had the courage to install the just released VC Beta2 on a machine with 2003,2005 installed (XP SP2)?
Does it conflict/destabilaze the other VS installs?
We are working on a project for release in the spring, would like to have the projects in 2008, so we can release it on 2008 at that time.
Bill in PA/USA
|
|
|
|
|
install VMWare or Virtual PC an make your test...
i'm sure you can do it
|
|
|
|
|
If you don't want to go the VM route, just install it!
Since VS 2003, multiple versions of VS have peacefully coexisted on my machines.
Always backup critical data - I assume no responsibility.
I haven't heard of any problems so far.
Good luck!
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Why would you want to install beta software from MS on your production box? I personally see no compelling reason.
"Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass..." - Dale Earnhardt, 1997 ----- "...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001
|
|
|
|
|
Dear All
It it possible to use run time class in a dynamically linked DLL.
Regards
Monhi
|
|
|
|
|
Dear All
I use one RunTime Class in my project.
how can I delete or suspend its operation.
I use this RunTime Class in one DLL.
But when I want to close the dll I receive one exception error.
Regards
Mahdi
|
|
|
|
|
I just have to ask...
What the heck are you talking about?
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|