|
CString(a) is the preferable way, but (CString)a does not give compilation error and works too because of available cast from char * to CString , thanks to the CString( const char *) constructor.
Actually AfxMessageBox requires const char * , so it should be AfxMessageBox(a) . Otherwise a redundant creation of temporary CString object occurs.
|
|
|
|
|
Gr8...Very helpful..Thanks for the explanation my dear Friends.
Appu..
"If you judge people, you have no time to love them."
|
|
|
|
|
Ok i think I have a ghost in my computer.
it's working fine now... and i didn't change anything!
grrr.
Kitty5
|
|
|
|
|
kitty5 wrote: AfxMessageBox((CString)a); //DEBUG
There is no need to cast a to a CString .
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
I'm using function system ("regsvr32 filename.ocx") and it's work OK.
But I'm doing this every time I run my Application, because I'm not sure if the OCX Control is registered or not. When App start the black cmd window is showing up, because of the system function. I don't want this window to appear always.
Is there a way to check the registry if the control is already registered or is there another way to register the Control without using system function.
This Application should be work on window 98 and above.
Thank you,
|
|
|
|
|
ZaebanB wrote: Is there a way to check the registry if the control is already registered
Use standard Registry APIs like RegQueryValue
Appu..
"If you judge people, you have no time to love them."
|
|
|
|
|
That seems quite an ugly solution. Why don't you provide an installer with your app ? And let the installer do the job of installing and registering the control ? These kind of things are never done in the app itself...
Cédric Moonen
Software developer
Charting control
|
|
|
|
|
You can use ShellExecute instead of calling system. regserver has a silent mode registration. pls see the help by calling regsvr32 /?
Try to create the control first, if it fails, depends on on the error code, register the control.
Hope you clear
SaRath.
"Do Next Thing..."
Understanding State Pattern in C++
|
|
|
|
|
ZaebanB wrote: When App start the black cmd window is showing up, because of the system function. I don't want this window to appear always.
So don't use it. That's an antiquated function from pre-Windows days. Use CreateProcess() instead. See here.
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
HCRET lpfnDllRegisterServer = NULL;
DLLName = "YouDLLName.dll";
hDLL = LoadLibrary(DLLName);
if (hDLL != NULL)
{
lpfnDllRegisterServer = (HCRET)GetProcAddress(hDLL, "DllRegisterServer");
if(NULL == lpfnDllRegisterServer)
{
//ERR
}
else
{
if(FAILED((*lpfnDllRegisterServer)()))
{
ERR ("Tripio registration failed!");
}
else
{
//"Registering DLL Success"
}
}
FreeLibrary ( hDLL );
}
else
{
ERR("LoadLibrary failed");
}
|
|
|
|
|
|
Take a minute to read. I could not shorten my problem... be patient...
I have a CBaseEvent class
There are other two classes have derived from CBaseEvent named CSysEvent and CGuiEvent
I have created a queue of CBaseEvent pointers.
This queue is being processed by an event handler class. A thread is working for this.
Whenever a new event adds on the queue, this thread will process the event by calling ProcessEventFunction . which prototyped as ProcessEventFunction(CBaseEvent* pEvent)
Here comes the problem. How can I identify between System Event and GUI event?
These are the possibilities I have
1. Use dynamic_cast identify the pointer using dynamic cast. Then do the further processing depends on Sys event or GUI event.
2. Do the above check inside the thread itself and call the ProcessEvent function overloaded with GUI event and SysEvent depends on the result
3. Use two queues. One for sys event and another for GUI event. Run two threads for the same and call the overloaded ProcessEvent function depends on the queue. Here definitely I’ll face some problems with the order of the events received. I need to process the sys and GUI events in first come first serve manner. So this approach will have sync issues.
The above are the solutions I have!!! Could you pls suggest one from this or a new one?
Again sorry for borring you with a long question
SaRath.
"Do Next Thing..."
Understanding State Pattern in C++
|
|
|
|
|
I've relied on poor man's RTTI by adding a protected member of the enum type CBaseEvent::Type to the base class. The enum is set in each base class constructor. CBaseEvent has a getType() method that returns the type of subclass.
/ravi
My new year's resolution: 2048 x 1536
Home | Music | Articles | Freeware | Trips
ravib(at)ravib(dot)com
|
|
|
|
|
Create a ProcessEventFunction on the base class CBaseEvent that is overloaded for proper processing and invoke that function.
|
|
|
|
|
I've used virtual functions for this, so that you don't have to identify the type.
Chris Meech
I am Canadian. [heard in a local bar]
When no one was looking, every single American woman between the ages of 18 and 32 went out and got a tatoo just above their rumpus. [link[^]]
|
|
|
|
|
Virtual Functions ?
---
With best regards,
A Manchester United Fan
The Genius of a true fool is that he can mess up a foolproof plan!
|
|
|
|
|
|
Well not sure if this is exactly what you need, but here goes.
Define the funtion that you want to call as a pure virtual function in CBaseEvent . Code their implementations in CSysEvent and CGuiEvent .
Now whenever you want to call the function, just upcast the CBaseEvent 's pointer with either CSysEvent or CGuiEvent's address.
CBaseEvent* Base ;<br />
CSysEvent Sys ;<br />
Base = &Sys ;<br />
Base->Function() ;
Hope this was helpful.
---
With best regards,
A Manchester United Fan
The Genius of a true fool is that he can mess up a foolproof plan!
|
|
|
|
|
SaRath C wrote: How can I identify between System Event and GUI event?
Why? The whole design is based on not needing to identify them.
|
|
|
|
|
Dear All,
I have to write an Add-Ins or automation solution for MS-Word to support my own mail merge utility that can enable the user to embed controls[Like Drop Down box]in the word document.
Note:
Existing Mail merge utility in MS-Word enables only to include labels [ie.,texts]
Kindly suggest me a solution.
Karthik M
|
|
|
|
|
|
Hi everyone.
I have a problem, and no ideas...
<br />
class municipality<br />
{<br />
private:<br />
...<br />
<br />
HRGN the_region;<br />
...<br />
}<br />
I work with the array of type municipality, in C++ declared as GLOBAL variable.
<br />
municipality* g_my_municipalities;<br />
<br />
g_my_municipalities = new municipality[size];<br />
Then I loop through the array to do the 'hit tests' etc...
The problem appears when I attempt to transform the regions (HRGN).
I used the following routine to transform it:
<br />
void municipality::Transform(float factor, POINT offset)<br />
{ <br />
WORD size;<br />
<br />
LPRGNDATA pData;<br />
<br />
XFORM xfr;<br />
<br />
xfr.eM11 = factor;<br />
xfr.eM12 = 0;<br />
xfr.eM21 = 0;<br />
xfr.eM22 = factor;<br />
xfr.eDx = offset.x;<br />
xfr.eDy = offset.y;<br />
<br />
size = GetRegionData(the_region, 0,0);<br />
<br />
pData = new RGNDATA[size];<br />
<br />
GetRegionData(the_region, size, pData);<br />
<br />
the_region = ExtCreateRegion(&xfr, size, pData);<br />
<br />
delete pData;<br />
}<br />
The problem is that there is a memory leak, but I thought of a following concept:
1) To create and keep the original array of municipalities, preserving the original (untransformed regions),
2) To create temporary array of municipalities and then to fill it with the original values (regions) and then to apply the transformation to this array,
3) To erase the temporary array 'delete [] temp_municipality (go arround the memory leak) in order to free the memory.
The thing is that I do not have an idea on how to design the copy constructor for the municipality class, for the member HRGN.
I would appreciate the help on this!
Thanks in advance...
|
|
|
|
|
Where exactly you are getting the leak ??? Debug the code and let us know.
Appu..
"If you judge people, you have no time to love them."
|
|
|
|
|
Well, the leak appears at the Transform function, it seems to me that every time the code does:
the_region = ExtCreateRegion(&xfr, size, pData);
i.e. assigns the newly created (trasnformed region) to the_region member
the memory leaks.
If one is interested to debug this I will send an entire source code, but for now I would like to get around with the two arrays and the proper copy constructor.
|
|
|
|
|