|
Most of the character mappings can be found from 'winnt.h' file.
-Antti Keskinen
----------------------------------------------
The definition of impossible is strictly dependant
on what we think is possible.
|
|
|
|
|
If you want to know where something is defined, right click on it and select "Go to definition" from the popup menu.
"You're obviously a superstar." - Christian Graus about me - 12 Feb '03
"Obviously ??? You're definitely a superstar!!!" mYkel - 21 Jun '04
Within you lies the power for good - Use it!
|
|
|
|
|
Couple of links:
The complete guide to C++ strings, part I[^]
The complete guide to C++ strings, part II[^]
Basically, LPxSTR is a typedef for xCHAR*, i.e. LPTSTR is a typedef for TCHAR* , LPSTR for CHAR*, and LPWSTR for WCHAR*. If it has a C in it, it's a const : LPCSTR is const CHAR* .
So what are CHAR, WCHAR and TCHAR? CHAR is simply a typedef for char. Don't know why they did that. WCHAR is a typedef for wchar_t which on earlier compilers is a typedef for unsigned short .
TCHAR is where it gets interesting. The meaning of TCHAR depends on whether UNICODE is defined or not. If UNICODE is not defined, TCHAR is CHAR. If UNICODE is defined, TCHAR is WCHAR. With the addition of suitable macros (such as the _T you use) a program can be mostly adapted between ANSI and UNICODE builds with few source code changes.
Anyway, after all that, LPTSTR is equivalent to WCHAR* in UNICODE builds and char* in ANSI builds. Use whatever memory allocation seems appropriate.
Stability. What an interesting concept. -- Chris Maunder
|
|
|
|
|
Thanks, those articles are really interesting. I learned a lot of this stuff the hard way using the MSDN documentation which is pretty good but you really have to search and easily get caught going in circles trying to understand it. You're explanation was the best out of what I read of the responses to the original question. In the MSDN they have some nice charts that show how the typedefs and C run time functions map, depending on whether _UNICODE is defined. Do a search on TCHAR in the MSDN libary index and you'll see links to the mapping charts there and will probably find many other wild goose chases that will contain a wealth of info on the concept of the TCHAR family. Not only are there many data type mappings but there is a whole family of mappings for the C run time string functions as well. The whole purpose is to support character set neutral code, which is something else you'll learn about in the MSDN documentation.
|
|
|
|
|
hai,
I'm using win32 appln.While executing my appln (say a dialog) if again I execute my appln another exe starts.How to prevent this.I want only one exe to run at a time.Can anyone help?
thanks a lot in advance.
|
|
|
|
|
|
Do a search for "single instance" and you will get a lot of articles explaining how to.
"You're obviously a superstar." - Christian Graus about me - 12 Feb '03
"Obviously ??? You're definitely a superstar!!!" mYkel - 21 Jun '04
Within you lies the power for good - Use it!
|
|
|
|
|
|
I'm doing a cd burning app using IJolietDiscMaster. For some reason it only works when the filename to be burn to the cdrom does not contain a directory.
// IStorage accepts this file
thisisokay.exe
// IStorage rejects this file
\\Directory\\on\\CD\\thisisokay.exe
Also, IStorage rejects creating multiple layers directory
// IStorage accepts this directory
Thisisokay
// IStorage rejects this directory
\\Directory\\on\\CD\\
What is wrong with the naming convention i'm passing into IJolietDiscMaster's AddData()?
Thank you!
|
|
|
|
|
For some reason I'm having a major brain fart.. I am trying to write a simple loop to read 32 chars at a time from a CString and feed them to a function.. Can someone give me some help.
CString strFart = "some really long string over 500 chars";
int nLen = strFart.GetLength();
while((nLen/32) > 0)
{
// Need to feed a TCHAR function
// 32 chars at a time from strFart;
nLen - 32;
}
Should I be using the CString::mid function?
Rob
Whoever said nothing's impossible never tried slamming a revolving door!
|
|
|
|
|
RobJones wrote:
Should I be using the CString::mid function?
That would work. Did you try it? What happened?
"No matter where you go, there your are." - Buckaroo Banzai
-pete
|
|
|
|
|
I can get it to work but it looks really ugly.
Whoever said nothing's impossible never tried slamming a revolving door!
|
|
|
|
|
RobJones wrote:
I can get it to work but it looks really ugly.
Run it through the Hollywood translator engine and see if that improves it's looks. Be warned, while it may be better looking, the behavior might seem a bit queer.
"No matter where you go, there your are." - Buckaroo Banzai
-pete
|
|
|
|
|
ROFLMAO....
Whoever said nothing's impossible never tried slamming a revolving door!
|
|
|
|
|
I would think it would look something like this:
CString strFart =
_T("123456789ABCDEFGHIJKLMNOPQRSTUVW123456789ABCDEFGHIJKLMNOPQRSTUVW123456789ABCDEFGHIJKLMNOPQRSTUVW123456789");
int pos = 0;
while( pos < strFart.GetLength())
{
CString temp = strFart.Mid(pos, 32);
someFunc( temp);
pos += 32;
}
"No matter where you go, there your are." - Buckaroo Banzai
-pete
|
|
|
|
|
I ran into something interesting while I was sifting through code at work.
Instead of seeing a typedef for a pointer like this:
typedef CClass* CClassPtr;
I found that they use:
typedef CPtr<CClass> CClassPtr;
Why the difference? Is one method better than another? I'd ask someone around here, but since the code is so old, most of the people who wrote it are not still around.
Any ideas?
-- Adam
"If you can't beat your computer in chess, try kickboxing"
|
|
|
|
|
are you sure that CPtr is not a typedef for something else ?
maybe CPtr is a void* ? which would be bac for C++ me think.
Maximilien Lincourt
Your Head A Splode - Strong Bad
|
|
|
|
|
will appreciate if tell me how to find ASCII strings from middle of a file.txt
really thank you
|
|
|
|
|
Open the file, read it completely into a buffer, convert the buffer into a CString , and use it's powerful searching functions to find what you need.
An alternative is to open the file, and use the file pointer to check adjacent characters if they match your search criteria. This is a LOT slower way code-wise, but uses less memory, as no extra CString objects are needed.
If you can't use MFC, then use normal string searching functions such as strspn on the buffer. Do not search through the direct file pointer (although files may be considered as buffers), because this will lead to problems if different file systems are used.
For reference, see MSDN or any C++ book for functions like fopen , fread and so on.
-Antti Keskinen
----------------------------------------------
The definition of impossible is strictly dependant
on what we think is possible.
|
|
|
|
|
Hi there,
Can someone let me know what is the valid range for user messages used by controls/objects (WM_ ) ?
My MS VC++ Help refuses to run, somehow, and I don't have any means of finding out the answers I need... so if someone could please drop me a line, it would be much appreciated.
Thank you.
David
PS: Also, could you take a look at the thread "Making objects talk with each other?", which I have also started, and let me know of what you think?
|
|
|
|
|
|
( lets see if CP will allow me to answer .... )
you can use RegisterWindowMessage to create a unique message ID.
Maximilien Lincourt
Your Head A Splode - Strong Bad
|
|
|
|
|
|
Thank you all for the great links you've supplied me with.
David
|
|
|
|
|
Hi,
I'm using PreTranslateMessage to intercept the RETURN key on a CEdit control in a modeless dialog. To prevent the RETURN key from triggering the default button I've made the CEdit control multiline and made it "Want Return".
On PreTranslateMessage I SetFocus() on the parent window. This also triggers the CEdit KillFocus() which processes the edited text.
However, this produces a Windows error beep. Perhaps this is because the edit control is out of focus before the keydown message reaches translation. How can I avoid this?
Many thanks,
Simon
|
|
|
|