|
Errr.... Do you have a question or are you posting your homework for our enjoyment?
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"
|
|
|
|
|
|
He must be very desparate. This is the second post of the same homework assignment. Very annoying to pollute this message board.
|
|
|
|
|
I have the following code in my .h file
<br />
ForecastStruct Forecast[24];
CList<ForecastStruct *, ForecastStruct *> m_WeatherList;<br />
Basically what I want is a Linked list of Forecasts stored in m_WeatherList. The Forecast variable is an array for each hour of the day. I want to store this variable in the list m_WeatherList List.
to do that I do
<br />
m_WeatherList.AddTail((ForecastStruct *)Forecast);<br />
Forecast is correct. I can see all 24 indexes and each holds the right data. When I look at m_WeatherList after the line above, the data is wrong. I do not see my appended Forecast object.
Does anyone know what I am doing wrong?
Thanks!
-- modified at 18:48 Monday 3rd April, 2006
|
|
|
|
|
You need to tell us what m_WeatherList is. I'm guessing its a
CTypedPtrArray.
If that's the case, then you have added 1 element to the List.
If you wanted to add all 24, you need to do:
CTypePtrArray<CPtrArray, Forecast *> m_wList;
for (int i = 0; i < 24; i++)
m_wList.AddTail ( &(Forecast[n]) );
Iain.
|
|
|
|
|
m_WeatherList is a CList. Based on what is written above I would rather have the objects separated then at intervals of 24. That is what I would like is an object that holds Forecast objects as a whole in a linked list.
m_WeatherList Head Object
Forecast[0]..
Forecast[1]..
..
..
m_WeatherList Next Object
Forecast[0]..
Forecast[1]..
..
..
Thanks!
|
|
|
|
|
Hi,
I am having a project written in VC++6. I am including an updated header file from one of our research board manufacturers (NI). When I try to compile the project it is giving me errors like -
1)error C2632: 'char' followed by 'char' is illegal
2)error C2632: 'short' followed by 'short' is illegal
3)error C2632: 'short' followed by 'int' is illegal
4)error C2632: 'long' followed by 'long' is illegal
These header files are written in ANSI C and the code where this error occurs is like -
#ifndef _NI_int8_DEFINED_
#define _NI_int8_DEFINED_
typedef signed char int8; <--- error(1)
#endif
#ifndef _NI_int16_DEFINED_
#define _NI_int16_DEFINED_
typedef signed short int16; <--- error(2)(3)
#endif
#ifndef _NI_int32_DEFINED_
#define _NI_int32_DEFINED_
typedef signed long int32; <--- error(4)
#endif
Can someone help me out from this issue???
thanks,
-Pav
|
|
|
|
|
i did a test for u, int8 is not defined in my code,
then i add the 2 lines
#define int8 char
typedef signed char int8;
and get same error as you have, so it means int 8 has been defined somewhere before your include.
//add the line u will not have error 1
#define _NI_int8_DEFINED_
//then
#include "the_very_very_ugly_file.h"
do same for all errors.
A special image tool for Windows C++ programmers, don't miss it!
The world unique Software Label Maker is waiting for you and me ...
A nice hyper tool for optimizing your Microsoft html-help contents.
|
|
|
|
|
Yep, it worked without errors. Thanks for your help and time. BTW howcome it is declared ahead if I am not declaring it anywhere else??
-Pav
|
|
|
|
|
as i know, they (int8 etc) are defined by VC in some h files, u may include those VC files somewhere.
if you want to now where they are, add follow line
#define int8 char**
or something likes above (redefine), compiler will tell u warning ..., so u can find pre-define.
A special image tool for Windows C++ programmers, don't miss it!
The world unique Software Label Maker is waiting for you and me ...
A nice hyper tool for optimizing your Microsoft html-help contents.
|
|
|
|
|
Thanks for your useful reply. I had another question for you, not realting to this post, how can I start a process (to say an exe) within another cpp project and terminate it whenever I want to. I am looking at CreateProcess(but seems this function waits till the called program exits for the calling program to gain control). I need to call an exe file independently of the calling program.
Ex: program1 calls exe file of program2, program2 executes on itself and keeps running untill program1 terminates program2 instance.
Any suggestions on easy implementation of this??
thanks,
-Pavan
|
|
|
|
|
use ShellExecute(this->m_hWnd,"open","your EXE File Name","","",SW_SHOW );
ur exe must be within ur Project Folder
Aavesh
|
|
|
|
|
Thanks, I thought of using this too, but How can I terminate the process that is created??( I would like to stop this process wherever/whenever I want)
thanks,
-Pav
|
|
|
|
|
hi
u must tell me which type of exe u r calling
explain little more ur question
Aavesh
|
|
|
|
|
Ok here ya go, the exe file I want to execute is another executable generated from another cpp program. Basically my program generates a waveform depending on the clock that we input to that board. The clock is generated by a NI board and this is written in another cpp file. So, in my actual waveform generation code I want to control the clock generation from NI board at my will. Hope I am clear.
thanks,
-Pav.
|
|
|
|
|
This has probably been solved a million times before, but I can't find anything. I have an Import option that allows the user to convert data from one format to another, which can be time-consuming. Therefore, I would like to have a dialog box with a progress bar.
My first approach was to create a modeless dialog and update the file list and progress bar as I go. But my problem is the dialog never finishes displaying before processing begins, so I can't use the Cancel button. I'll assume its because I'm in a loop and never return to the system to process the dialog messages. I tried doing a PeekMessage but that doesn't seem to help.
My second approach (which I haven't tried yet) is to do a modal dialog with the dialog class doing all the processing. In this case I would process WM_KICKIDLE messages for the processing.
I also considered using the OnIdle callback to do the processing. But the problem with that approach is OnIdle is in WinApp and the processing is taking place in the View window.
I guess my real question is, how is this normally done? You see see progress dialogs all the time in commercial programs, is there a "standard" way or best way that this is normally done?
Thank you.
Jim
|
|
|
|
|
JRGlide wrote: My first approach was to create a modeless dialog and update the file list and progress bar as I go. But my problem is the dialog never finishes displaying before processing begins, so I can't use the Cancel button. I'll assume its because I'm in a loop and never return to the system to process the dialog messages. I tried doing a PeekMessage but that doesn't seem to help.
You're on the right track. This is the standard way of tackling this problem. Look at this[^] article for details on how to implement the message loop during processing. Just replace the couple of comments at the bottom of the code sample with your processing.
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 think you should use the first method, with a modalless dialog, wich should include a progress control. Than you should add in the parent window, wich does all of your processing, a call to a user defined method like this:
void CYourParentDlg::ProcessIdleMessages()
{
MSG msg;
while(::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if (msg.message == WM_QUIT)
{
::PostQuitMessage(0);
break;
}
if (!PreTranslateMessage(&msg))
{
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
}
}
This method will process each message and it will respond to your 'Cancel' button.
|
|
|
|
|
Thanks to both of you for your help. I've been going nuts because I couldn't get either method to work. With the first one I got undefines on the PumpMessage call, and the second one I got undefines with the PreTranslateMessage call.
Then it finally dawned on me, I was trying to call them from an import class that wasn't derived from a Windows class! I guess that's why Mihai told me to do the processing within the parent window. I need to re-structure things. Stay tuned...
And thanks again.
|
|
|
|
|
I am developing a directshow filter, but there are errors when running in graphedt. I do not know how to debug the filter. Thanks for any information about the filter debug. BTW, I am using VS2005.
|
|
|
|
|
I want to send a float in SendMessage instead of a UINT, so I thought I'd use union. I am having issues with unions
(see below). So how does one SendMessage a float?
I gathered that if I make a union
union
{
int n;
float s;
}convert
and do
convert.n = 5;
Then convert.s should give me 5.0
However this is not what I am getting. convert.s doesn't have anything meanngful in it.
Is this not the right way touse a union?
thanks,
sb
|
|
|
|
|
float s = 5.0;
SendMessage(hWnd, msg, 0, (LPARAM) &s);
In the message handler routine, cast LPARAM back to a float .
"Let us be thankful for the fools. But for them the rest of us could not succeed." - Mark Twain
"There is no death, only a change of worlds." - Native American Proverb
|
|
|
|
|
Thank you.
Is the messageHandler for the sendMessage like
afx_msg LRESULT OnDrawCursorOnPlot2(WPARAM subsetIndex,LPARAM sampleNum);
or
afx_msg LRESULT OnDrawCursorOnPlot2(UINT subsetIndex, UINT sampleNum);
Where would I find this info? I tried the former, but when I cast the LPARAM back into float
I didn't get back what I sent in.
LRESULT CMagAnView::OnDrawCursorOnPlot2(WPARAM subsetIndex, LPARAM location)
{
float fX = (float)location;
}
and
m_pParentWnd->SendMessage(UDM_DRAWCURSOR,subsetIndex,(LPARAM)&fX);
thank you,
sb
|
|
|
|
|
messagehandler is always like:
afx_msg LRESULT OnDrawCursorOnPlot2(WPARAM subsetIndex,LPARAM sampleNum);
and in the handler you have to get the float value back as below:
LRESULT CMagAnView::OnDrawCursorOnPlot2(WPARAM subsetIndex, LPARAM location){<br />
float *fX = (float*)location;<br />
}
and sendmessage format is:
m_pParentWnd->SendMessage(UDM_DRAWCURSOR,(WPARAM)&subsetIndex,(LPARAM)&fX);
(hope you haven't declared subsetIndex as a poniter, if so no need to put & for subsetIndex )
cheers ...mil10.
|
|
|
|
|
Ah! Thanks!
I guess I got overawed by the LPARAM and didn't realize I needed to dereference the value.
I thank you much for the help.
|
|
|
|