|
PtrCreat = new foufou;
PtrCreat->initPosX = 0;
PtrCreat->initPosY = 0;
VectorOfCharacter.push_back(PtrCreat);
Kuphryn
|
|
|
|
|
I have a C++ framework [^]I have been working on.
I have gotten a fair amount of interest from developers in other countries (quite a few from Brazil, for whatever reason), and have
frequently been asked about i18n and l10n support.
At this point there is no support for it in the framework proper (other than a largely empty, and non-functional, Locales class).
However I would appreciate peoples advice/thoughts/comments on how
approach adding support for in my library.
My thinking at the momement is this:
it seems to me I can add this support in 1 of 3 ways
1) use the IOStream and the std::facet and std::locale classes
pros: part of the standard C++ Lib, and thus fits with everything else (sort of)
cons: kind of wanky to understand, not widely used (or understood either, from what I can tell), and it appears that the implementation of it varies widely on the STL implementations. For example in the VC6 version of STL you have to use weird macros to deal with the facet classes (instead of having implemented has_facet() they have you use a macro _HAS). In STLPort I read in one of the forums that there were bugs in the implementation of some of the classes (don't remember which at the time) that make using it kind of iffy.
2) use IBM's oss ICU[^] Library which seem VERY feature complete
pros: has alot of features, and seems generally to have been quite well thought out. Supports everything it would seem you'd want or need in this sort of library.
cons: It's huge, and hard to "break" apart, plus it has anumber of duplicate features in it. For example, it has it's own thread support package. Also not entirely sure how to integrate it
3) Use a peer approach. Define an interface ( or series of interfaces) that encapsulate the functionality that is needed, then implement each for the platform being ported to, as most of the major platforms seem to have support for this built in. For example, Windows (Win32), MacOSX, and Linux all have support for message catalogs, as well as varying degrees of Unicode conversion (Win32 and MacOSX are complete in this aspect, with Linux so-so, AFAIK), and also have support for stuff like collating, etc.
pros : takes advantage of the native platform, where it makes sense. A default implementation could even make use of the ICU library mentioned above, simply forwarding the various calls along to it. This also makes it "easier" in terms of integration into my framework.
cons: ??? not sure there's any?
At the momement I am leaning towards option 3. If I do this it seems to me that the major things I need to provide support for are:
translating strings from ascii to Unicode (and vice-versa), and allowing this to work with different code pages
have a standard string class that is Unicode based (in terms of it's internal data) and have a super set of functionality of the std::basic_string<> class
allow for conversion to and from a number of different formats, such as numerical data, currency, time, dates, etc, to a string value (that is internally Unicode)
allow for collation of strings (i.e. comparing string A is less than, great than, or equal to string B)
meesage catalogs, the ability to request an identifier for a string be matched to a localized string value consistent with the current locale for the program
identify and setting the current locale of the program, on at least a process level, and perhaps by thread.
Am I missing anything here?
Doea anyone have any experience with this? Any comments or suggestions, particularly if you have used ICU or some other i18n lib.
Thanks
¡El diablo está en mis pantalones! ¡Mire, mire!
Real Mentats use only 100% pure, unfooled around with Sapho Juice(tm)!
|
|
|
|
|
I18n is not a big package. It is a standard to retrieve language dependent resources. It works always the same way to retrieve e.g. a string resource from your program. If You have set a language on program startup the corresponding resource dll which the translated resources is loaded. The dlls are located according to I18n in the en,de,us,... directories below your .dll,.exe which is translated. I18n only helps You to find the proper dll for the currently selected language. Normally there is a global resource handle defined e.g.
HANDLE g_inst = 0;
If your application now does sth like CString str; str.LoadString(IDS_NAME);
Your LoadString implementation has to use the g_inst handle and all is fine.
If no translated resource exists you always have the fallback of your internal resources which you did include in the dll,.exe at compile time. You only have to use the current module handle thats all I think.
|
|
|
|
|
Sorry, perhaps my issues weren't made clear.
I am looking to implement i18n and l10n in a cross platform C++ framework. Not MFC and not just for windows (if that were the case it would be a non-issue).
My questions are more along the lines of what do I need specifiy in terms of an interface (or interfaces) to provide this kind of support
¡El diablo está en mis pantalones! ¡Mire, mire!
Real Mentats use only 100% pure, unfooled around with Sapho Juice(tm)!
|
|
|
|
|
i want to know how many bytes have been sent while i'm send something,so that i can control a progressbar to show the progress.how can i do it?(i'm using SDK)
modified 1-May-21 21:01pm.
|
|
|
|
|
WSASend() and send() winsock API returns the actual number of bytes sent.
Kuphryn
|
|
|
|
|
Hi.......I want to save desktop's image in 256 colour settings programatically. Actually I have done it but some colour loss is there. So please let me know some idea or some piece of code through which I can save image as it actual looks like.
Thanks a lot.
C.R.Naik
|
|
|
|
|
Does this article help any?
http://flounder.com/screencapture.htm
|
|
|
|
|
Thanks for you support.....
This is not a perfect solution for me because I want to save image as bitmap file and particularly for 256 colour image. Currently I can do it but some colour loss is there.
Thanks again
C.R.Naik
|
|
|
|
|
Please help!! When I stop my application (appl1.exe), the process appl1.exe is not killed. Bellow is the loop that causes this problem.
for(;;){
Sleep(100);//pour alléger le CPU
DoEvents();
if (Playing==FALSE)
{
Playing=TRUE;
break;
} //end if
}// end for
where:
void DoEvents(void)
{
MSG msg;
while(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
Thank you very much in advance.
Zakaria
azakaria_2000@voila.fr
|
|
|
|
|
Have you initialised and set Playing correctly? If it isn't set to FALSE, then the for loop will never break.
|
|
|
|
|
Thanks a lot!! You are right!!
|
|
|
|
|
hi
i'm creating a new dialog box when a user clicks a button om my existing dialog, using code:
CDialog *cd = new CDialog(IDD_SHOW);
cd->DoModal(); //displayed modally
delete cd;
how do i set text in an edit box in the dialog box IDD_SHOW
(the id of editbox id IDC_E_DATA.)
|
|
|
|
|
GetDlgItem( IDC_E_DATA)->SetWindowText("text");
NHM
|
|
|
|
|
You have to make your own class derived from CDialog: when you have your resource editor open, open classWizzard and it will says that IDD_SHOW is a new resource and if you want to create a new class for it. Say yes and specify your class name (CMyDialog for example).
Click on the member variable tab and add a member variable for your edit box (IDC_E_DATA) of type CString (says m_MyString).
Then you have to add a public member function within your class to set the string:
CMyDialog::SetStringData(CString NewString)
{
m_MyString = NewString;
}
Then, in your OnInitDialog function, call UpdateData(FALSE);
Thats it, hope this helps
Cédric Moonen
|
|
|
|
|
You could try to get a pointer to the edit ctrl or even make a public var that hosts the edit ctrl. But the best method (afaik) would be to create a public function inside the newly created dialog that receive a CString as a parameter.
Then from your code you should have to call that function and that would be done.
-----------------------------------------------------------------------------
Ways for setting the text (inside the function and in the implementation file of your dialog class):
1. you should create a CString var. related to the edit control using the class wizard, once that is done you can modify it's value in that previously named public function by setting the value and UpdateData(FALSE); call.
2. you could create a CEdit var. related to the edit control using the class wizard, once that is done you can modify it's value by using SetWindowText(); .
3. you could try to search for your control inside the dialog and then set the text directly via SetWindowText();
hope this helps...
|
|
|
|
|
btw, if you create a modal dialog, you need not create the variable on the heap. Just do
CDialog cd;
cd.DoModal();
regards
modified 12-Sep-18 21:01pm.
|
|
|
|
|
Use SetDlgItemText(...) function in the OnInitDialog()
handler of the dialog box.
eg
SetDlgItemText(IDC_E_DATA,string_data);
R.Balachandran
|
|
|
|
|
I need to develop a VC 6.0 dll routine to be called be VB.
The VB program has a hierarchy of form calling sequence.
MainForm -> FormP -> FormQ or
MainForm -> FormX -> FormY
My VC routine in dll will be called in ANY of these five forms. Is there any way for the VC routine dynamically obtain the handle of the MainForm no matter from which form it is called.
Thank you.
|
|
|
|
|
wavewave wrote:
Is there any way for the VC routine dynamically obtain the handle of the MainForm no matter from which form it is called.
In short, no. What you'll need to do is pass it as a parameter.
In your VC routine, try this...
void MyFunc (HWND hWnd, ...);
And call it from a form in VB like this...
MyFunc Me.hWnd, ...
Jeremy Falcon
|
|
|
|
|
Thanks for your information. As there are nested call in forms, I wish to avoid handle passing and wonder if GetWindow command can accomplish my requirement.
|
|
|
|
|
The best (and most reliable) way is to pass its handle. I mean you can say frmWhatever.hWnd throughout the entire VB project because forms have global scope.
In the VC++ DLL using the GetWindow() method will not return the handle for the VB form. You can try using something like FindWindow(), but there's no guarantee you'll get the exact handle you want.
Jeremy Falcon
|
|
|
|
|
How can I change the color of text and background within a SINGLE panel of the Status Bar?
I have use SB_SETBKCOLOR message but it changes the background color of ALL panels of the Status Bar and I cannot change the color of the text.
Thank you.
|
|
|
|
|
The panes are not separate windows. Therefore they cannot be operated on individually, at least not that I know of.
|
|
|
|
|
However some applications such as MS Visual C development can create this effect.
For MS Visual C, when I search a text pattern in the program source and it can found no more, a message with different background and text color is shown in left panel of status bar with the remaining status bar unchanged.
Please advise
|
|
|
|