|
Thanks for your confirmation, Vunic!
Have a good weekend,
George
|
|
|
|
|
Does anyone know a safe way for a non-unicode MFC App to link with and call into a unicode enabled dll ?
|
|
|
|
|
No problem there at all. Just because something isn't built with strings set to Unicode doesn't mean it can't use wide characters. You just need to make sure that the calling side allocates any buffers used by the unicode dll in terms of wchar_t rather than char and that it converts any returned string values with WideCharacterToMultiByte and related functions or MFC/ATL macros before it uses them. Check out things like the USES_CONVERISON macro for how to do this.
Nothing is exactly what it seems but everything with seems can be unpicked.
|
|
|
|
|
Yes, I understand that, but the dll crashes when I call into it. Basically the dll is required to display a dialog which gets a unicode string from the user (among other things), I make a few calls which set up defaults for the dialog, mostly integer or real variables and one string (which is char[], and is converted by the dll), and then call a function which displays the dialog. The dll crashes even when I am just passing ints and I am unable to trace into it. No I havenot forgotten to use
AFX_MANAGE_STATE(AfxGetStaticModuleState());
I know that you believe that you understand what you think I said, but I am not sure you realize that what you heard is not what I meant. Anon.
|
|
|
|
|
Then how do you know the problem has anything to do with Unicode?
Nothing is exactly what it seems but everything with seems can be unpicked.
|
|
|
|
|
Good point.
I know that you believe that you understand what you think I said, but I am not sure you realize that what you heard is not what I meant. Anon.
|
|
|
|
|
There seems to have been a change in behaviour between VC6 and VS2005 builds when calling SetSel / EM_EXSETSEL in a rich edit control. I have code which emboldens certain lines of text, which used to work in VC6, but since moving to VS2005 has come up with the wrong results. The code is something like:
CString sText;
pEdit->GetWindowText(sText);
CString sSection = "SectionHeading";
int nPos = sText.Find(sSection);
int nPosEnd = nPos + sSection.GetLength();
pEdit->SetSel(nPos, nPosEnd);
If the heading is at the start of the text, then it's ok, else the selection is offset by the number of lines, which makes we think that the old code counted line breaks as two characters, but the new code counts a line break as one character. In the sText, the line breaks are definately two characters in both VC6 and VS8 builds.
Any ideas anyone?
"The way of a fool seems right to him, but a wise man listens to advice" - Proverbs 12:15 (NIV)
|
|
|
|
|
While working with rich edit I found out that setting the selection back to begining is often necessary.
Since I work with VC6 I cannot comment on the "rest of the story".
Cheers
Vaclav
|
|
|
|
|
Thanks for your reply. It's not that - I've found it:
VC6 used RichEdit 1.0 controls by default, whereas VS8 uses RichEdit 2.0 controls by default, so that is where the difference lies.
Version 1.0 seems to count line breaks as 2 chars, whereas 2.0 counts them as 1 char. I was getting my positions from my CString, which contains CR+LFs so counts line breaks as 2 chars.
I have changed my code to use the Find facility (EM_FINDTEXT/EM_FINDTEXTEX) in the RichEdit control, and all is now OK. (Not really sure why I didn't just use that in the first place!)
"The way of a fool seems right to him, but a wise man listens to advice" - Proverbs 12:15 (NIV)
|
|
|
|
|
Paul,
After I posted my reply I realized that I was responding incorrectly.
Anyway, I observed same "problem" - I was searching for string and not counting the space after the string. Consequently my display was off few characters. ( I was changing the text color)
By accident - and I am sure you are aware of that - if you search rich text control for string using substring search it will give you the first match and it may not be what you are looking for.
Cheers
Vaclav
|
|
|
|
|
Have you tried using EM_FINDTEXT to find the text position instead
of copying the text to a CString?
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
I have now! See my other reply.
Thanks.
"The way of a fool seems right to him, but a wise man listens to advice" - Proverbs 12:15 (NIV)
|
|
|
|
|
Hi there, i have written a dialog based aplication in vc++, my dialog contains some edit box and checkbox controlls that a user can write strings into or check the box's.
I am looking for a way to save the value of whether a box was checked or not so that if the program shutdown or the computer rebooted the program would remember settings when it was next restarted.
any suggestions would be much apriciated.
Chris
|
|
|
|
|
Then you have to save relevant (status) data to disk.
There are many ways to do the above, for instance, you can use the registry or (if there is a big amount of data) build your own files.
If you're using MFC, then have a look at serialization topic http://msdn2.microsoft.com/en-us/library/6bz744w8(VS.80).aspx[^].
BTW if you're already dealing with a database, then store data inside it!.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
[my articles]
|
|
|
|
|
A simple solution would be to use a .inf file or the registry to store your information. If you choose to use .inf file, look into functions like GetPrivateProfileSection() , etc in Windows SDK. If you choose to use the registry, look into registry functions like RegSaveKeyEx() or look into the class CRegKey in ATL.
Do the sync stuff in InitDialog() .
Nobody can give you wiser advice than yourself. - Cicero
.·´¯`·->ßRÅhmmÃ<-·´¯`·.
|
|
|
|
|
You can use of registry for save datas or xml files.
|
|
|
|
|
Can any one tell me how to increase the height of the statusbar
|
|
|
|
|
vethathiri wrote: ...the statusbar
Which one?
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
His one!
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
[my articles]
|
|
|
|
|
But I thought it was the other one. Man, no wonder I'm confused!
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
[my articles]
|
|
|
|
|
There can only be one.
Wait...that's Highlander
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Maybe look in to overriding CStatusBar::CalcFixedLayout()
(see the MFC source for details) or use the SB_SETMINHEIGHT
message.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Thank you
Now it is working fine
|
|
|
|
|
See SendMessage(m_hwndStatusBar,SB_SETMINHEIGHT,22,0);.
|
|
|
|