首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TrackBar音量控制

TrackBar音量控制
EN

Code Review用户
提问于 2013-08-29 05:28:29
回答 1查看 5.8K关注 0票数 4

这将通过Trackbar更改应用程序的卷(1-100,1%到100%):

代码语言:javascript
复制
public static class NativeMethods
{
    //Winm WindowsSound
    [DllImport("winmm.dll")]
    internal static extern int waveOutGetVolume(IntPtr hwo, out uint dwVolume);
    [DllImport("winmm.dll")]
    internal static extern int waveOutSetVolume(IntPtr hwo, uint dwVolume);
}

private void trackBar1_Scroll(object sender, EventArgs e)
{
    uint CurrVol = ushort.MaxValue / 2;
    NativeMethods.waveOutGetVolume(IntPtr.Zero, out CurrVol);
    ushort CalcVol = (ushort)(CurrVol & 0x0000ffff);
    int NewVolume = ((ushort.MaxValue / 100) * trackBar1.Value);
    uint NewVolumeAllChannels = (((uint)NewVolume & 0x0000ffff) | ((uint)NewVolume << 16));
    NativeMethods.waveOutSetVolume(IntPtr.Zero, NewVolumeAllChannels);
    label1.Text = Convert.ToString("Volume: " + trackBar1.Value + "%");
}

是否可以让String.Format使用多个参数/值?

例如:

代码语言:javascript
复制
 String Status = String.Format("Current Buffer: {0}", waveProvider.BufferedDuration.Milliseconds, TimesBufferClear) + " Clear: " + TimesBufferClear.ToString() + " Ping: " + PingReply + " Buffer: " + SendStream.BufferMilliseconds;

在那里,我想把它用在每件事上,因为它们的工作原理都差不多。但是如果我每次都要写String.Format的话,它会占用更多的空间。

这段代码可以吗,还是可以改进呢?

EN

回答 1

Code Review用户

回答已采纳

发布于 2013-08-29 11:00:17

在6行代码中,没有太多可查看的内容。但是哦,好吧。

  1. 本机方法返回错误代码,因此处理这些代码是很好的做法,而不仅仅是忽略它们。例如,如果方法报告说没有声音驱动程序或声卡或w/e,那么通知用户是有意义的。在窗口的状态栏或其他地方写警告。
  2. 初始化CurrVol是毫无意义的,因为它的值无论如何都会被覆盖,不是吗?而且,如果这是您的真正代码,您不必收到当前的卷,以设置它的开始。
  3. Convert.ToString应该重构为String.Format("Volume: {0}%", trackBar1.Value);。更复杂的例子: var status =String.Format(“当前缓冲区:{0}清除:{1} Ping:{2}缓冲区:{3}",waveProvider.BufferedDuration.Milliseconds,TimesBufferClear,PingReply,SendStream.BufferMilliseconds);
票数 4
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/30413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档