|
Your question implies that you are doing,
for (int ii = 0; ii < a_vector.size (); ++ii )
{
a_vector [ ii ].DoSomething () ;
}
You may find that operator [] on vector is more expensive than size. Especially given that in many cases an interator resolves to a plain old pointer, so both the dereference and the increment are cheap.
Perhaps you could measure your way and also,
A_VECTOR::iterator it ;
A_VECTOR::iterator itE = a_vector.end () ;
for ( it = a_vector.begin () ; it != itE; ++it )
{
(*it).DoSomething () ;
}
But it's cleanest by far to write,
class A_TYPE { ... } ;
vector<A_TYPE> a_vector ;
for_each ( a_vector.begin (), a_vector.end (), mem_fun_ref ( &A_TYPE::DoSomething )) ;
or some variant of function, functor etc that suits your code. I think this is probably potentially the fastest since the compiler has all the information to inline everything.
Paul
|
|
|
|
|
C++ in "Hardware structures" stand point question: Does the ALU handle any floading points operations? or will the processor let the FPU handles them?
I mean, any floading point operation, both simple and complex ones.
Thanks.
|
|
|
|
|
If the CPU has an FPU, then the FPU will handle all floating-point operations, as long as the compiler uses the correct instructions. If it emulates floating point in software, then the FPU will not be used. Also, if the FPU doesn't support a certain operation, it will have to be emulated in software (which, incidentally, will probably use other FPU instructions).
There are very few cases when a CPU's main ALU actually handles floating-point operations - floating-point DSP processors are the only ones I can think of.
Ryan "Punctuality is only a virtue for those who aren't smart enough to think of good excuses for being late" John Nichol "Point Of Impact"
|
|
|
|
|
I have a property page that is used multiple times in a wizard with slight variations each time. Therefore for each instance of the page I want to show/not show various controls. How do I do that? I thought I could just make a control variable and then do something like m_nListBox1.SetVisible or something or other. How do I dynamically make controls visible and invisible? I am missing something obvious and it must be because I got up far too early this morning.
|
|
|
|
|
use CWnd::ShowWindow function to show or hide them.
|
|
|
|
|
Tried this in OnInitDialog and OnSetActive. Causes and assertion both times.
|
|
|
|
|
ShowWindow is THE API to use to show and hide windows, if your window does not exist yet, the function will assert.
Try making sure that the window you are calling this function on is valid before you call this function.
an exmaple of this would be
Page::OnInitDialog();
{
BOOL ret = CPropertyPage::OnInitDialog();
CWnd *pWnd = GetDlgItem(IDC_MY_WINDOW);
if (!pWnd || !::IsWindow(pWnd->GetSafeHwnd())
{
ASSERT(FALSE);
}
else
pWnd->ShowWindow(SW_HIDE); // or whatever you want to do with it.
}
Did you use classwizard to generate control variables for your window objects?
/yawar
|
|
|
|
|
Hi,
I have an over-ridden handler CMyDialog::OnNcLButtonDown() which detects if the user selects the title bar of my dialog. The user then drags the dialog and releases the mouse button. How can my program know when the mouse button has been released? I have tried over-riding the CMyDialog::OnNcLButtonDown() function but it does not work.
|
|
|
|
|
Anonymous wrote:
I have tried over-riding the CMyDialog::OnNcLButtonDown() function but it does not work.
Sorry. I mean to say the CMyDialog::OnNcLButtonUp() function
|
|
|
|
|
try overloading WM_NCHITTEST message, the code will look something like this
UINT YourClass::OnNcHitTest(CPoint point) <br />
{ <br />
int ret = YourParentCwndBasedClass::OnNcHitTest(point);<br />
if (ret == HTCAPTION)<br />
{<br />
if (GetAsyncKeyState(VK_LBUTTON) < 0)<br />
{<br />
if (!mbLButtonDown)<br />
{<br />
TRACE("\nDown");<br />
mbLButtonDown = true;<br />
}<br />
}<br />
else<br />
{<br />
if (mbLButtonDown)<br />
{<br />
TRACE("\nUp");<br />
mbLButtonDown = false;<br />
}<br />
}<br />
}<br />
return ret;<br />
}
where mbLButtonDown would be a bool member of your class and would need to be initialized as false when constructing your window.
There might be some other way to do this too, this was just a quick thing that came to my mind.
HTH,
/yawar
|
|
|
|
|
I said "try overloading".. that was not right, I meant "try writing message handler for"...
|
|
|
|
|
Another way to detect the end of a move by dragging the caption bar is to simply handle WM_MOVE and check if the mouse is over the window's caption bar. You can do this by calling GetCursorPos() and checking if the point lies within the caption bar. GetWindowRect() and GetSystemMetrics() can help you in your computation.
/ravi
My new year's resolution: 2048 x 1536
Home | Articles | Freeware | Music
ravib@ravib.com
|
|
|
|
|
How do you form the filepath string to indicate you want to save a file to the desktop?
I know "C:\\FOLDER\\FILE.TXT"
but what is the path to the desktop?
A client asked me to make a simple change to a downloadable web installer tool I wrote. It used to have a File...Save As dialog and they wanted me to change it to automatically save to the dektop. No problem! I said I'd do it for free. Delete the common dialog code, change the CFile.SetFilePath code from CCommonDialog.GetPathName to............ what? What is that magical cobination of ascii characters that tells my app to save to the desktop?
TIA!
//placeholder for witty verbiage
|
|
|
|
|
use ::SHGetSpecialFolderLocation or SHGetSpecialFolderPath function. with folder parameter as CSIDL_COMMON_DESKTOPDIRECTORY (for all users) or as CSIDL_DESKTOP (for currently logged in user).
Functions are declared in Shlobj.h
/yawar
|
|
|
|
|
Fantastic Yawar!
I googled, I searched but I never would have thought to look there
This did the trick. Thanks.
//placeholder for witty verbiage
|
|
|
|
|
SHGetSpecialFolderLocation()
"No matter where you go, there your are." - Buckaroo Banzai
-pete
|
|
|
|
|
Hi,
I am quite new to Internet Programming.
I am trying to create a program that will load an HTML page from an address i give to him, and fill the edit boxes with values i have in memory (let's say... any constants for now)..
For example, the interface should have just a text box to enter the URL, a fill button, and an area for HTML page to appear in.
When i enter the URL and press enter, the HTML area loads the page with the URL (PROBLEM #1.. dunno how to do this!)
When i press Fill, the text areas get filled by some constant (PROBLEM #2.. dunno how to do this!)
Could you please help? Is there any kind of documentations that will be of help?
Thank you very much for all the help in advance..
|
|
|
|
|
|
Just looking for a little clarification here. We have a third party application that we don't control the codebase to, however we do provide the calculation engines it uses. What I am looking to do is time how long it takes from when someone clicks a button within their application to when the report it creates is subsequently displayed. I thought we could use a Windows Hook but from the bit I have read about them, it requires you to have a handle to the process loaded in memory, with the examples I have seen they typically have control over this simply by calling LoadLibrary() . I don't want to load another instance of the executable into memory to get a HANDLE to it. Does anyone have any comments to point me in the right direction? Thanks in advance.
- Nick Parker My Blog | My Articles
|
|
|
|
|
>> however we do provide the calculation engines it uses.
So it's a DLL? If so you can change your DLL to get the handle to the current process. Your in.
If they link to your lib staticaly that won't work of course. However you can enject DLL into a process. There are articles on MSDN and maybe even here at CP about doing that.
"No matter where you go, there your are." - Buckaroo Banzai
-pete
|
|
|
|
|
Depending on what all things the calculation engine does, a timer approach might be useful. If the calculation engine doesn't format the end report, then consider creating a timer that calculates the elapsed time, and one timer that polls for the existence of the report window.
I know the latter approach is more or less a hack, but being unable to access the actual codebase it becomes quite difficult to measure the time it takes for a code fragment to execute. So, I would go with one or two timers, if I needed the functionality you describe.
Additionally, if you need to determine when the button is pressed, it becomes even more difficult. The only option would be to monitor the messages posted to the program window, and capturing the WM_COMMAND message send by the button click to start the timer.
All in all, the whole idea sounds like a waste of time and resources. Why not ask the developer of the third party app to implement a timer ?
-Antti Keskinen
----------------------------------------------
The definition of impossible is strictly dependant
on what we think is possible.
|
|
|
|
|
If the 3rd party app is not a multithread app, you should be fairly safe with using a combination of FindWindow() for the HWND and GetWindowThreadProcessId() for the process identifier when you have the HWND and lastly OpenProcess() to get its HANDLE once you have the process identifier.
And there's EnumProcesses() , but that's NT only.
Jeremy Falcon
|
|
|
|
|
Hi,
I am interested in understanding how in VC++6 to program a toolbar for Internet Explorer. Is it simply an MFC app or what? Obviously, I'd have to have it work with IE somehow, can anyone point me in the right direction?
|
|
|
|
|
Internet Explorer, in it's later versions, is tightly integrated with the Windows Shell. The toolbars you refer to are actually COM objects, which implement a set of certain interfaces. The big idea behind this is that you can use the same objects for both Explorer (Shell) and IE.
To see this feature in action, open IE. You probably have some type of an extra toolbar like CodeProject SearchBar or Google Toolbar. If you open up 'My Computer', you can use 'View'->'Toolbars' to enable to Google Toolbar for Windows Explorer as well. The difference is that Internet Explorer has a specific set of options, which 'differentiate' it from standard Explorer.
To sum it all up, in order to create an IE toolbar, you need to create a COM object that supports the specific interfaces. Then register this object with OLE, and restart IE. It will query OLE for a list of registered objects and allows the user to hide/show these toolbar objects through the View->Toolbars/Explorer bars menu options.
For an MSDN link, containing in-depth discussion and a set of code examples, go here
Also, a CodeProject IE Programming area is available in here.
-Antti Keskinen
----------------------------------------------
The definition of impossible is strictly dependant
on what we think is possible.
|
|
|
|
|
I'm trying to make a dialog that fits on screen resolutions 800*600 and up. My resolution is 1600*1200.
When I was originally designing my dialogs I foolishly assumed that the number Visual Studio gives in the lower right hand corner is the size of the dialog in pixels, so I designed it to be less than 700. Lo and behold, it's way too big for an 800*600 resolution. How the heck do I know what numbers to keep the size under?
Thanks,
Jay
|
|
|
|