|
kialmur wrote: ...I am not even sure if that is correct since it gave me linking errors.
Did you link with x.lib?
"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
|
|
|
|
|
I am not quite sure how. I tried adding it to the project and also added it in one of project settings under Linking. Is there some otherway?
|
|
|
|
|
kialmur wrote: Is there some otherway?
There is, but if you are already adding it to the linker options, it's pointless.
Exactly what linker error(s) are you getting?
"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
|
|
|
|
|
The error is:
error LNK2001: unresolved external symbol "long __cdecl sendChipOffset(long,long,long)" (?sendChipOffset@@YAJJJJ@Z)
For the linking portion, I went in the project settings, then to the Link tab. I added the path under Object/library modules. Is that correct?
|
|
|
|
|
kialmur wrote: The error is:
error LNK2001: unresolved external symbol "long __cdecl sendChipOffset(long,long,long)" (?sendChipOffset@@YAJJJJ@Z)
This is a name-mangling issue.
kialmur wrote: Is that correct?
Yes.
"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
|
|
|
|
|
I have a window that needs to display text using a fixed size (mono spaced) TT font (say Courier New) and the text will be limited to 80 columns by 24 rows. I need to calculate the bounding rect that keeps the aspect ratio of the font and centers it in the window.
I can get all this to work fine.
The next problem is choosing the font size. How do I get windows to give me a font size that will correctly fill this rect? Is this not possible? It seems no matter what I do, I get font sizes that do not scale up or down smoothly, and the text is usually either too small or too big.
¡El diablo está en mis pantalones! ¡Mire, mire!
Real Mentats use only 100% pure, unfooled around with Sapho Juice(tm)!
SELECT * FROM User WHERE Clue > 0
0 rows returned
Save an Orange - Use the VCF!
|
|
|
|
|
The MidiPlyr PSDK sample has code which scales the timer text so it fills the window (not very well mind you). It's located in Samples/Multimedia/Audio/MidiPlyr/uiutils.c:EmbossedTextOut() and CreateScaledFont(). 80% chance that the scaled font feature (and all of uiutils.c) was created as an extra credit assignment.
But anyway, the API to use is GetTextExtentPoint32.
-- modified at 11:43 Thursday 9th March, 2006
|
|
|
|
|
Thanks. I know about GetTextExtentPoint32. Unfortunately the problem is getting windows to use a reasonable font size. It appears that windows only has a few font sizes, and there's no provision or way to smoothly scale up or down without jumps in sizes. This means that sometimes the font matches the rect just fine, others it's too small, and other times it's too big. I'll look into the example though!
¡El diablo está en mis pantalones! ¡Mire, mire!
Real Mentats use only 100% pure, unfooled around with Sapho Juice(tm)!
SELECT * FROM User WHERE Clue > 0
0 rows returned
Save an Orange - Use the VCF!
|
|
|
|
|
The MidiPlyr sample also has this problem. It doesn't fully scale to the window, hence the jumps in font size you see.
So if Microsoft, for all their wealth, power and unrestricted access to the Windows source code, can't get it right, what hope do we poor insignificant developers who get the scrap heap public API, have ?
|
|
|
|
|
a little bit confused by ur post:
every row must contain 80 characters or differnt (max is 80)? all rows use same font? "display" means by paint (CDC etc) or text control (CEdit etc)?
A nice tool for optimizing your Microsoft html-help contents.
Includeh10
|
|
|
|
|
Hi everyone.
Can someone point me in the right direction to find an answer to a problem I have been posed by my boss!
We have approx 150 PCs (Win95 & 98), each running software which puts audio (16kHz sample rate, 8 bit ulaw)out of the parallel port into our own DAC board.
We wish to install NetMeeting in all these machines so that a VoIP call can be made to them from a central PC. The problem is that there are no soundcards fitted!
Any incoming audio (from Netmeeting) will need to be routed to the parallel port. Is it possible for NetMeeting to work without a soundcard?
Where would I need to start - is it a case that a specific codec would be need to be written to do this? If so is it a simple task? I am asuming that the source audio will be encoded at the same sample & bit rates as our DAC uses.
It would be perfectly adequate for the incoming audio to be simply put into a file, which I could then read and then write out of the parallel port.
My skills as a programmer are relatively low, is it something that a 'novice' can achieve?
I will have approx 10 weeks of full time work to achieve this - could it be done in this time?
I hope someone out there can point me in the right direction - or to the right forum!
Thanks for any help
Mike
|
|
|
|
|
69 Bay wrote: My skills as a programmer are relatively low, is it something that a 'novice' can achieve?I will have approx 10 weeks of full time work to achieve this - could it be done in this time?
You'll have to write a device driver to make the parallel port look like a sound card. Yes, it's possible, but depending on your skill level will probably take longer than 10 weeks, particularly since device drivers are notoriously difficult to debug.
Unless there's a strong reason not to, it would probably be cheaper for the company to put a cheap sound card ($10-20) in each computer, than to pay your wages for 10 weeks (or possibly longer) when you could be doing other stuff more suited to your abilities (yes, I'm assuming a lot here... I don't mean to offend).
If you do go the route of developing a driver, Toby Opferman has got a great series of articles on device driver development here[^]. Other resources may exist on the net. Ask google for a hand
Good luck!
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"
|
|
|
|
|
Thanks Ryan
I will start looking at how to write device drivers!
The thinking behind doing this was that our customer wants the update, but will probably (if a sound card is required), pay one of his own engineers to go round and install the sound cards. If we could do the update without a sound card, we could then charge a bit more for the job, but he would pay less overall as he wouldnt need to update all the PCs
Thanks for your advice, now to look at how to do device drivers!
Mike
|
|
|
|
|
Hi, does anyone know how to change/mute the windows volume in xp?!
thanks,
Mark
|
|
|
|
|
did u try searching[^] for it
C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, it blows away your whole leg
|
|
|
|
|
|
C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, it blows away your whole leg
|
|
|
|
|
don't mind, he drank too much today...
|
|
|
|
|
yea. I found a couple of samples, but I didnt recognise the code. Im quite new to c++. I think it was MFC, which I dont have any experience with. I have searched everywhere on the net, but just cant find it anywhere.
Do you have any ideas?
Thanks,
Mark
|
|
|
|
|
This is the CMute.h file
class CMute
{
public:
UINT m_nNumMixers;
HMIXER m_hMixer;
MIXERCAPS m_mxcaps;
DWORD m_dwMuteControlID;
BOOL amdUninitialize();
BOOL amdInitialize();
BOOL amdGetMasterMuteControl();
BOOL amdGetMasterMuteValue(LONG &lVal) const;
BOOL amdSetMasterMuteValue(LONG lVal) const;
};
this is the CMute.cpp file
BOOL CMute::amdInitialize()
{
ASSERT(m_hMixer == NULL);
m_nNumMixers = ::mixerGetNumDevs();
m_hMixer = NULL;
::ZeroMemory(&m_mxcaps, sizeof(MIXERCAPS));
m_dwMuteControlID = 0;
if (m_nNumMixers != 0)
{
if (::mixerOpen(&m_hMixer,
0,
reinterpret_cast<DWORD>(this->GetSafeHwnd()),
NULL,
MIXER_OBJECTF_MIXER | CALLBACK_WINDOW)
!= MMSYSERR_NOERROR)
{
return FALSE;
}
if (::mixerGetDevCaps(reinterpret_cast<UINT>(m_hMixer),
&m_mxcaps, sizeof(MIXERCAPS))
!= MMSYSERR_NOERROR)
{
return FALSE;
}
}
return TRUE;
}
BOOL CMute::amdUninitialize()
{
BOOL bSucc = TRUE;
if (m_hMixer != NULL)
{
bSucc = (::mixerClose(m_hMixer) == MMSYSERR_NOERROR);
m_hMixer = NULL;
}
return bSucc;
}
BOOL CMute::amdGetMasterMuteControl()
{
if (m_hMixer == NULL)
{
return FALSE;
}
MIXERLINE mxl;
mxl.cbStruct = sizeof(MIXERLINE);
mxl.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
if (::mixerGetLineInfo(reinterpret_cast<HMIXEROBJ>(m_hMixer),
&mxl,
MIXER_OBJECTF_HMIXER |
MIXER_GETLINEINFOF_COMPONENTTYPE)
!= MMSYSERR_NOERROR)
{
return FALSE;
}
MIXERCONTROL mxc;
MIXERLINECONTROLS mxlc;
mxlc.cbStruct = sizeof(MIXERLINECONTROLS);
mxlc.dwLineID = mxl.dwLineID;
mxlc.dwControlType = MIXERCONTROL_CONTROLTYPE_MUTE;
mxlc.cControls = 1;
mxlc.cbmxctrl = sizeof(MIXERCONTROL);
mxlc.pamxctrl = &mxc;
if (::mixerGetLineControls(reinterpret_cast<HMIXEROBJ>(m_hMixer),
&mxlc,
MIXER_OBJECTF_HMIXER |
MIXER_GETLINECONTROLSF_ONEBYTYPE)
!= MMSYSERR_NOERROR)
{
return FALSE;
}
m_dwMuteControlID = mxc.dwControlID;
return TRUE;
}
BOOL CMute::amdGetMasterMuteValue(LONG &lVal) const
{
if (m_hMixer == NULL)
{
return FALSE;
}
MIXERCONTROLDETAILS_BOOLEAN mxcdMute;
MIXERCONTROLDETAILS mxcd;
mxcd.cbStruct = sizeof(MIXERCONTROLDETAILS);
mxcd.dwControlID = m_dwMuteControlID;
mxcd.cChannels = 1;
mxcd.cMultipleItems = 0;
mxcd.cbDetails = sizeof(MIXERCONTROLDETAILS_BOOLEAN);
mxcd.paDetails = &mxcdMute;
if (::mixerGetControlDetails(reinterpret_cast<HMIXEROBJ>(m_hMixer),
&mxcd,
MIXER_OBJECTF_HMIXER |
MIXER_GETCONTROLDETAILSF_VALUE)
!= MMSYSERR_NOERROR)
{
return FALSE;
}
lVal = mxcdMute.fValue;
return TRUE;
}
BOOL CMute::amdSetMasterMuteValue(LONG lVal) const
{
if (m_hMixer == NULL)
{
return FALSE;
}
MIXERCONTROLDETAILS_BOOLEAN mxcdMute = { lVal };
MIXERCONTROLDETAILS mxcd;
mxcd.cbStruct = sizeof(MIXERCONTROLDETAILS);
mxcd.dwControlID = m_dwMuteControlID;
mxcd.cChannels = 1;
mxcd.cMultipleItems = 0;
mxcd.cbDetails = sizeof(MIXERCONTROLDETAILS_BOOLEAN);
mxcd.paDetails = &mxcdMute;
if (::mixerSetControlDetails(reinterpret_cast<HMIXEROBJ>(m_hMixer),
&mxcd,
MIXER_OBJECTF_HMIXER |
MIXER_SETCONTROLDETAILSF_VALUE)
!= MMSYSERR_NOERROR)
{
return FALSE;
}
return TRUE;
}
i just copied from a tutorial and pasted (with a few changes should work)
add these two files to the project
hope it helps
C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, it blows away your whole leg
|
|
|
|
|
is that MFC?
What are all the '::'?! I think I may be using something else... i take it i wont be able to combine the two in one program?
Thanks for the help!
Mark
|
|
|
|
|
markhaslehurst wrote: What are all the '::'?!
its not MFC its simple C++. :: is scope resolution operator.
C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, it blows away your whole leg
|
|
|
|
|
oh right. ok. because ive only started to learn c++ in the last couple of weeks, and i didnt really know the difference between MFC and normal c++... since I never saw those symbols in what i was doing, i figured they were an MFC thing...
That all makes a lot more sense now, lol! Thanks!
So why would one want to hide a class type?
Thanks,
mark
|
|
|
|
|
markhaslehurst wrote:
Hi, does anyone know how to change/mute the windows volume in xp?!
See here.
"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
|
|
|
|
|
Ah! That looks more understandable... so is MFC basically the same, just with different top-level structure?
Thanks!
Do you know how to mute it (other than setting the volume to 0) - as in, similar to checking the 'mute all' option in windows?
Thanks a lot!
Mark
|
|
|
|