|
Hi,
I've noticed that the dialog-box programs I write using Visual C++ studio exit when the escape key is pressed. Does anyone know how I can stop this.
Thanks - Gary.
|
|
|
|
|
You need to override the OnCancel function, and remove the call to CDialog::OnCancel.
|
|
|
|
|
Thanks alot! That's worked! - Gary.
|
|
|
|
|
|
Hi All,
I have an arbitrarily large block of binary data (a sequence of bytes). I want to write a function:
int FindBit(BYTE* fisrtByte, int numBytes)
that can be passed a pointer to the start of the data (firstByte), and the number of bytes of data (numBytes), and find the first occurrence of a "1" bit. e.g., if I pass a pointer to the following 3 bytes of binary data:
00001101 10110101 10110101
I need the function to return 5 - because the first non-zero bit is in position 5.
Has anyone ever done something similar?
Is there an efficient way to do this ?
Thanks,
Neil Humphreys.
|
|
|
|
|
Hi,
This would work.
int FindBit(BYTE* firstByte, int numBytes){
int pos = 0;
int index = 0;
BYTE current_bit = 1 << 8;
while(index != numBytes){
if((firstByte[index] & current_bit) != 0)
break;
pos++;
current_bit = current_bit >> 1;
if(current_bit == 0){
current_bit = 1 << 8;
index++;
}
}
return pos;
}
NOTE: With your example, 00001101 10110101 10110101, this function would return a 4, because the count starts from zero. So if you want the count to start at 1, you'd have to add a 1 to the return value.
|
|
|
|
|
Sorry, I've corrected some things.
int FindBit(BYTE* firstByte, int numBytes){
int pos = 0;
int index = 0;
BYTE current_bit = 1 << 7;
while(index != numBytes){
if((firstByte[index] & current_bit) != 0)
break;
pos++;
current_bit = current_bit >> 1;
if(current_bit == 0){
current_bit = 1 << 7;
index++;
}
}
return pos;
}
NOTE: With your example, 00001101 10110101 10110101, this function would return a 4, because the count starts from zero. So if you want the count to start at 1, you'd have to add a 1 to the return value.
|
|
|
|
|
Hmmm. Just for fun, here's a slightly different approach:
int FindBit(BYTE *firstByte,int numBytes)
{
int result = -1;
int index = 0;
while ((index < numBytes) &&
(firstByte[index] == 0)) {
index++;
}
if (index < numBytes) {
result = index * 8;
BYTE mask = 0x01;
while ((firstByte[index] & mask) == 0) {
mask <<= 1;
result++;
}
}
return result;
} My version of FindBit returns -1 in case there are no 1 bits. Also note that I'm assuming 'Intel' byte/bit ordering.
Software Zen: delete this;
|
|
|
|
|
Can any one help me to solve this project ??
Obstacle Course
In this program you will implement the Obstacle Course specification using the Object-Oriented C++ language.
Problem Specification:
Design a program to simulate a race through an obstacle course. Racers start at the starting line and move one space at a time. The race ends when the first racer crosses the finish line.
Your program should be able to support a variety of racer classes with different movement strategies.
One type of racer always moves forward. If there's an obstacle in the way, the racer crashes into it and is out of the race.
Another moves forward unless that would mean running into an obstacle. If there is an obstacle in front of it, it always tries moving right, left, or backward, in that order.
Another moves forward unless that would mean running into an obstacle. If there is an obstacle in front of it, it randomly chooses to move right, left, or backward.
Another moves randomly, except that it never runs into an obstacle. For example, if moving right will run into an obstacle, it will randomly choose one of the directions of either forward, backward or left to move.
You should come up with at least one other type of racer strategy of your own, such as diagonal movement of forward-right, forward-left, backward-right or backward left. It will shun obstacle in its intended direction and choose the next diagonal direction as described in that order.
Your program should read in an obstacle course configuration. It should construct a number of racers and place them at the starting line. The user should be able to choose the number of racers and also to choose their types (or movement strategies). You could allow them to choose the type of each racer, or you could allow them to choose a type for each run of the simulation, and all racers in a given run would have the same type. It is optional for your program to graphically display the state of the obstacle course and obstacles and racers in it at the end of each time unit, but you are encouraged to do so. When the first racer crosses the finish line, your program should report which racer finished first, and its winning time.
The race environment should be modelled as a class in the form of a matrix that resembles a chess board. The base Racer class should contain some pure virtual function that executes the movement strategy. Each of these different Racer type is a derived class of the general base Racer class. You should develop an appropriate size of the racing matrix for this simulation program.
|
|
|
|
|
I'll be happy to help. I can have a working program ready in 3 days, complete with impressive graphics. I charge $250 an hour for my services and require 50% up front. The remainder is due upon delivery of the project.
As several CodeProject old-timers will attest, I'm very speedy in solving homeworks assignments, writing Computer Science term papers, and coding projects (esp. those due for final exams and thesis defenses). Feel free to contact me if you're interested!
/ravi
My new year's resolution: 2048 x 1536
Home | Articles | Freeware | Music
ravib@ravib.com
|
|
|
|
|
Only half up front?
Software Zen: delete this;
|
|
|
|
|
|
umm but i just need a simple one ... its ok without graphics...
|
|
|
|
|
Ravi Bhavnani wrote:
I can have a working program ready in 3 days, complete with impressive graphics. I charge $250 an hour for my services and require 50% up front.
Which amounts to what? If you work 24x7 for those three days, the total bill would be $18,000 with $9,000 being due up front. Yes?
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
|
|
|
|
|
Yes. Actually I was contemplating an 8-hour billable work day, resulting in a mere $3K, with $1.5K due up front. But of course I was being facetious, as you probably guessed.
/ravi
My new year's resolution: 2048 x 1536
Home | Articles | Freeware | Music
ravib@ravib.com
|
|
|
|
|
|
here's my code:
void CfirstView::OnInitialUpdate()
{
CfirstView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
AfxMessageBox("APN Initialized failed.");
}
however, the message box did not appear when i execute the compiled file.
can anyone help me on this one? is there some initialization i forgot to add?
|
|
|
|
|
windcar04 wrote:
void CfirstView::OnInitialUpdate()
{
CfirstView::OnInitialUpdate();
Looks like you are going in a constant recursive loop. Call the base class' OnInitialUpdate.
"You're obviously a superstar." - Christian Graus about me - 12 Feb '03
"Obviously ??? You're definitely a superstar!!!" mYkel - 21 Jun '04
Within you lies the power for good - Use it! Honoured as one of The Most Helpful Members of 2004
|
|
|
|
|
Looks like you are going in a constant recursive loop. Call the base class' OnInitialUpdate.
but i am sure it is not this problem. OnInitialUpdate does not seems to be called at all....
|
|
|
|
|
Even if this is not the error you are trying to find, it is a mistake. You must call the base class for the OnInitialUpdate() call in your routine.
Steve
|
|
|
|
|
thanks for the reply
okay, now this sounds stupid but how do i call the base class in this case?
|
|
|
|
|
If your view is a CFormView , call CFormView::OnInitialUpdate() at the beginning og your OnInitialUpdate() method. Same with other types of views.
/ravi
My new year's resolution: 2048 x 1536
Home | Articles | Freeware | Music
ravib@ravib.com
|
|
|
|
|
How do you read the value from a memory address using c++ ?
do you use pointer or something ?
|
|
|
|
|
What u want exactly?
If u looking for actual memory address of your volatile memory then I dont think memory address is shown by your pointer is the actual one.
Also u can manipuate data of the memory address of current process in windows at least.
If you want actual physical memory address
u please look for some windows memory management book.
|
|
|
|
|
You can use the * operator. But you have to tell C++ what sort of data to expect at the address, so it knows what type of variable to create, e.g.:
int memoryAddressValue = *((int *)memoryAddress);
if you know an int is at the address (which occupies 4 bytes, so this call reads the address and the next 3 addresses). Memory addresses are just bytes or data, so their meaning is open to interpretation ! This call casts the address to a pointer to an integer - (int*)memoryAddress - and then reads the value from memory - * operator.
Note: if the process doesn't have access to the address (which usually means the address is not the address of one of its variables on the stack, or is not part of the heap space defined by calling new/malloc etc) then expect an access violation exception.
Thanks,
Neil Humphreys.
|
|
|
|