位运算

by admin on 2020年1月28日

//button事件。

/******************************************************************************
Module:  BitArray.cs
Notices: Copyright (c) 2002 Jeffrey Richter
******************************************************************************/

                  涉及类:

void BtnCtrlClick(object sender, EventArgs e)
  {
   BitArray ba=new BitArray(32);
   int ctrl;
   try
   {
    ctrl=int.Parse(txtCtrl.Text);
   }
   catch(System.FormatException)
   {
    MessageBox.Show(“你所输入的不是数字”);
    return;
   }
   catch(System.OverflowException)
   {
    MessageBox.Show(“数字超出范围”);
    return;
   }
   for(int i=0;i<32;i++)
   {
    ba[i]=(ctrl & 1<<i)!=0 ? true : false;
   }
   for(int i=0;i<32;i++)
   {
    lbl[31-i].BackColor=ba[i] ? Color.Red :Color.Green;
   }
  }

澳门新葡亰信誉平台游戏 ,using System;

1、   启动画面类:

 

///////////////////////////////////////////////////////////////////////////////

    public class SplashForm : System.Windows.Forms.Form

//在MainForm.cs文件的MainForm类里添加32个控件的代码。

public sealed class BitArray {
   // Private array of bytes that hold the bits
   private Byte[] byteArray;
   private Int32 numBits;

    {

  void MainFormLoad(object sender, EventArgs e)
  {
   for(int i=0;i<32;i++)
   {
    lbl[i] = new System.Windows.Forms.Label();
    lbl[i].Location = new System.Drawing.Point(12*i+20, 40);
    lbl[i].Size = new System.Drawing.Size(10, 10);
    lbl[i].BackColor=Color.Green;
    this.Controls.Add(lbl[i]);
   }
  }

   // Constructor that allocates the byte array and sets all bits to 0
   public BitArray(Int32 numBits) {
      // Validate arguments first.
      if (numBits <= 0)
         throw new ArgumentOutOfRangeException(“numBits must be >
0”);

        private System.Windows.Forms.PictureBox pictureBox1;

 

      // Save the number of bits.
      this.numBits = numBits;

        private System.Windows.Forms.Label label1;

 

      // Allocate the bytes for the bit array.
      byteArray = new Byte[(numBits + 7) / 8];
   }

        private System.Windows.Forms.Label lbl_version;

//位运算索引

   // This is the indexer.
   public Boolean this[Int32 bitPos] {
      // This is the index property抯 get accessor method.
      get {
         // Validate arguments first
         if ((bitPos < 0) || (bitPos >= numBits))
            throw new IndexOutOfRangeException();

        /// <summary>

public class BitArray
 {
  int[] bits;
  int length;
  public BitArray(int length)
  {
   if(length<0)
   {
    throw new ArgumentException();
   }
   bits=new int[((length-1)>>5)+1]; //(length-1)/32+1
   this.length=length;
  }
  public bool this[int index]
  {
   get
   {
    if(length<0 || index>=length)
    {
     throw new IndexOutOfRangeException();
    }
    return (bits[index>>5] & 1<<index)!=0;
//1<<(index%32)
   }
   set
   {
    if(length<0 || index>=length)
    {
     throw new IndexOutOfRangeException();
    }
    if(value)
    {
     bits[index>>5] |=1<<index;
    }
    else
    {
     bits[index>>5] &=~(1<<index);
    }
   }
  }
 }

         // Return the state of the indexed bit.
         return((byteArray[bitPos / 8] & (1 << (bitPos % 8))) !=
0);
      }

        /// 必需的设计器变量。

      // This is the index property抯 set accessor method.
      set {
         if ((bitPos < 0) || (bitPos >= numBits))
            throw new IndexOutOfRangeException();
         if (value) {
            // Turn the indexed bit on.
            byteArray[bitPos / 8] = (Byte)
               (byteArray[bitPos / 8] | (1 << (bitPos % 8)));
         } else {
            // Turn the indexed bit off.
            byteArray[bitPos / 8] = (Byte)
               (byteArray[bitPos / 8] & ~(1 << (bitPos % 8)));
         }
      }
   }
}

        /// </summary>

///////////////////////////////////////////////////////////////////////////////

         private System.ComponentModel.Container components = null;

class App {
   static void Main() {
      // Allocate a BitArray that can hold 14 bits.
      BitArray ba = new BitArray(14);

        public SplashForm()

      // Turn all the even-numbered bits on by calling the set
accessor.
      for (Int32 x = 0; x < 14; x++) {
         ba[x] = (x % 2 == 0);
      }

        {

      // Show the state of all the bits by calling the get accessor.
      for (Int32 x = 0; x < 14; x++) {
         Console.WriteLine(“Bit ” + x + ” is ” + (ba[x] ? “On” :
“Off”));
      }
   }
}

             //

//////////////////////////////// End of File
//////////////////////////////////

             // Windows 窗体设计器支持所必需的

             //

             InitializeComponent();

             lbl_version.Text = “版本:” +
Application.ProductVersion;

             //

             // TODO: 在 InitializeComponent
调用后添加任何构造函数代码

             //

    }

    //以下省略

2、  应用程序加载类:

using System;

using System.Drawing;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

using System.Data;

using System.Runtime.InteropServices;

using System.Diagnostics;

using System.Reflection;

using System.IO;

namespace Heroic.TempAnalyse.TempGui

{

    /// <summary>

    /// AppLoader 的摘要说明。

    /// </summary>

    public class AppLoader

    {

        private static ApplicationContext context;

        private static SplashForm sForm = new SplashForm();

        private static MainWindow mForm = null;

        //0不可见但仍然运行,1居中,2最小化,3最大化

        private const int WS_SHOWNORMAL = 3;

        [STAThread]  

        static void Main(string[] args)  

        {      

             //  [8/12/2004]用于更新该程序。

             doUpData();

             //  [7/19/2004] 改变顺序,目的使得开始加载速度加快

             //得到正在运行的例程

             Process instance = RunningInstance();

             if(instance == null)

             {

                  sForm.Show();

                  mForm = new MainWindow();

                  context = new ApplicationContext();      

                  Application.Idle += new EventHandler(OnAppIdle);

                  Application.Run(context);

             }

             else

             {

                  //处理发现的例程

                  HandleRunningInstance(instance);

                  //MessageBox.Show(“当前程序已经运行了!”);

             }

        }

        //在线更新用,不再本文范围

        private static void doUpData()

        {    

           
 System.Diagnostics.Process.Start(Application.StartupPath+@”update.exe”,Application.StartupPath+@”Heroic.TempAnalyse.TempGui.exe
0″);//      

        }

        private static void OnAppIdle(object sender, EventArgs e)  

        {

             if(context.MainForm == null)      

             {

                  Application.Idle -= new EventHandler(OnAppIdle);      
         

                  mForm.PreLoad();

                  context.MainForm = mForm;

                  context.MainForm.Show();        

                  sForm.Close();        

                  sForm = null;      

             }  

        }

        //不允许有两个程序同时启动

        public static Process RunningInstance()

        {

             Process current = Process.GetCurrentProcess();

             Process[] processes = Process.GetProcessesByName
(current.ProcessName);

             //遍历正在有相同名字运行的例程

             foreach (Process process in processes)

             {

                  //忽略现有的例程

                  if (process.Id != current.Id)

                  {

                      //确保例程从EXE文件运行

                      if
(Assembly.GetExecutingAssembly().Location.Replace(“/”, “\”) ==

                           current.MainModule.FileName)

                      {

                           //返回另一个例程实例

                           return process;

                      }

                  }

             }

             //没有其它的例程,返回Null

             return null;

        }

        public static void HandleRunningInstance(Process instance)

        {

             //确保窗口没有被最小化或最大化

             ShowWindowAsync (instance.MainWindowHandle ,
WS_SHOWNORMAL);

             //设置真实例程为foreground window

             SetForegroundWindow (instance.MainWindowHandle);

        }

        [DllImport(“User32.dll”)]

        private static extern bool ShowWindowAsync(

             IntPtr hWnd, int cmdShow);

        [DllImport(“User32.dll”)] private static extern bool

             SetForegroundWindow(IntPtr hWnd);

    }

}

3、  加载完毕正式运行后的类:

        public void PreLoad()

        {

             //   如果已经加载毕,则返回

             if (_Loaded)

                  return;

             //   把机器生成的代码放到这里

             initCustomControl();

             

             

             _Loaded = true;

        }

        //   是否加载完毕

        private bool _Loaded = false;

        protected override void OnLoad(EventArgs e)

        {

             //   确保 PreLoad()函数已经调用

             if (!_Loaded)

                  throw new InvalidOperationException(“Must call PreLoad
before calling this function.”);

             

        }

                   

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图