|
DaveE9th wrote:
Do I need a database?
That's a good place to start . This is a perfect situation for using a database.
Ryan
Being little and getting pushed around by big guys all my life I guess I compensate by pushing electrons and holes around. What a bully I am, but I do enjoy making subatomic particles hop at my bidding - Roger Wright (2nd April 2003, The Lounge)
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"
|
|
|
|
|
Hi,
I have a x.bmp file. Now i want the data extract some part of the data and store it in an another BMP file. How can i do that?
Regards
Asha
|
|
|
|
|
I want to know if an IP address is in use on LAN.
Usually ping works,which can tell me whether the remote machine is alive or dead.
But it does not always do the job for the reason of firewalls or something else..
even if I 've got a result like this:
C:\>ping 192.168.28.168
Pinging 192.168.28.168 with 32 bytes of data:
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Ping statistics for 192.168.28.168:
Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
When I change my IP address to 192.168.28.168, Windows informs me that "The IP address 192.168.28.168 is already in use."
How can I know the IP is in use before I changed my IP to that and Windows popups the dialog?
What is the mechanism of Windows examing if an IP is in use?
|
|
|
|
|
Hi, everybody
I have designed a dialog box using resource manager and a MSFlexGrid type pointer variable defined in its class. The OnInitDialog function looks like this:
class CViewRecordsDlg : public CDialog
{
private:
CMSFlexGrid * m_pFlxGrid;
}
BOOL CViewRecordsDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
m_pFlxGrid = (CMSFlexGrid *) new CMSFlexGrid;
ASSERT (m_pFlxGrid != NULL);
RECT rect;
GetClientRect(&rect);
m_pFlxGrid->Create(_T("CMSFlexGrid"), _T("CMSFlexGrid"), CEditView::dwStyleDefault, rect, this, IDC_MSFLEXGRID, NULL);
/*
...
Some grid Initilization here
...
*/
m_pFlxGrid->UpdateWindow();
m_pFlxGrid->ShowWindow(SW_SHOW);
return TRUE;
}
This code runs on my computer and shows grid correctly (even without calling UpdateWindow and ShowWindow methods). But on another computer grid doesn't appear (it is shown only blanked dialog box without any error message ). I am sure the FlexGrid control is registered in computers. The same code with placing FlexGrid control on dialog box using resource manager and defining a variable on it using Class Wizard works without problem on all computers.
Would you please advice me how I can solve this problem?
|
|
|
|
|
Did you try putting the grid on the dialog using the resource editor?
// Afterall, I realized that even my comment lines have bugs
When one cannot invent, one must at least improve (in bed).-My latest fortune cookie
|
|
|
|
|
Hi,
How can i convert 2.343434343 to 2.34 without using any spintf() atoi() command?
Reagrds
Neha
|
|
|
|
|
Round up, if required
2.343434343 + 0.005
Multiply by 100.0 and cast to an int
cast to a float and divide by 100.0
Not sure if this will introduce rounding errors though, you may need to cast to a double.
If I have seen further it is by standing on the shoulders of Giants. - Isaac Newton 1676
|
|
|
|
|
Any other simple ways??????
|
|
|
|
|
this is already the most simple one.
However, instead of casting to int, I would call trunc()
"Der Geist des Kriegers ist erwacht / Ich hab die Macht" StS
sighist | Agile Programming | doxygen
|
|
|
|
|
peterchen wrote:
I would call trunc()
Don't you mean modf() ?
If I have seen further it is by standing on the shoulders of Giants. - Isaac Newton 1676
|
|
|
|
|
|
double result = floor((x+0.005)*100.0)/100.0; This should do the job, including rounding. If you don't need rounding, remove the +0.005 bit.
Ryan
Being little and getting pushed around by big guys all my life I guess I compensate by pushing electrons and holes around. What a bully I am, but I do enjoy making subatomic particles hop at my bidding - Roger Wright (2nd April 2003, The Lounge)
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"
|
|
|
|
|
Ryan Binns wrote:
double result = floor((x+0.005)*100.0)/100.0;
This won't work if x is negative. Usually when I am need to such a thing, I need to do it more than once so I just call one of my own functions to do this : eg
double RoundDecPlace( double dNumberIn, int nDecPlace )<br />
{<br />
double dMultiplier = 10 ^ nDecPlace;<br />
double dDiff = 0.5 / dMultiplier;<br />
double dSign = ( dNumberIn >= 0.0 ) ? +1.0 : -1.0;<br />
<br />
return dSign * floor( ( dSign * dNumberIn + dDiff ) * dMultiplier ) / dMultiplier;<br />
}<br />
|
|
|
|
|
Anonymous wrote:
This won't work if x is negative.
Good point. Your solution won't work as written because 10 ^ nDecPlace is actually 10 XOR nDecPlace, not 10-to-the-power-of-nDecPlace. You'd have to use pow(10, nDecPlace) . Other than that, your solution is good
Ryan
Being little and getting pushed around by big guys all my life I guess I compensate by pushing electrons and holes around. What a bully I am, but I do enjoy making subatomic particles hop at my bidding - Roger Wright (2nd April 2003, The Lounge)
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"
|
|
|
|
|
Ryan Binns wrote:
Your solution won't work as written because 10 ^ nDecPlace is actually 10 XOR nDecPlace, not 10-to-the-power-of-nDecPlace. You'd have to use pow(10, nDecPlace).
Yes, you are correct. I had a brain dump when I entered the text. Thanks.
|
|
|
|
|
Why not just write a simple, generic rounding routine that will round to any decimal place (to the right OR left of the decimal point). EX:
double Round(double dVal, short iPlaces)
{
double dRetval;
double dMod = 0.0000001;
if (dVal < 0)
dMod = -0.0000001;
dRetval = dVal;
dRetval += (5/pow(10,iPlaces+1));
dRetval *= pow(10,iPlaces);
dRetval = floor(dRetval+dMod);
dRetval /= pow(10,iPlaces);
return (dRetval);
}
onwards and upwards...
|
|
|
|
|
If the text file have UNIX format (i.e. \n instead of \r\n) then CStdioFile::GetPosition() always returns maximum value for 64 bit int, i.e. 2**64 AFTER a call to CStdioFile::ReadString().
If there was not any previous call to ReadString then all works fine.
In the original docs the no any clear information about this.
What you think about this?
<br />
CStdioFile file("C:\\file.ext", CFile::modeRead);<br />
file.ReadString(szBuf, 255);<br />
ULONGLONG dwPos = file.GetPosition();<br />
TRACE("dwPos=%I64u\n", dwPos);
file.Close();<br />
|
|
|
|
|
CFile::GetPosition() returns a DWORD, not a ULONGLONG. Plus, the MFC source code asserts if it returns (DWORD)-1, so if you're not asserting, then that is probably not being returned.
The error is probably in using a 64-bit variable to hold a 32-bit result. Try changing the ULONGLONG to a DWORD and printing using a %u instead of %I64 and see what happens.
Ryan
Being little and getting pushed around by big guys all my life I guess I compensate by pushing electrons and holes around. What a bully I am, but I do enjoy making subatomic particles hop at my bidding - Roger Wright (2nd April 2003, The Lounge)
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"
|
|
|
|
|
From the MSDN:
MFC Library Reference CFile::GetPositionSee AlsoCFile Overview | Class Members | Hierarchy ChartObtains the current value of the file pointer, which can be used in subsequent calls to Seek.virtual ULONGLONG GetPosition( ) const;Return ValueThe file pointer as a 32-bit doubleword.Example
I tried with DWORD and %u before my first post. And I tried again right now:
<br />
char szBuf[255];<br />
CStdioFile file("unix.file", CFile::modeRead);<br />
file.ReadString(szBuf, 255);<br />
DWORD dwPos = (DWORD)file.GetPosition();<br />
TRACE("dwPos=%u\n", dwPos);
file.SeekToBegin();<br />
file.Close();<br />
As I shown before the problems come only if CStdioFile object is reading a text file with UNIX's new lines (i.e. no \r).
But such file is read actualy correct. In while(file.ReadString(szBuf, 255) loop it reads line by line not all the file context as one line.
If there is the assertion you are talking about but why it asserts only with unix text files?
Seems like a usual Micro$oft's dirty trick.
Just try to compile this little code and you'll see what I'm talkig about.
My box is Win2000 Server with VS 7.0.
|
|
|
|
|
I only have VS6, so GetPosition() only returns a DWORD. I have come across a similar situation when I was using a ULONGLONG. Obviously the situation is different on VS7.
Have a look at the source. It might help explain the situation.
Ryan
Being little and getting pushed around by big guys all my life I guess I compensate by pushing electrons and holes around. What a bully I am, but I do enjoy making subatomic particles hop at my bidding - Roger Wright (2nd April 2003, The Lounge)
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"
|
|
|
|
|
check the handle "file".. NULL?
|
|
|
|
|
wheregone wrote:
check the handle "file".. NULL?
No, if file is null I cannot call ReadString().
As I have told already ReadString works fine and gets line by line in while() loop.
|
|
|
|
|
I have tried.. it does not work too..
SO I think you'd better change the file format to DOS format at first.
|
|
|
|
|
I did it first time I have beed sure about the bug is exactly a bug.
So... I'm sure this is just a dirty Microsoft's trick.
|
|
|
|
|
for data file "00000000h: 31 31 31 31 31 31 3D 0A ..."
my function returns "111111="
for the second time, it returns "", I think I should increase g_fPosition.
But the GetPosition is OK anyway.
/////////////////////////////////////////////////////////////////////////////////////////////
//
/////////////////////////////////////////////////////////////////////////////////////////////
char gchOneLineNews[1024];
FILETIME g_ftWrite = { 0, 0 };
ULONGLONG g_fPosition = 0;
char * GetOneLineNews(char * pFile);
/////////////////////////////////////////////////////////////////////////////////////////////
// Get One Line News from the File, (read next line, check the write time)
/////////////////////////////////////////////////////////////////////////////////////////////
char * GetOneLineNews(char * pFile)
{
#if 1
FILETIME ftWrite;
UINT rt = 0;
CStdioFile file;
CFileException ex;
if (file.Open(pFile, CFile::modeRead, &ex))
{
if (GetFileTime(file, NULL, NULL, &ftWrite))
{
if(0 != CompareFileTime( &ftWrite, &g_ftWrite )) // not same
{
g_fPosition = 0;
g_ftWrite.dwLowDateTime = ftWrite.dwLowDateTime;
g_ftWrite.dwHighDateTime = ftWrite.dwHighDateTime;
}
file.Seek( g_fPosition, CFile::begin );
if ( NULL == file.ReadString( gchOneLineNews, 1023 ))
{
g_fPosition = 0;
file.Seek( g_fPosition, CFile::begin );
file.ReadString( gchOneLineNews, 1023 );
}
g_fPosition = file.GetPosition();
}
else
{
rt = -2;
}
file.Close();
}
else
{
rt = -1;
}
|
|
|
|