|
Sending messages between two applications or instances of the same application can be tricky business, so be warned. Here are a few ideas:
a)
You could use FindWindow() with a NULL class name. That will return the handle of any window that has the specified Window name. This is only useful if you know your window name is unique to your application and your application does not change the window title, for example to include the name of the file currently open.
b)
You could use the GetClassName() API function to obtain the class name at runtime. I notice with MFC, though, that it creates a new window class for every instance of the application. That's one serious bummer - it means you cannot predict what the class name of another instance of the same application will be.
c)
The easiest way I can think of to send messages between applications is to first register a unique message with ::RegisterWindowMessage() . You then use SendMessage() with a HWND value of HWND_BROADCAST to send the message to every top-level window in the system, as in:
<br />
UINT uMyOwnWndMessage = ::RegisterWindowMessage(_T("SomeSillyMessage"));<br />
...<br />
::SendMessage(HWND_BROADCAST, uMyOwnWndMessage, 42, 0x4A);<br />
You register the message at the very beginning of your application. If another instance has already registered the message you will get the same message ID value. Obviously you should pick a unique message "name", otherwise the chance exists that another application may have already registered a message with the same name and the end result will be chaos.
Be careful with sending messages between applications, though. You cannot send messages containing pointers. That includes string pointers (LPCTSTR and LPTSTR). The second instance will receive the message but the pointer will be meaningless outside the context of the instance that created the pointer. Sending window handles should be OK but be careful with child windows.
You could also use the WM_COPYDATA message to send string data (and other stuff) accross, but then again you will need to know HWND of the destination window ... and you still have the pointer issue.
d)
You could register you own window class with ::RegisterClass() and create a hidden window using this class that can serve as a type of "proxy" for your messages. Not all too easy to implement, though.
e)
Consider using a more "controlled" form of IPC, like shared memory or a named pipe to communicate between instances of an app.
– Johannes de Rek
|
|
|
|
|
Example: Key in 234 ==> two hundred and thirty four.
key in 1000==> one thousand.
key in 2040==> two thousand and forty.
|
|
|
|
|
There are dozens of examples on the Internet of how to convert money (or currency) to words. Here is one.
"The greatest good you can do for another is not just to share your riches but to reveal to him his own." - Benjamin Disraeli
|
|
|
|
|
#include <iostream>
#include <iomanip>
#include <cmath>
#include <cstring>
using namespace std;
int main()
{
char ID[100],name[100];
int amount, a[10];
cout<<"Please enter your details below:\n"<<;
cout<<" name of payee(with no space between word.Ex:christine_gan)"<<endl;
cin>>name;
cout<<endl<<"Please enter ID number of payee(Ex:840125025961)"<<endl;
cin>>ID;
cout<<endl<<"Please enter the amount (Ex:100)"<<endl;
cin>>amount;
cout<<endl<<"This is the cheque with given details \n\n\n\n\n\n\n\n\n\n\n" ;
cout<<"Shanghai Bank Berhad,Shanghai,89000"<<endl<<endl<<endl;
cout<<"Payee: "<<name<<setw(6)<<"("<<ID<<")"<<setw(20)<<"$ "<<amount<<endl;
cout<<" _____________________________________"<<endl<<endl;;
cout<<"amount: ";
if ((amount%10)!=0)
{
a[0]=amount%10;
}
else if((amount/10)!=0)
{
a[1]=amount/10;
a[0]=amount%10;
}
else if((amount/100)!=0)
{
a[2]=amount/100;
a[1]=(amount/10)%10;
a[0]=amount%10;
}
else ((amount/1000)!=0);
{
a[3]=amount/1000;
a[2]=(amount/100)%10;
a[1]=(amount/10)%10;
a[0]=amount%10;
}
if(a[0]==0 && a[1]==0 && a[2]==0)
{
switch (a[3])
{
case 9: cout <<"nine thousand ";break;
case 8: cout <<"eight thousand ";break;
case 7: cout <<"seven thousand ";break;
case 6: cout <<"six thousand ";break;
case 5: cout <<"five thousand ";break;
case 4: cout <<"four thousand ";break;
case 3: cout <<"three thousand ";break;
case 2: cout <<"two thousand ";break;
case 1 :cout <<"one thousand ";break;
}
}
else
{
switch (a[3])
{
case 9: cout <<"nine thousand ";break;
case 8: cout <<"eight thousand ";break;
case 7: cout <<"seven thousand ";break;
case 6: cout <<"six thousand ";break;
case 5: cout <<"five thousand ";break;
case 4: cout <<"four thousand ";break;
case 3: cout <<"three thousand ";break;
case 2: cout <<"two thousand ";break;
case 1 :cout <<"one thousand ";break;
}
if ((a[1]==0 && a[2]==0)||a[2]==0||(a[0]==0 && a[1]==0))
{
switch (a[3])
{
case 9: cout <<"and ";break;
case 8: cout <<"and ";break;
case 7: cout <<"and ";break;
case 6: cout <<"and ";break;
case 5: cout <<"and ";break;
case 4: cout <<"and ";break;
case 3: cout <<"and ";break;
case 2: cout <<"and ";break;
case 1 :cout <<"and ";break;
}
}
if(a[0]==0 && a[1]==0)
{
switch (a[2])
{
case 9: cout <<"nine hundred ";break;
case 8: cout <<"eight hundred";break;
case 7: cout <<"seven hundred";break;
case 6: cout <<"six hundred";break;
case 5: cout <<"five hundred";break;
case 4: cout <<"four hundred";break;
case 3: cout <<"three hundred";break;
case 2: cout <<"two hundred";break;
case 1 :cout <<"one hundred";break;
}
}
else
{
switch (a[2])
{
case 9: cout <<"nine hundred and ";break;
case 8: cout <<"eight hundred and ";break;
case 7: cout <<"seven hundred and ";break;
case 6: cout <<"six hundred and ";break;
case 5: cout <<"five hundred and ";break;
case 4: cout <<"four hundred and ";break; case 3: cout <<"three hundred and ";break;
case 2: cout <<"two hundred and ";break;
case 1 :cout <<"one hundred and ";break;
}
if (a[1]==1)
{
switch (a[0])
{
case 9: cout <<"nineteen";break;
case 8: cout <<"eighteen";break;
case 7: cout <<"seventeen";break;
case 6: cout <<"sixteen";break;
case 5: cout <<"fifteen";break;
case 4: cout <<"fourteen";break;
case 3: cout <<"thirteen";break;
case 2: cout <<"twelve";break;
case 1 :cout <<"eleven";break;
case 0 :cout <<"ten";break;
}
}
else
{
switch (a[1])
{
case 9: cout <<"ninety ";break;
case 8: cout <<"eighty ";break;
case 7: cout <<"seventy ";break;
case 6: cout <<"sixty ";break;
case 5: cout <<"fifty ";break;
case 4: cout <<"fourty ";break;
case 3: cout <<"thirty ";break;
case 2: cout <<"twenty ";break;
}
switch (a[0])
{
case 9: cout <<"nine";break;
case 8: cout <<"eight";break;
case 7: cout <<"seven";break;
case 6: cout <<"six";break;
case 5: cout <<"five";break;
case 4: cout <<"four";break;
case 3: cout <<"three";break;
case 2: cout <<"two";break;
case 1: cout <<"one";break;
}
}
}
}
cout<<" Dollar Only"<<endl;
cout<<" _____________________________________"<<endl;
return 0;
}
|
|
|
|
|
#include <iostream>
#include <iomanip>
#include <cmath>
#include <cstring>
using namespace std;
int main()
{
char ID[100],name[100];
int amount, a[10];
cout<<"Please enter your details below:\n"<<;
cout<<" name of payee(with no space between word.Ex:christine_gan)"<<endl;
cin>>name;
cout<<endl<<"Please enter ID number of payee(Ex:840125025961)"<<endl;
cin>>ID;
cout<<endl<<"Please enter the amount (Ex:100)"<<endl;
cin>>amount;
cout<<endl<<"This is the cheque with given details \n\n\n\n\n\n\n\n\n\n\n" ;
cout<<"Shanghai Bank Berhad,Shanghai,89000"<<endl<<endl<<endl;
cout<<"Payee: "<<name<<setw(6)<<"("<<ID<<")"<<setw(20)<<"$ "<<amount<<endl;
cout<<" _____________________________________"<<endl<<endl;;
cout<<"amount: ";
if ((amount%10)!=0)
{
a[0]=amount%10;
}
else if((amount/10)!=0)
{
a[1]=amount/10;
a[0]=amount%10;
}
else if((amount/100)!=0)
{
a[2]=amount/100;
a[1]=(amount/10)%10;
a[0]=amount%10;
}
else ((amount/1000)!=0);
{
a[3]=amount/1000;
a[2]=(amount/100)%10;
a[1]=(amount/10)%10;
a[0]=amount%10;
}
if(a[0]==0 && a[1]==0 && a[2]==0)
{
switch (a[3])
{
case 9: cout <<"nine thousand ";break;
case 8: cout <<"eight thousand ";break;
case 7: cout <<"seven thousand ";break;
case 6: cout <<"six thousand ";break;
case 5: cout <<"five thousand ";break;
case 4: cout <<"four thousand ";break;
case 3: cout <<"three thousand ";break;
case 2: cout <<"two thousand ";break;
case 1 :cout <<"one thousand ";break;
}
}
else
{
switch (a[3])
{
case 9: cout <<"nine thousand ";break;
case 8: cout <<"eight thousand ";break;
case 7: cout <<"seven thousand ";break;
case 6: cout <<"six thousand ";break;
case 5: cout <<"five thousand ";break;
case 4: cout <<"four thousand ";break;
case 3: cout <<"three thousand ";break;
case 2: cout <<"two thousand ";break;
case 1 :cout <<"one thousand ";break;
}
if ((a[1]==0 && a[2]==0)||a[2]==0||(a[0]==0 && a[1]==0))
{
switch (a[3])
{
case 9: cout <<"and ";break;
case 8: cout <<"and ";break;
case 7: cout <<"and ";break;
case 6: cout <<"and ";break;
case 5: cout <<"and ";break;
case 4: cout <<"and ";break;
case 3: cout <<"and ";break;
case 2: cout <<"and ";break;
case 1 :cout <<"and ";break;
}
}
if(a[0]==0 && a[1]==0)
{
switch (a[2])
{
case 9: cout <<"nine hundred ";break;
case 8: cout <<"eight hundred";break;
case 7: cout <<"seven hundred";break;
case 6: cout <<"six hundred";break;
case 5: cout <<"five hundred";break;
case 4: cout <<"four hundred";break;
case 3: cout <<"three hundred";break;
case 2: cout <<"two hundred";break;
case 1 :cout <<"one hundred";break;
}
}
else
{
switch (a[2])
{
case 9: cout <<"nine hundred and ";break;
case 8: cout <<"eight hundred and ";break;
case 7: cout <<"seven hundred and ";break;
case 6: cout <<"six hundred and ";break;
case 5: cout <<"five hundred and ";break;
case 4: cout <<"four hundred and ";break; case 3: cout <<"three hundred and ";break;
case 2: cout <<"two hundred and ";break;
case 1 :cout <<"one hundred and ";break;
}
if (a[1]==1)
{
switch (a[0])
{
case 9: cout <<"nineteen";break;
case 8: cout <<"eighteen";break;
case 7: cout <<"seventeen";break;
case 6: cout <<"sixteen";break;
case 5: cout <<"fifteen";break;
case 4: cout <<"fourteen";break;
case 3: cout <<"thirteen";break;
case 2: cout <<"twelve";break;
case 1 :cout <<"eleven";break;
case 0 :cout <<"ten";break;
}
}
else
{
switch (a[1])
{
case 9: cout <<"ninety ";break;
case 8: cout <<"eighty ";break;
case 7: cout <<"seventy ";break;
case 6: cout <<"sixty ";break;
case 5: cout <<"fifty ";break;
case 4: cout <<"fourty ";break;
case 3: cout <<"thirty ";break;
case 2: cout <<"twenty ";break;
}
switch (a[0])
{
case 9: cout <<"nine";break;
case 8: cout <<"eight";break;
case 7: cout <<"seven";break;
case 6: cout <<"six";break;
case 5: cout <<"five";break;
case 4: cout <<"four";break;
case 3: cout <<"three";break;
case 2: cout <<"two";break;
case 1: cout <<"one";break;
}
}
}
}
cout<<" Dollar Only"<<endl;
cout<<" _____________________________________"<<endl;
return 0;
}
|
|
|
|
|
dannysoo2020 wrote: else ((amount/1000)!=0);
This will obviously not work.
Your code does not indicate what trouble you are having. Instead of checking from smallest to largest, it would make more sense to check from largest to smallest. Have you single-stepped through it to see where things go awry?
In addition to the Java example I already provided, here is another. If you have a Basic background, see here.
"The greatest good you can do for another is not just to share your riches but to reveal to him his own." - Benjamin Disraeli
|
|
|
|
|
I just wanna the amount till 9999, can it make it easier, cos i saw the code in both you gave still very complicated for me to see, sorry.
|
|
|
|
|
This should be a rough estimate:
const char *tens[] =
{
{ "twenty " }, { "thirty " },
{ "fourty " }, { "fifty " },
{ "sixty " }, { "seventy " },
{ "eighty " }, { "ninety " },
};
const char *teens[] =
{
{ "ten " }, { "eleven " },
{ "twelve " }, { "thirteen " },
{ "fourteen " }, { "fifteen " },
{ "sixteen " }, { "seventeen " },
{ "eightteen " }, { "nineteen " },
};
const char *ones[] =
{
{ "one " }, { "two " },
{ "three " }, { "four " },
{ "five " }, { "six " },
{ "seven " }, { "eight " },
{ "nine " }
};
string NumToText( unsigned int uNumber )
{
string strResult;
unsigned int uTemp;
if (uNumber >= 1000U)
{
uTemp = uNumber / 1000U;
strResult += ones[uTemp - 1];
strResult += string("thousand ");
uNumber = uNumber - (uTemp * 1000U);
}
if (uNumber >= 100U)
{
uTemp = uNumber / 100U;
strResult += ones[uTemp - 1];
strResult += "hundred ";
uNumber = uNumber - (uTemp * 100U);
}
if (uNumber >= 20U)
{
uTemp = uNumber / 10U;
strResult += tens[uTemp - 2];
uNumber = uNumber - (uTemp * 10U);
}
if (uNumber >= 10U)
{
uTemp = uNumber;
strResult += teens[uTemp - 10];
}
else if (uNumber >= 1U)
{
strResult += ones[uNumber - 1];
}
return strResult;
}
"The greatest good you can do for another is not just to share your riches but to reveal to him his own." - Benjamin Disraeli
|
|
|
|
|
Any suggestions (or code snippets) that can help me build a tree from given, random paths (not necessarily existing ones, could be this\dimwit\cannot\work\that\out, what\a\doofus, etc).
The root item has already been taken care of and I'm just trying to show the (possible) connections between the directories, but I'm just going round in circles, instead of laterally.
redsagentsven
|
|
|
|
|
|
I'm not exactly sure what you are asking about here. Are you wanting to create a directory hierarchy? If so, does CreateDirectory() or SHCreateDirectoryEx() help?
"The greatest good you can do for another is not just to share your riches but to reveal to him his own." - Benjamin Disraeli
|
|
|
|
|
Hi,
Does anyone know how to implement the save workspace as in Visual C++ in your MDI application. That is on restart of the app, reload all the child frames that were visible during the previous run of the app.
Thanks
Vijay
|
|
|
|
|
I have no idea about macintosh..
Programs that are made with VS6 can run on macintosh? If not, how can someone code a program in a mac?
|
|
|
|
|
You'll need to port your code to OSX. That's no easy feat. Especially if it's a windows app. Lookup cross platform development on the Internet for more details.
If you're going to code on the mac, then apple expects you to use their free XCode[^] IDE. It'll build "Universal Binaries" which will work on PowerPC and the new Intel based macs.
|
|
|
|
|
What about libraries and classes. I'm guessing that MFC aren't available. XCode has it's own classes to make coding easier, or no classes at all?
|
|
|
|
|
On OSX, there are 2 toolkits technologies : Carbon ( C++ ) or Cocoa ( Objective-C ).
Cocoa is the prefered toolkit, it offers a bit more support than Carbon; but it's designed around the Objective C language which is not easy to use if you come from a C++ background ( IMO ).
Maximilien Lincourt
Your Head A Splode - Strong Bad
|
|
|
|
|
Is there a site like "msdn.microsoft.com" to take a look or it's not that easy?
|
|
|
|
|
Vertical_Horizon wrote: I'm guessing that MFC aren't available.
You guessed right.
Vertical_Horizon wrote: XCode has it's own classes to make coding easier, or no classes at all?
Apple's Cocoa library is used for UI development. They have several other libraries too. Check out their development website.
http://developer.apple.com/[^]
If you want a cross platform library similar to MFC, then wxWidgets might be what you're looking for. Never tried it myself, but I've heard good things.
http://www.wxwidgets.org/[^]
|
|
|
|
|
I'm familiar only with c++ so the second one might be the one..
I'll take a look. Thanks
|
|
|
|
|
Yes, wxWidgets is very easy to use if you know MFC very well. There is a good start tutorial here[^]
I think the next one is already available, you have to search a little bit.
And yes, wxWidgets is really nice.
|
|
|
|
|
Take a look at Jim Crafron's VCF[^]. It should run on both Windows and Mac.
My programming blahblahblah blog. If you ever find anything useful here, please let me know to remove it.
|
|
|
|
|
Vertical_Horizon wrote: Programs that are made with VS6 can run on macintosh?
In short, no. The instruction set for the Intel, Motorola, and PowerPC processors is different.
This year, however, Macintosh will begin using Intel processors so I do not know what that will bring in terms of compatibility. Rosetta may come into play here.
"The greatest good you can do for another is not just to share your riches but to reveal to him his own." - Benjamin Disraeli
|
|
|
|
|
Hi guys ,
does any body know any good tool for the deployment of VC++ project. I mean the tool which itself adds the required DLLS and then registered them on target machine ?
I have tried Instal Sheild which comes with MS Studio 6 , but did't find it any good.
Can you please guid me to any good tool for the deployment of VC projects ???
Thankssss,
ZINC
|
|
|
|
|
Give Inno Setup a try.
"My dog worries about the economy. Alpo is up to 99 cents a can. That's almost seven dollars in dog money" - Wacky humour found in a business magazine
-- modified at 13:37 Friday 17th February, 2006
|
|
|
|
|
What about Install Shield coming with the Visual Studio
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
|
|
|
|