> Date: Wed, 30 Sep 1998 11:39:01 -0400 (EDT)
> From: "S.P. Wakely" <sw@dirac.hep.umn.edu>
> To: fine@mail.cern.ch
> Cc: roottalk@hpsalo.cern.ch
> Subject: Re: Root and MSVC++
>> Use the default project flags and attempt to compile in debug mode.
>> It will not compile, bombing out with a series of errors in TGXW.h:
>> c:/root/include\TGXW.h(161) : warning C4003: not enough actual parameters for macro 'CreateWindowA'
>> c:/root/include\TGXW.h(161) : error C2059: syntax error : 'constant'
>> c:/root/include\TGXW.h(329) : warning C4003: not enough actual parameters for macro 'CreateWindowA'
>> c:/root/include\TGXW.h(329) : error C2275: 'Window_t' : illegal use of this type as an expression
>> c:/root/include\TGXW.h(329) : error C2275: 'Int_t' : illegal use of this type as an expression
>> c:/root/include\TGXW.h(329) : error C2275: 'Int_t' : illegal use of this type as an expression
>> c:/root/include\TGXW.h(329) : error C2275: 'UInt_t' : illegal use of this type as an expression
>> c:/root/include\TGXW.h(329) : error C2275: 'UInt_t' : illegal use of this type as an expression
>> c:/root/include\TGXW.h(329) : error C2275: 'UInt_t' : illegal use of this type as an expression
>> c:/root/include\TGXW.h(329) : error C2275: 'Int_t' : illegal use of this type as an expression
>> c:/root/include\TGXW.h(329) : error C2275: 'UInt_t' : illegal use of this type as an expression
>> c:/root/include\TGXW.h(329) : error C2062: type 'void' unexpected
>> I think the main question is can you use MSVC-based GUI objects
>> (dialogs, buttons, etc.) in the same application as you use Root-based GUI
>> objects (canvas, pad, etc...)?
>> As I said, I suspect I am missing something obvious here.
Your message has TWO question in fact.
1. The first is why you got the troubles with the compilation.
Very likely you mess some include files. The line 161 gave us a clue.
It says about CreateWindowA. I am sure the class TGXW has no
CreateWindowA at all but it does contain the method introduced recently:
virtual Window_t CreateWindow(Window_t parent, Int_t x, Int_t y)
From another hand MS VC does define the MACRO (!!!) CreateWindow and
does expand this macro to CreateWindowA (!!!). It is not only clash between
Microsoft macro names and ROOT method names. One may find the list of them with
Windows4Root.h file supplied. As you can see this problem did solve (somehow)
when we compile ROOT ourselves and can not figure out what ROOT include file
and which way you lost.
What is clear the C-preprocessor did substitute the name of the TGXW::CreateWindow
method with CreateWindows VC++ macro. All other your error messages have the same
nature, namely some ROOT include file was missed with your project.
You may scan *.h to find out where all *_t types are defined (Rtypes.h my guess)
(may be your project sets the "pre-compiled" header option or something like this).
Please check.
2. The second "main" question has no anwser. Something like "if you can you may".
For example see http://glast.phys.washington.edu/~haas/windows%20active.html
Anyway ROOT itself does use some MSVC-base GUI objects. For
example open (create) TCanvas object and select "File"->"Save
as". You will get "standard" MSVC "Save As" dialog box". try
form the command line (or from the Context "right-mouse" menu)
to invoke the Inspect() method of any ROOT object you'll get
the "standard" ListView control etc etc.
From another hand you should understand if ROOT creates Windows
it does create and supply the "event loop" and "Windows
procedure" to manage Windows messages from them. To take
over that TCanvas procedure your GUI object must
respond the messages your GUI object will generate.
This means one wants to use the MS "GUI" object within
Canvas he should create a C++ object and customize the ROOT
"Windows procedure" to manage the expected messages. From
another hand I see no problem to create a separate
"non-Canvas"/"pure" WIN32 Window within any user's class and
play with that independ of "ROOT" way. From this ROOT is a
"normal" C++ program and your classes will be a normal C++
classes.
I'd like to stress the primary goal (my understanding) of the
ROOT project was to hide the platform specific things. By
"ROOT" the user's code should not manipulate with either
special things like X11 or WIN32. Therefore there is no
method to bring the "external" Windows (WIN32, X11,
Motif, etc ) specific object into the "platform"
independed TCanvas one.
Hope this helps,
Valery
I would advice to try to create a DLL with your classes and
ROOT/CINT dictionary and load them into ROOT seesion. My guess they
will work.
=================================================================
Dr. Valeri Faine (Fine)
------------------- Phone: +1 516 344 7806
Brookhaven National Laboratory FAX : +1 516 344 4206
Bldg. 510A /STAR mailto:fine@bnl.gov
Upton, New York, 11973-5000 http://nicewww.cern.ch/~fine
USA
Dr. Valery Fine Telex : 911621 dubna su
-----------
LCTA/Joint Inst.for Nuclear Res. Phone : +7 09621 6 40 80
141980 Dubna, Moscow region Fax : +7 09621 6 51 45
Russia mailto:fine@main1.jinr.dubna.su