wince技巧

http://hi.baidu.com/jackyc/item/41741a144570be8d89a956e8

记录一下用到的C#在WinCE平台上的相关技巧备查

1。C#在WinCE上实现透明图片

1
2
3
4
5
6
7
8
9
using  System.Drawing.Imaging;
     
public  static  void  DrawImageTransparent(Graphics gx, Image image, Rectangle destRect)
{
     ImageAttributes imageAttr =  new  ImageAttributes();
     Color transpColor = ((Bitmap)image).GetPixel(image.Width - 1, image.Height - 1);
     imageAttr.SetColorKey(transpColor, transpColor);
     gx.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, imageAttr);
}

2。WinCE上播放声音文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
public  enum  Flags
{
     SND_SYNC = 0x0000,   /* play synchronously (default) */
     SND_ASYNC = 0x0001,   /* play asynchronously */
     SND_NODEFAULT = 0x0002,   /* silence (!default) if sound not found */
     SND_MEMORY = 0x0004,   /* pszSound points to a memory file */
     SND_LOOP = 0x0008,   /* loop the sound until next sndPlaySound */
     SND_NOSTOP = 0x0010,   /* don't stop any currently playing sound */
     SND_NOWAIT = 0x00002000,  /* don't wait if the driver is busy */
     SND_ALIAS = 0x00010000,  /* name is a registry alias */
     SND_ALIAS_ID = 0x00110000,  /* alias is a predefined ID */
     SND_FILENAME = 0x00020000,  /* name is file name */
     SND_RESOURCE = 0x00040004   /* name is resource name or atom */
}
[DllImport( "CoreDll.DLL" , EntryPoint =  "PlaySound" , SetLastError =  true )]
public  extern  static  int  WCE_PlaySound( string  szSound, IntPtr hMod,  int  flags);
     
/// <summary>
/// 同步播放声音文件
/// </summary>
/// <param name="filename"></param>
public  static  void  PlaySYNCSound( string  filename)
{
     if  (! string .IsNullOrEmpty(filename))
     {
         if  (File.Exists(filename))
         {
             WCE_PlaySound(filename, IntPtr.Zero, ( int )(SendClass.Flags.SND_SYNC | SendClass.Flags.SND_FILENAME));
         }
     }
}
     
/// <summary>
/// 异步播放声音文件
/// </summary>
/// <param name="filename"></param>
public  static  void  PlaySound( string  filename)
{
     if  (! string .IsNullOrEmpty(filename))
     {
         if  (File.Exists(filename))
         {
             WCE_PlaySound(filename, IntPtr.Zero, ( int )(SendClass.Flags.SND_ASYNC | SendClass.Flags.SND_FILENAME));
         }
     }
}

3。获取 / 设置WinCE系统音量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/// <summary>
/// 获取系统音量
/// </summary>
/// <returns></returns>
public  static  int  GetVolume()
{
    // By the default set the volume to 0
    uint  CurrVol = 0;
    // At this point, CurrVol gets assigned the volume
    SendClass.Common.waveOutGetVolume(IntPtr.Zero,  ref  CurrVol);
    // Calculate the volume
    ushort  CalcVol = ( ushort )(CurrVol & 0x0000ffff);
    // Get the volume on a scale of 1 to 20 (to fit the trackbar)
    return  CalcVol / ( ushort .MaxValue / 20);
}
/// <summary>
/// 设置系统音量
/// </summary>
/// <param name="value">要设置的音量值</param>
public  static  void  SetVolume( int  value)
{
    int  volume = CalcVolumeValue(value);
    SendClass.Common.waveOutSetVolume(IntPtr.Zero, ( uint )volume);
    RegistryKey hUSER = Registry.CurrentUser.OpenSubKey( @"ControlPanel\Volume" true );
    hUSER.SetValue( "Volume" , volume, RegistryValueKind.DWord);
    hUSER.Flush();
    hUSER.Close();
}
private  static  int  CalcVolumeValue( int  value)
{
    // Calculate the volume that's being set
    int  NewVolume = ( ushort .MaxValue * value / 20);
    // Set the same volume for both the left and the right channels
    return  ((NewVolume & 0x0000ffff) | (NewVolume << 16));
}

 4。设定WinCE屏幕背光变暗的等待时间,以及唤醒屏幕背光

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
public  enum  EventFlags
{
     EVENT_PULSE = 1,
     EVENT_RESET = 2,
     EVENT_SET = 3
}
[DllImport( "coredll.dll" )]
public  static  extern  IntPtr CreateEvent(IntPtr lpEventAttributes,  bool  bManualReset,  bool  bInitialState, String lpName);
[DllImport( "coredll.dll" )]
private  static  extern  void  EventModify(IntPtr h,  int  p);
[DllImport( "coredll.dll" )]
public  static  extern  void  CloseHandle(IntPtr h);
     
     
public  static  void  CreateChangeEvent(String EventName,  bool  bInitialState)
{
     IntPtr hEvent = IntPtr.Zero;
     try
     {
         hEvent = CreateEvent(IntPtr.Zero,  false , bInitialState, EventName);
         if  (hEvent != IntPtr.Zero)
         {
             EventModify(hEvent, ( int )EventFlags.EVENT_SET);
         }
     }
     catch  { }
     finally
     {
         CloseHandle(hEvent);
     }
}
/// <summary>
/// 设定背光超时时间
/// </summary>
/// <param name="Seconds">背光超时时间(秒)</param>
/// <param name="IsAC">设定交流供电还是电池供电</param>
/// <returns></returns>
public  static  bool  SetBackLightTimeOut( int  Seconds,  bool  IsAC)
{
     Boolean returnvalue =  false ;
     try
     {
         using  (RegistryKey key = Registry.CurrentUser.OpenSubKey( "ControlPanel\\Backlight" true ))
         {
             if  (key !=  )
             {
                 if  (IsAC)
                 {
                     key.SetValue( "ACTimeout" , Seconds, RegistryValueKind.DWord);
                     key.SetValue( "UseExt" , 1, RegistryValueKind.DWord);
                 }
                 else
                 {
                     key.SetValue( "BatteryTimeout" , Seconds, RegistryValueKind.DWord);
                     key.SetValue( "UseBattery" , 1, RegistryValueKind.DWord);
                 }
                 // 创建事件通知
                 CreateChangeEvent( "BackLightChangeEvent" true );
             }
             else
                 returnvalue =  false ;
         }
     }
     catch
     {
         returnvalue= false ;
     }          
     return  returnvalue;
}
     
/// <summary>
/// 如果屏幕背光是变暗的状态,则亮起屏幕背光
/// </summary>
public  static  void  SetBackLightOn()
{
     CreateChangeEvent( "BackLightChangeEvent" false );
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值