|
Can you use of GetWindowText
|
|
|
|
|
If the label control is like a "real" Windows control, and you can get it's HWND , you may be able to use something like GetWindowText(...) . If it is a custom control, or is completely managed by your XGraph class/library, you may have to go through that class/library to get the text for the label.
Peace!
-=- James Please rate this message - let me know if I helped or not!<HR> If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong! Avoid driving a vehicle taller than you and remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road! See DeleteFXPFiles
|
|
|
|
|
Hi,
I have a Dialogbox (Main Dialog). I need to have another dialogbox (no title bar) inside this main dialogbox.
How can i do this ?
Thanks.
|
|
|
|
|
Insert a dialog to your resource or insert a new CDialog to your class
|
|
|
|
|
I mean to say that the second dialog should appear like other controls in that main dialogbox.
How ?
|
|
|
|
|
Sakthiu wrote: I mean to say that the second dialog should appear like other controls in that main dialogbox.
How ?
After insert it to your project use of Create
|
|
|
|
|
I have done this previously using two different approaches. The first was to simply reuse the Property Page/Property Sheet approach, the other was to manually manage the child dialog as a non-modal dialog window, and keep moving/sizing it as the parent is moved/sized.
You have to watch out for focus issues via keyboard navigation in either case. Look up the WS_EX_CONTROLPARENT style and KB articles that mention it for more information.
Peace!
-=- James Please rate this message - let me know if I helped or not!<HR> If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong! Avoid driving a vehicle taller than you and remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road! See DeleteFXPFiles
|
|
|
|
|
You can right click on resource and insert CDialog to your project and on the main dialog use of
m_Preview.Create(IDD_MYDAILOG,0);
m_Preview.ShowWindow(1);
|
|
|
|
|
Dialogs are windows, just like other windows, just like controls.
You may want to look up windows and child windows in the MSDN and/or SDK.
Your dialog needs to be a child window (have the WS_CHILD style) and be modeless. You'll need to
position it within the parent window as well - you can use MoveWindow() for this.
|
|
|
|
|
Create a dialog box without WS_CAPTION style.
|
|
|
|
|
Hello,
I have a class that logs string information into text files. I do a lot of string operations (using CString) and there are several instances of my class running in the same time. Everything works fine excepting high CPU usage which goes up to 70 – 80 percent when 100-150 instances are running.
The final version of the project will require 300-400 instances running and the CPU usage should be as low as possible. If anyone can suggest me a CString replacement that will reduce the CPU usage, I would highly appreciate it.
Thanks,
Dan.
|
|
|
|
|
First, see if you really have to use CString at all... It is far too easy to get into the habit of abusing CString objects because so many developers are too familiar with them.
If you really do need to use a string object, you can try to reduce the number of allocate/deallocate cycles by keeping them around (i.e. do not cause creation of CString objects).
Preallocating space into them when they are first created may also improve performance. See the CString::GetBufferSetLength(...) function for more info.
For most logging applications, you rarely need to log all that much data. For example, a CString can hold easily hold more than 1 megabyte of data, but you will rarely be logging that much in a single call. If you have a maximum logging amount, something like 4, 8, 16 or even 32KB, you can easily use a stack-based buffer for something as small as that. This will significantly improve logging performance.
If you are logging large (>=4KB) amounts of data and using CString::Format(...) you are really wasting time due to the way CString::Format(...) works. You are much better off managing your own memory or sticking to stack-based buffers and a function like ::_sntprintf(...) .
Peace!
-=- James Please rate this message - let me know if I helped or not!<HR> If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong! Avoid driving a vehicle taller than you and remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road! See DeleteFXPFiles
|
|
|
|
|
IMO, avoid using all forms of (xxx)printf, including CString.Format.
I once hand-optimized a loop for writing magnetic tapes. I managed to decrease the processing time (for 1000000 simulated tape writes) from 21 seconds to 4.
Just by replacing one sprintf statement with a number of strcat(), strcpy(), itoa() e.t.c
A that time, I realized the cost (performancewise) of using (xx)printf.
And as James R. Twine said, avoid memory allocations.
Alcohol. The cause of, and the solution to, all of life's problems - Homer Simpson
|
|
|
|
|
Preallocation, as James has already been mentioned, will greatly improve the performance. You might also consider using string instead of CString .
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
DavidCrow wrote: You might also consider using string instead of CString
Is string actually faster? Do you know of any benchmark results? I've got a couple classes in an application that use CString heavily, and wonder if string would improve their performance.
Software Zen: delete this;
|
|
|
|
|
Gary R. Wheeler wrote: Do you know of any benchmark results?
Nothing scientific, just empirical testing.
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
Gary R. Wheeler wrote: Is string actually faster? Do you know of any benchmark results? I've got a couple classes in an application that use CString heavily, and wonder if string would improve their performance.
The memory allocation schemes are different between the two. I believe (but I could be wrong) that the std::string object allocates like std::vector does - that is, it doubles each time. 8 characters, then 16 characters, then 32 characters, etc.
CString on the other hand, basically only allocates what it needs. In MFC 6.0 release mode, CString will use the CPlex* allocators which allocate memory in fixed sized chunks, so that if you keep appending smaller strings or single characters to a CString it may not have to reallocate each time.
std::string can have its reference counting turned off (or it may be by default in some implementations), which may increase its performance a bit.
I guess it would depend on the usage of the string object. If you are simply using them as replacements for a manually managed char buffer, and are not doing anything really specific to a string object with it, you may not notice much difference. If you build strings through constant append operations, you may notice a difference.
If using a multithreaded VC++ 6.0 app, you can customize the allocator used for std::string much easier than CString , which will allow you to help mitigate heap contention between threads. (Which can be a big hit if CString abuse is high.)
:P IMHO, the best way you can increase CString performance is to avoid it entirely! :P
Peace!
-=- James Please rate this message - let me know if I helped or not!<HR> If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong! Avoid driving a vehicle taller than you and remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road! See DeleteFXPFiles
|
|
|
|
|
James R. Twine wrote: std::string can have its reference counting turned off (or it may be by default in some implementations), which may increase its performance a bit.
See the comparison in http://www.codeproject.com/string/fix_str.asp[^]
|
|
|
|
|
Unless I am missing something, I am not seeing a good comparison there. I see a few mentions of the words "fast" and "slow" but nothing that shows exactly how fast or slow something is. Something has to be faster or slower than another.
Peace!
-=- James Please rate this message - let me know if I helped or not!<HR> If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong! Avoid driving a vehicle taller than you and remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road! See DeleteFXPFiles
|
|
|
|
|
I'm having some issues converting to wide char string, and I think my brain is too far shot to figure it out anymore
Not using UNICODE, so I'm trying to convert a filepath returned from GetOpenFileName into a wide string to pass to a DirectShow function. Looks like this:
TCHAR achPath[MAX_PATH];<br />
WCHAR wcPath[MAX_PATH];<br />
<br />
...after GetOpenFileName<br />
<br />
sprintf(achPath, ofn.lpstrFile);<br />
int nLen = MultiByteToWideChar(CP_ACP, 0, (LPCSTR)achPath, -1, NULL, NULL);<br />
MultiByteToWideChar(CP_ACP, 0, achPath, -1, wcPath, nLen);<br />
nLen is returning the correct number.
If I use nLen as the last parm in the second call, I get only the first char in wcPath. If I use NULL, I get a whole bunch of weird chars, then the full path at the end.
I'm sure I'm doing something stupid, but my brain is not working well on this one. Help
|
|
|
|
|
These APIs r complicated. Better u use CRT functions.
From Wide to MultiByte, use wcstombs ().
From MultiByte to Wide, use mbstowcs ().
These two CRT function r very simple to use and reliable, ofcourse.
Come online at:-
jubinc@skype
|
|
|
|
|
Don Box wrote: These APIs r complicated. Better u use CRT functions.
Is that a joke?
|
|
|
|
|
This code works perfectly for me. Can you give more inputs,
Here is its snippet,
TCHAR achPath[MAX_PATH];
WCHAR wcPath[MAX_PATH];
OPENFILENAME ofn;
TCHAR szFile[260]={0};
ZeroMemory(&ofn, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = this->m_hWnd;
ofn.lpstrFile = szFile;
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = "*.TXT\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
if (GetOpenFileName(&ofn)!=TRUE)
{
return;
}
sprintf(achPath, ofn.lpstrFile);
int nLen = MultiByteToWideChar(CP_ACP, 0, (LPCSTR)achPath, -1, NULL, NULL);
MultiByteToWideChar(CP_ACP, 0, achPath, -1, wcPath, nLen);
|
|
|
|
|
I finally got too frustrated with MultiByteToWideChar. So I ended up doing it like this, which works fine:
WCHAR wFile[MAX_PATH];
wcsncpy(wFile, T2W(ofn.lpstrFile), NUMELMS(wFile)-1);
Thanx for getting me back on track
|
|
|
|
|
Actually, you can just do:
WCHAR *wFile = T2W(ofn.lpstrFile); - Because T2W(...) returns a pointer to memory allocated from your own stack. Which, BTW, is why you need to be very careful with how you use things like _alloca(...) and the conversion macros. Do not use them in loops or with large amounts of memory.
There is no reason to copy that string twice.
Peace!
-=- James Please rate this message - let me know if I helped or not!<HR> If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong! Avoid driving a vehicle taller than you and remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road! See DeleteFXPFiles
|
|
|
|
|