|
In fact there're up to 30,000 coordinates.
So it's kinda terrible to store all of them in a particular structure at runtime.
|
|
|
|
|
why not use a CArray. store the complete set of values and then load the values dynamically
|
|
|
|
|
It's even more appropriate to store the data rather than to read the full file again. For your information, I wrote an article about a charting control, maybe you can have a look at it and use it instead of recreating your own (see my sig). It works fine with that amount of data.
|
|
|
|
|
Just in case the point is not sinking in.
30000 x CPoints = 30000 * 8 bytes = 234k = 1/4 Mb.
I think you can afford to use that much ram.
What you can't afford is disk access every time your application needs to paint.
Cedric's article is a good one - and can thoroughly recommend it.
Iain.
I am one of "those foreigners coming over here and stealing our jobs". Yay me!
|
|
|
|
|
|
30000 coords 8 bytes each are less than half a megabyte. That's not a big issue!
Unless you think your file can be (in certain situations) millions of coords long!
But -if that's the problem- consider also that the screen doesn't have millions of points in a line, so it is very wasteful keep all those details during drawing, since nobody will never physically able to see them.
If that's the case, consider a design where your file is read in a vector that should not have much more than 10000 records, each of which takes the min, average and max value of a group of coords wide like the number of coords dived by the number of records.
At that point, during ON_PAINT, draw an area that for each of the three values, fills the space between the min and max and draw over it a line that follows the average.
2 bugs found.
> recompile ...
65534 bugs found.
|
|
|
|
|
Just a precision, your answer makes me wonder. You are not thinking about something like this are you ?
structure data
{
double XVal1;
double YVal1;
double XVal2;
double YVal2;
....
....
...
double XVal30000;
double YVal30000;
};
This would indeed be really really really horrible code and a good candidate for The Daily WTF[^]
|
|
|
|
|
Hi, dear all
I need to create a text file with each control at a line, in this line, it include control value, control name and description, the output should be as the following:
False Print - XXXXXXXXXXXXXXXXXXXXXXXXXX
2 Contrl 1 - XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
3.6 Control 2 - XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
23.8 Control 3 - XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0.005 Control 4 - XXXXXXXXXXXXXXXXXXXXXX
The problem is align the column 1, how can I align the decimal point at same position at each line, and prefix the heading as space? and the heading space number is changed according the value?
For example, for contrl 1 and control 2, the heading space is 3, but for control 3, it's 2.
I use something like:
value = Format(Contrl1, " 0")
Writer.WriteLine(value.PadRight(ValueFieldLen) & _
"Contrl 1".PadRight(ContrlFieldLen) & _
"- XXXXXXXXXXXXXXXXXXXXXXXXXX")
value = Format(Contrl3, " 0.0")
Writer.WriteLine(value.PadRight(ValueFieldLen) & _
"Control 3".PadRight(ContrlFieldLen) & _
"- XXXXXXXXXXXXXXXXXXXXXXXXXX")
In this way, the prefix spacing is fixed, this isnot I want.
Thanks!
|
|
|
|
|
VB???? What's that?
Once you agree to clans, tribes, governments...you've opted for socialism. The rest is just details.
|
|
|
|
|
Please, ask your question in the VB forum. This forum is for C++.
|
|
|
|
|
Hey everybody
I have the following code:
wstring curlocale1(::_wsetlocale(LC_ALL, NULL));
printf("+++ current locale: %s", curlocale1.c_str());
::_wsetlocale(LC_ALL, L"en_us");
wstring curlocale2(::_wsetlocale(LC_ALL, NULL));
printf("+++ current locale: %s", curlocale2.c_str());
and the output is:
+++ current locale: C
+++ current locale: C
I can't understand why my locale does not change, what am I doing wrong?
Thanks a lot!
|
|
|
|
|
Used correctly it works fine:
wstring curlocale1(::_wsetlocale(LC_ALL, NULL));
printf("+++ current locale: %S\n", curlocale1.c_str());
::_wsetlocale(LC_ALL, L"English");
wstring curlocale2(::_wsetlocale(LC_ALL, NULL));
printf("+++ current locale: %S\n", curlocale2.c_str());
It's time for a new signature.
|
|
|
|
|
Hey, thanks
But "English" doesn't return "English (United States)", but generic English.
Anyway, I found this GREAT article in codeproject that sort some things out, so I'm sitting on that
Windows SetThreadLocale and CRT setlocale[^]
|
|
|
|
|
Green Fuze wrote: But "English" doesn't return "English (United States)"
Try "English_US". I know locales sometimes seem far more complicated than necessary but there are many different combinations to account for.
It's time for a new signature.
|
|
|
|
|
It seems that "american_US" in ::setlocale and 1033 for ::SetThreadLocale() done the trick .
It is far too complicated than it should've been!
Thanks again!
|
|
|
|
|
Green Fuze wrote: Thanks again!
Thank you for leading me down yet another path of learning.
It's time for a new signature.
|
|
|
|
|
Locales are platform dependent. They're the most irritating bit of the C++ standard as they leave the likes of Redmond and the Penguin crowd to make the decisions. And they're usually different.
I'm not surprised that your code is going horribly wrong on another level - using printf %s with a wide character string is a recipe for printing the first character out if I've ever seen one.
Cheers,
Ash
|
|
|
|
|
I have an MFC program using CMFCToolBars. The toolbar settings are getting saved and read from the registry fine. However when I make changes to the toolbar, re-compile and run the program, it doesn't see these new changes unless I go into the registry and delete the HKEY_CURRENT_USER\Software\MyProgram\settings key. What should I be doing to keep this from happening?
Thanks
Ray
|
|
|
|
|
I'm not sure what you mean by 'changes in the toolbar' (is it the layout you mean?), but what likely is happening is that when you make changes in your code, you change only the *default* layout. Your program first initializes the layout as your code specifies (the default layout), and then looks for user-customized layout. Since one is available, it *overrides* the changes you have made to your code.
Again (if this is what I'm thinking it is), your code only sets the initial, default layout. If there is user-customized layout it supersedes it. I think this is how it's supposed to work.
There is sufficient light for those who desire to see, and there is sufficient darkness for those of a contrary disposition.
Blaise Pascal
|
|
|
|
|
By changes, I mean say if I add a button to a toolbar it doesn't show up unless I delete these setting in the registry. So where or how do I keep it from loading the customized layout if I make changes to my toolbar?
|
|
|
|
|
What type of toolbar are you using? I mean the name of the class. Standard MFC toolbar, or some customized class?
There is sufficient light for those who desire to see, and there is sufficient darkness for those of a contrary disposition.
Blaise Pascal
|
|
|
|
|
It is my class with a base class of CMFCToolBar
|
|
|
|
|
See if CMFCToolBar::LoadState[^] is called. Find it in the MFC sources and put a breakpoint on it. On my computer it's in C:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\src\mfc\afxtoolbar.cpp
There is sufficient light for those who desire to see, and there is sufficient darkness for those of a contrary disposition.
Blaise Pascal
|
|
|
|
|
I'm coding with VC++2008.
When designing the layout of the controls in the .rc file, we can see their coordinates in the bottomright of the screen.
And now I have a control with (4,30) shown there and another one with (5,156). Then I wanna draw a line between these 2 controls using the coordinates by GDI.
pDC->MoveTo(4,30);
pDC->LineTo(5,156);
But at runtime, the line doesn't correspond to those coordinates. I mean there is a big offset from the expected position.
What's wrong?
Thx in advance.
|
|
|
|
|
Units in the resource editor are in DLU ( Dialog (il)Logical Unit); they are used to handle the large font/small font display settings.
from msdn :
dialog unit
A unit of horizontal or vertical distance within a dialog box. A horizontal DLU is the average width of the current dialog-box font divided by 4. A vertical DLU is the average height of the current dialog-box font divided by
M.
Watched code never compiles.
|
|
|
|