|
Thanks
modified 28-Sep-16 7:30am.
|
|
|
|
|
You probably need to call ShowWindow for your controls after you create them.
Software Zen: delete this;
|
|
|
|
|
Hi all,
i play a sound using:
PlaySound(MAKEINTRESOURCE(IDR_WAVE),AfxGetInstanceHandle(),SND_PURGE | SND_RESOURCE | SND_ASYNC);
i stop this sound using:
PlaySound(NULL,AfxGetInstanceHandle(),SND_PURGE | SND_RESOURCE | SND_ASYNC);
But when i call the above line again (PlaySound with NULL), the sound is being played again
is there a way to avoid this problem?
thanks
Yaron
Interface basics click here :
http://www.codeproject.com/com/COMBasics.asp
don't forget to vote
|
|
|
|
|
Hi all,
all the links that appear in CRichEdit Ctrl are based on the window scheme i am using.
is there a way to tell the rich edit that all my link will apear in a blue color regardless the window scheme i am using?
thanks in advanced
Yaron
Interface basics click here :
http://www.codeproject.com/com/COMBasics.asp
don't forget to vote
|
|
|
|
|
int x = 4;
cout<< x+3;
i want to know what is the type of variable holds the expression x+3 in the cout statement.
******************
******************
** Ahmed Ismail **
******************
******************
|
|
|
|
|
as both operands of the operator + are integers, the resulting variable is also an integer...
|
|
|
|
|
I think that it's atemporary variable which made in the run time
from the type int to hold the output then it will be destroyed.
|
|
|
|
|
it should be int but it is Compiler to decide wrt its Type Expressions
|
|
|
|
|
Hello,
I' tried to develop a small application that's able to play MP3s in a windows service. My intention is to build a small media-player. The core of it shall run as a service and the communication between service and frontend is then some kind of IPC (not so important at the moment).
My question is, why applications like Winamp don't want to work as a background service. It only works, if I allow these applications to interact with my desktop. It even does not work, with fmod, that does not rely on a GUI:
===================================================
if (!FSOUND_Init(44100, 64, 0))
{
debug_stream = fopen("c:\\temp\\wmus.log", "w");
fprintf(debug_stream, "%s\n", FMOD_ErrorString(FSOUND_GetError()));
fclose(debug_stream);
exit(EXIT_FAILURE);
}
===================================================
This snippet always fails with "Error setting cooperative level for hardware." when started as a service (it works, when it's executed by a logged-in user) and I think, that this messages comes from DirectSound, since FMOD (http://www.fmod.org) relies on it.
Best regards and thanks for reading,
Rainer
|
|
|
|
|
I would guess the basic problem you're having is that, since sound is owned by the active desktop, you can't play sound from a service without letting that service interact with the desktop. The whole point of a service is to do work in the background without interacting with the user.
If the effect you are looking for is to have the player running 'in the background' without a main window, you can do that by making the main window a hidden one. You can then set a notification icon to interact with the application when you need to.
Software Zen: delete this;
|
|
|
|
|
This is the same with any data type, when 1 large number is added to another and the result is larger than the data type can hold, it wraps around. i.e.
ULONG size1 = 0xFFFFFF00;<br />
ULONG size2 = 0xFFFFFF00;<br />
size1 += size2;
The output is less than the input. I want to check for this problem and if it's there I would prefer the output to be the max value the data type can hold. What is the best way to approach this?
|
|
|
|
|
waldermort wrote: ULONG size1 = 0xFFFFFF00;
ULONG size2 = 0xFFFFFF00;
if you divede both size1 and size by a big number that make you sure that you can add and you still in the range of long.
size1 = size1/n;
size2 = size2/n;
waldermort wrote: size1 += size2; // == 0xFFFFFE00
adding in this line will not make a problem
then finally, when you want to output the final value , make the value the program do it time the number you devide by it:
ex: textbox1.text = Tostring(size2 * n) // n is the number you devided by it.
I hope it work properly with you.
regards;
** Ahmed Ismail **
|
|
|
|
|
That doesn't work, it produces exactly the same result as simply adding them:
ULONG max1 = 0xFFFFFF00;<br />
ULONG max2 = 0xFFFFFF00;<br />
max1 = max1/4;<br />
max2 = max2/4;<br />
max2 += max1;<br />
max2 *= 4;
The only way I have found is to cast them to a larger data type and check the value using an if else block
if ( ((UINT64)max1 + (UINT64)max2) > 0xFFFFFFFF )<br />
max2 = 0xFFFFFFFF;<br />
else<br />
max2 += max1;
But I'm sure there must be a more accurate way of doing it.
|
|
|
|
|
Ahmed Ismail Mohamed wrote: i think that you should make max2 *4 only when you output the resualt.
What you are saying makes no sense. Why divide and add when it is taking the result I want further away.
|
|
|
|
|
Hello
Well, if you have some assembly background you'd remember that there is a bit in the status register called overflow bit to check for this error. Anyway, I know how to check for overflow in Assembly and C#, but sorry, my C++ is too rusty to remember how to do it in C++ .
You are right, there is a better way to detect overflow, yet I will provide you with a simpler way of detecting it. Usualy the overflow result is smaller than any of the two operands. So, try this:
ULONG size1 = 0xFFFFFF00;
ULONG size2 = 0xFFFFFF00;
size1 += size2;
if( size1 < size2)
size1 = 0xFFFFFFFF;
Remember, maximum value of each type is totally OS dependant. Keep that in mind.
If someone got a better approach, please post. I'll try to remember how to check overflow in C++. If I got anything, I'll keep you posted.
Regards
|
|
|
|
|
That probably is a better way of doing it. Thinking about it, the output would always be smaller. If you remember the better way, please post it. I would love to know.
|
|
|
|
|
use the header <LIMITS.h>
with this, you can know the types max and min values, and some other informations for floating points types.
|
|
|
|
|
You could do something like this :
_int64 sum = (_int64)size1 + (_int64)size2;
if( sum > ULONG_MAX )
TRACE( "an overflow occurred\n" );
else
size1 = (ULONG)sum;
|
|
|
|
|
Try this:
ULONG size1 = 0xFFFFFF00;
ULONG size2 = 0xFFFFFF00;
ULONG sizeR = size1 + size2;
if (sizeR < max(size1, size2))
{
}
Steve
|
|
|
|
|
try this:
<br />
if (MAXVAL - size1 < size2)<br />
{<br />
}<br />
else<br />
{<br />
size1 += size2;<br />
}<br />
MAXVAL can be obtained from limits.h as toxcct said.
----------------------
Mayank Thakore
Learning C++ - since 1998
They didn't print my card right; so I resigned.
|
|
|
|
|
Hi,
how can i convert CString to wchar_t*? for example
CString m_strFilename;
how can i convert m_strFilename to wchar_t*?
i use L"" for string such that L"c:\filename.cpp", but is
there any function or macro do this?
Best Regards.
MJM
|
|
|
|
|
MultiByteToWideChar() is the function you want, but why not just use CStringW ?
|
|
|
|
|
thanks , I use CStringW !
|
|
|
|
|
See
<br />
USES_CONVERSION;<br />
CString str;<br />
str="Test";<br />
<br />
wchar_t* m_wchar = T2W(str.GetBuffer());<br />
str.ReleaseBuffer();<br />
<br />
|
|
|
|
|
Which is almost exactly the same as what I told him. It's ok to use the conversion macros if you are doing a lot of converting, but for a single time it's pointless to add the extra header required.
|
|
|
|