|
1. Why this returns -1:
LONG xx=MCIWndOpenDialog(m_hMCIWnd), where hMCIWnd is a valid handle to the window created by calling:
m_hMCIWnd=MCIWndCreate(this->GetSafeHwnd(),
AfxGetInstanceHandle(), WS_VISIBLE|WS_CHILD|MCIWNDF_SHOWALL|MCIWNDF_NOTIFYSIZE|MCIWNDF_NOTIFYPOS,NULL);
No open dialog is shown.
2. Problem 2: Why "Open" selected from the popup menu lunched from the menu button doesn't do anything?
Jerzy
|
|
|
|
|
I'm using some code to attempt to open an AVI stream. The code compiles in visual c++, but gives me 3 fatal linking errors. These are the errors:
error LNK2001: unresolved external symbol _AVIStreamLength@4
error LNK2001: unresolved external symbol _AVIStreamReadFormat@16
error LNK2001: unresolved external symbol _AVIStreamOpenFromFileA@24
Debug/Capture.exe : fatal error LNK1120: 3 unresolved externals
The _AVI symbols are the names of the 3 functions I attempt to call - I assume they are in vfw.h, which I include. Ideas?
thanks-
jake
|
|
|
|
|
|
I'm using Windows NT 4.0 and Visual C++...
Anyone knows how to verify if a process is running in other machine whitout use registry key handles ?
|
|
|
|
|
Hi All,
How can I apply a shading to text in a Rich Edit Control?
CRichEditCtrl::SetBackgroundColor() changes the background
color for the entire CRichEditCtrl window, but how do I
just apply a shadding (or background color) to a selected
piece of text? Word is able to do it.
-Michael
|
|
|
|
|
You can set a background color for selected text using RichEdit 2.0 or later. Just pass CHARFORMAT2 structure to CRichEditCtrl::SetSelectionCharFormat and set crBackColor member to whatever you want.
Tomasz Sowinski -- http://www.shooltz.com.pl
|
|
|
|
|
Apparently when running my program under Win2000 I run into an assert under AppCore.cpp on the line
ASSERT(AfxGetThread() == NULL);
Might anyone have any quick insight to what might be happening. This happens right away before the main application window opens. If I ingore the assert the main application window appears as was intended.
I will keep plugging away with MSDN. I might get lucky with finding something. I don't know how new Win2000 is so I don't know if they would have anything out there. First glance I didn't see anything.
Thanks!
Chris
"Why are we hiding from the police, Daddy?"
"We use VI, son. They use Emacs."
|
|
|
|
|
Can anybody point me towards a function that's something along the lines of:
int32 GetRandomNumberBetween(int32 nLower, int32 nUpper)
{
return nTheRandomNumber;
}
I just can't get it right myself, and I can't find one anywhere on the net or in my books.
Yours,
James Millson
|
|
|
|
|
Here is a quick and dirty one I hacked together from the CRT;
<br />
static long random_number = 1L;<br />
<br />
void SeedRandomNumber ( unsigned int seed )<br />
{<br />
random_number = (long)seed;<br />
}<br />
<br />
int GetRandomNumberBetween ( unsigned int lower, unsigned int upper )<br />
{<br />
return ( ( ( ( random_number = random_number * 214013L + 2531011L ) >> 16 ) & ( upper - lower ) ) + lower );<br />
}<br />
This is not thread safe, but should get you started.
-Ben
---------
On the topic of code with no error handling -- It's not poor coding, it's "optimistic"
|
|
|
|
|
The trick with & will not work for majority of lower/upper pairs. For example: lower==0, upper==0x10000.
The other thing is that CRT random generator returns 16-bit values.
Tomasz Sowinski -- http://www.shooltz.com.pl
|
|
|
|
|
Your right, I should have specified that the largest difference between the upper and lower bounds could not exceed a 16-bit value and that the generated number is limited to 16 bits as well.
I supposed it depends on what he was using it for, personally I’ve never needed to use the functions for anything other that bogus test data for my app’s.
Have a good one,
-Ben
---------
On the topic of code with no error handling -- It's not poor coding, it's "optimistic"
|
|
|
|
|
The problem with & isn't limited to low/high ranges greater than 16 bits. lower==0, upper==0x10 will also give you trouble when used with bitwise and operator. The generator will be returning 0 or 16.
Tomasz Sowinski -- http://www.shooltz.com.pl
|
|
|
|
|
I have written this function and it gives me a random number between [nMin..nMax]
int RandBetween(int nMin, int nMax)
{
int r = (rand() * RAND_MAX + nMin) % nMax;
if (r <= nMin)
r = nMin+1;
else
if (r >= nMax)
r= nMax-1;
return r;
}
Mh2!
|
|
|
|
|
Shouldn't the nMin be outside the parenthesis?
|
|
|
|
|
Ok, here's my try
I decided to go the mundane inelegant math route (though I bet there are elegant ways to do this). This code computes a number in the range nLower to nUpper, and adds it to nLower. One major stumble is that you need to be able to store the range, so an int wont cut it.
Also, this code has a problem, in that it returns numbers from nLower to nUpper-1. You can extend the range by 1 in most cases, but you run into snarky special case code. I'll leave it like this - season to taste.
int GetRandomNumberBetween(int nLower, int nUpper){
int nTheRandomNumber = 0;
unsigned int range, offset;
float r;
assert( nUpper >= nLower );
range = (nUpper - nLower);
r = (float)rand() / (float)RAND_MAX;
offset = (int)(r * range);
nTheRandomNumber = nLower + offset;
TRACE(_T("nTheRandomNumber = %d\n"), nTheRandomNumber);
return nTheRandomNumber;
}
|
|
|
|
|
I've gotten caught up in this - I think the code I posted above comes close, but I have the feeling that the distribution of values will be less than optimal for very large ranges.
Here's something that might be of interest - I dug this out of my trusty ol 'Programming the Pet/CBM' by Raeto Collin West (best book I ever bought) - its a Gaussian formula for generating pseudo random numbers, of the form x = a * x + c (mod m) - (should be subscripts on the x's - but you get the idea - x is plugged back into the formula to get the next x).
According to Gauss, the maximum period is obtained when a = 4*n + 1 and c is an odd number. I don't know this stuff well enough to tell you whether there is a particular a and c that should be used.
This little fn seems to give good results:
unsigned int GetRandInt32() {
static unsigned x = 0;
unsigned n = 5;
x = (((4*n+1) * x) + 1231) % INT_MAX;
return x;
}
You can play with the values I have hardcoded (shame on me). There's probably better stuff on the web somewhere.
Anyway, the point here is that if you can roll your own rand that gives you values from 0 to INT_MAX you'll probably get a better distribution over the range -INT_MAX to INT_MAX than you will with the current rand(), whose RAND_MAX is 32767 - there's gotta be a loss of precision somewhere there.
There may be other considerations - some rands are prone to repeating subseries, some have quirks in that numbers generated alternate between even and odd. Also, there is the concept of a seed - how do we get a fundamentally different sequence out of this?
I also wonder if its a hard problem to predict the period given the inputs - I think it might be - though Gauss could probably assure inputs that give the maximum period - I think 257*x + 43981 (mod 65536) recurs after 65536 iterations.
Ok - now somebody's going to tell me about a good 5000 page academic text I should go read... sigh... anyway, just thought you might be interested...
|
|
|
|
|
well, I have made this small macro a long time ago:
#define GetRandom(min, max) ((rand() % (int)(((max) + 1) - (min))) + (min))
You have to call srand() first, if you want to initialize the random generator, something like srand(GetTickCount());
- Anders
Money talks, but all mine ever says is "Goodbye!"
|
|
|
|
|
Anders
Nice one - but still has problems for very large ranges - maybe I'm going overboard here, but you'll see that it has problems with something like
TRACE(_T("GetRandom returns %ld\n"),GetRandom(-INT_MAX, INT_MAX));
Not sure if that's the point of this thread, but can you see a way to handle that inline in your macro?
|
|
|
|
|
Yea, but it works just fine for just about 99% of what people need (I guess)
How often do you want a random number larger than a 32 bit int?
- Anders
Money talks, but all mine ever says is "Goodbye!"
|
|
|
|
|
take a look at http://www.math.keio.ac.jp/matumoto/cokus.c for a set of C functions that generate a 32 bit random number.
To get a number between nLower and nUpper
UINT number = randomMT();
number /= (UINT_MAX / (nUpper - nLower));
number += nLower;
---
Multitasking: Screwing up several things at once.
|
|
|
|
|
From what I understand:
You use Structured Exception Handling when using the Win32 API without MFC.
You use MFC Exceptions (obviously) when using MFC.
When do you mix them? When do you not? Any anecdotal experiences that you wouldn't find in the manual? (MSDN just relaunched their site and it's impossible to get to any of the pages today... how evil) Thanks in advance
--
Peace,
Amit Jain
|
|
|
|
|
I think you left one out - C++ exception handling, though it does get a bit confusing since MS does make use of SEH in implementing their C++ exception handling.
Jeffrey Richters 'Advenced Windows' has a whole chapter on SEH. I would say that if you are using the C language with the windows API SEH is the way to go, and in the rare case that you need to trap and _identify_ floating point and processor traps, but otherwise stick to C++.
If you are dealing with MFC classes that throw MFC exceptions its a no brainer - but you don't have to derive from CException for your own stuff, thats up to you.
|
|
|
|
|
|
Why I need the UDP ?
i want to create something (Like OCX or DLL) to let the server send a message to the client(s) inform them to refresh ,redirect ,there is new email, XXX is logged on.
how i'm thinking to solve this problem?
create client OCX (without using the WinSock.OCX) to wait and manage the server message. and create an DLL on the server that will send the message to the Client OCX. (i think this is a good solution ?! do you think that ????!! )
What i want ?
i do not know how to write a code deal with UDP ?!
if you have another idea ?? i'll be pleased to you if you send it to me
Note : I’m talking about intranet.
Can any one there help me ? or give and any article(s) that could help ?!
web programmer.
|
|
|
|
|
Create a SOCK_DGRAM type socket, and use sendto() and recvfrom() to send and receive UDP datagrams.
|
|
|
|