C#开发: 通信篇-串口调试助手

说明

 这节教给用户使用C#做一个串口调试助手,

 用户可在此基础上依据自己的需求做修改

 本人的其它关于串口通信的上位机也会在此基础上做修改,

 请用户认真学习本节.

新建工程

布局串口配置页面

1.拖拽上来一个 GroupBox

2.重新命名

 3.拖拽上去6个Label,位置和显示如下

4. 拖拽上去5个ComboBox,1个Button,位置如下

设置Button的显示改为打开串口

———————————————————————————————–以上需要嵌入视频演示

5. 添加ComboBox显示的内容

5.1:以波特率的ComboBox详细叙述

1382400  921600  460800  256000  230400  128000  115200  76800  57600  43000  38400  19200  14400  9600  4800  1200

运行一下

5.2:设置停止位的ComboBox里面的数据

1 1.5 2

5.3:设置数据位的ComboBox里面的数据

8 7 6 5

5.4:设置校验位的ComboBox里面的数据

无 奇校验 偶校验

———————————-以上需要录制演示视频

拖拽串口控件

获取电脑上可用串口,并显示在端口号的ComboBox里面

1.双击窗体,进入窗体加载回调函数

2.在页面加载函数中填写以下程序

            string[] ports = System.IO.Ports.SerialPort.GetPortNames();//获取电脑上可用串口号              comboBox1.Items.AddRange(ports);//给comboBox1添加数据              comboBox1.SelectedIndex = comboBox1.Items.Count > 0 ? 0 : -1;//如果里面有数据,显示第0个

警告:请选择对应的comboBox

comboBox1 

3.启动

comboBox里面显示当前电脑上可用串口号

4. 设置下默认显示的配置

            comboBox2.Text = "115200";/*默认波特率:115200*/              comboBox3.Text = "1";/*默认停止位:1*/              comboBox4.Text = "8";/*默认数据位:8*/              comboBox5.Text = "无";/*默认奇偶校验位:无*/

5.启动

打开关闭串口

1.双击按钮进入按钮点击事件

2.按钮点击事件函数内部程序如下

            if (button1.Text == "打开串口"){//如果按钮显示的是打开串口                  try{//防止意外错误                      serialPort1.PortName = comboBox1.Text;//获取comboBox1要打开的串口号                      serialPort1.BaudRate = int.Parse(comboBox2.Text);//获取comboBox2选择的波特率                      serialPort1.DataBits = int.Parse(comboBox4.Text);//设置数据位                      /*设置停止位*/                      if (comboBox3.Text == "1") { serialPort1.StopBits = StopBits.One; }                      else if (comboBox3.Text == "1.5") { serialPort1.StopBits = StopBits.OnePointFive; }                      else if (comboBox3.Text == "2") { serialPort1.StopBits = StopBits.Two; }                      /*设置奇偶校验*/                      if (comboBox5.Text == "无") { serialPort1.Parity = Parity.None; }                      else if (comboBox5.Text == "奇校验") { serialPort1.Parity = Parity.Odd; }                      else if (comboBox5.Text == "偶校验") { serialPort1.Parity = Parity.Even; }                        serialPort1.Open();//打开串口                      button1.Text = "关闭串口";//按钮显示关闭串口                  }                  catch (Exception err)                  {                      MessageBox.Show("打开失败"+ err.ToString(), "提示!");//对话框显示打开失败                  }              }              else{//要关闭串口                  try{//防止意外错误                      serialPort1.Close();//关闭串口                  }                  catch (Exception){}                  button1.Text = "打开串口";//按钮显示打开              }

提示:serialPort1

3.启动测试

检测串口热插拔

1.在串口模块拔插的时候,重新更新下串口comboBox的内容

然后:

如果热插拔的是用户刚打开的串口,则按钮显示 "打开串口",comboBox显示初始化的串口号

如果热插拔的不是用户刚打开的串口,则comboBox还是显示咱刚才的串口号

2.用一个变量记录用户打开的串口号

String serialPortName;
serialPortName = comboBox1.Text;

2.添加系统函数 protected override void WndProc(ref Message m)

        protected override void WndProc(ref Message m)          {              if (m.Msg == 0x0219){//设备改变                  if (m.WParam.ToInt32() == 0x8004){//usb串口拔出                      string[] ports = System.IO.Ports.SerialPort.GetPortNames();//重新获取串口                      comboBox1.Items.Clear();//清除comboBox里面的数据                      comboBox1.Items.AddRange(ports);//给comboBox1添加数据                      if (button1.Text == "关闭串口"){//用户打开过串口                          if (!serialPort1.IsOpen){//用户打开的串口被关闭:说明热插拔是用户打开的串口                              button1.Text = "打开串口";                              serialPort1.Dispose();//释放掉原先的串口资源                              comboBox1.SelectedIndex = comboBox1.Items.Count > 0 ? 0 : -1;//显示获取的第一个串口号                          }                          else{                              comboBox1.Text = serialPortName;//显示用户打开的那个串口号                          }                      }                      else{//用户没有打开过串口                          comboBox1.SelectedIndex = comboBox1.Items.Count > 0 ? 0 : -1;//显示获取的第一个串口号                      }                  }                  else if (m.WParam.ToInt32() == 0x8000){//usb串口连接上                      string[] ports = System.IO.Ports.SerialPort.GetPortNames();//重新获取串口                      comboBox1.Items.Clear();                      comboBox1.Items.AddRange(ports);                      if (button1.Text == "关闭串口"){//用户打开过一个串口                          comboBox1.Text = serialPortName;//显示用户打开的那个串口号                      }                      else{                          comboBox1.SelectedIndex = comboBox1.Items.Count > 0 ? 0 : -1;//显示获取的第一个串口号                      }                  }              }              base.WndProc(ref m);          }

提示:C#常用事件对应值

/// <summary>      /// Window API enumerations      /// </summary>      #region Peek Message Flags      public enum PeekMessageFlags      {          PM_NOREMOVE = 0,          PM_REMOVE = 1,          PM_NOYIELD = 2      }      #endregion      #region Windows Messages      public enum WinMsg      {          WM_NULL = 0x0000,          WM_CREATE = 0x0001,          WM_DESTROY = 0x0002,          WM_MOVE = 0x0003,          WM_SIZE = 0x0005,          WM_ACTIVATE = 0x0006,          WM_SETFOCUS = 0x0007,          WM_KILLFOCUS = 0x0008,          WM_ENABLE = 0x000A,          WM_SETREDRAW = 0x000B,          WM_SETTEXT = 0x000C,          WM_GETTEXT = 0x000D,          WM_GETTEXTLENGTH = 0x000E,          WM_PAINT = 0x000F,          WM_CLOSE = 0x0010,          WM_QUERYENDSESSION = 0x0011,          WM_QUIT = 0x0012,          WM_QUERYOPEN = 0x0013,          WM_ERASEBKGND = 0x0014,          WM_SYSCOLORCHANGE = 0x0015,          WM_ENDSESSION = 0x0016,          WM_SHOWWINDOW = 0x0018,          WM_CTLCOLOR = 0x0019,          WM_WININICHANGE = 0x001A,          WM_SETTINGCHANGE = 0x001A,          WM_DEVMODECHANGE = 0x001B,          WM_ACTIVATEAPP = 0x001C,          WM_FONTCHANGE = 0x001D,          WM_TIMECHANGE = 0x001E,          WM_CANCELMODE = 0x001F,          WM_SETCURSOR = 0x0020,          WM_MOUSEACTIVATE = 0x0021,          WM_CHILDACTIVATE = 0x0022,          WM_QUEUESYNC = 0x0023,          WM_GETMINMAXINFO = 0x0024,          WM_PAINTICON = 0x0026,          WM_ICONERASEBKGND = 0x0027,          WM_NEXTDLGCTL = 0x0028,          WM_SPOOLERSTATUS = 0x002A,          WM_DRAWITEM = 0x002B,          WM_MEASUREITEM = 0x002C,          WM_DELETEITEM = 0x002D,          WM_VKEYTOITEM = 0x002E,          WM_CHARTOITEM = 0x002F,          WM_SETFONT = 0x0030,          WM_GETFONT = 0x0031,          WM_SETHOTKEY = 0x0032,          WM_GETHOTKEY = 0x0033,          WM_QUERYDRAGICON = 0x0037,          WM_COMPAREITEM = 0x0039,          WM_GETOBJECT = 0x003D,          WM_COMPACTING = 0x0041,          WM_COMMNOTIFY = 0x0044,          WM_WINDOWPOSCHANGING = 0x0046,          WM_WINDOWPOSCHANGED = 0x0047,          WM_POWER = 0x0048,          WM_COPYDATA = 0x004A,          WM_CANCELJOURNAL = 0x004B,          WM_NOTIFY = 0x004E,          WM_INPUTLANGCHANGEREQUEST = 0x0050,          WM_INPUTLANGCHANGE = 0x0051,          WM_TCARD = 0x0052,          WM_HELP = 0x0053,          WM_USERCHANGED = 0x0054,          WM_NOTIFYFORMAT = 0x0055,          WM_CONTEXTMENU = 0x007B,          WM_STYLECHANGING = 0x007C,          WM_STYLECHANGED = 0x007D,          WM_DISPLAYCHANGE = 0x007E,          WM_GETICON = 0x007F,          WM_SETICON = 0x0080,          WM_NCCREATE = 0x0081,          WM_NCDESTROY = 0x0082,          WM_NCCALCSIZE = 0x0083,          WM_NCHITTEST = 0x0084,          WM_NCPAINT = 0x0085,          WM_NCACTIVATE = 0x0086,          WM_GETDLGCODE = 0x0087,          WM_SYNCPAINT = 0x0088,          WM_NCMOUSEMOVE = 0x00A0,          WM_NCLBUTTONDOWN = 0x00A1,          WM_NCLBUTTONUP = 0x00A2,          WM_NCLBUTTONDBLCLK = 0x00A3,          WM_NCRBUTTONDOWN = 0x00A4,          WM_NCRBUTTONUP = 0x00A5,          WM_NCRBUTTONDBLCLK = 0x00A6,          WM_NCMBUTTONDOWN = 0x00A7,          WM_NCMBUTTONUP = 0x00A8,          WM_NCMBUTTONDBLCLK = 0x00A9,          WM_KEYDOWN = 0x0100,          WM_KEYUP = 0x0101,          WM_CHAR = 0x0102,          WM_DEADCHAR = 0x0103,          WM_SYSKEYDOWN = 0x0104,          WM_SYSKEYUP = 0x0105,          WM_SYSCHAR = 0x0106,          WM_SYSDEADCHAR = 0x0107,          WM_KEYLAST = 0x0108,          WM_IME_STARTCOMPOSITION = 0x010D,          WM_IME_ENDCOMPOSITION = 0x010E,          WM_IME_COMPOSITION = 0x010F,          WM_IME_KEYLAST = 0x010F,          WM_INITDIALOG = 0x0110,          WM_COMMAND = 0x0111,          WM_SYSCOMMAND = 0x0112,          WM_TIMER = 0x0113,          WM_HSCROLL = 0x0114,          WM_VSCROLL = 0x0115,          WM_INITMENU = 0x0116,          WM_INITMENUPOPUP = 0x0117,          WM_MENUSELECT = 0x011F,          WM_MENUCHAR = 0x0120,          WM_ENTERIDLE = 0x0121,          WM_MENURBUTTONUP = 0x0122,          WM_MENUDRAG = 0x0123,          WM_MENUGETOBJECT = 0x0124,          WM_UNINITMENUPOPUP = 0x0125,          WM_MENUCOMMAND = 0x0126,          WM_CTLCOLORWinMsgBOX = 0x0132,          WM_CTLCOLOREDIT = 0x0133,          WM_CTLCOLORLISTBOX = 0x0134,          WM_CTLCOLORBTN = 0x0135,          WM_CTLCOLORDLG = 0x0136,          WM_CTLCOLORSCROLLBAR = 0x0137,          WM_CTLCOLORSTATIC = 0x0138,          WM_MOUSEMOVE = 0x0200,          WM_LBUTTONDOWN = 0x0201,          WM_LBUTTONUP = 0x0202,          WM_LBUTTONDBLCLK = 0x0203,          WM_RBUTTONDOWN = 0x0204,          WM_RBUTTONUP = 0x0205,          WM_RBUTTONDBLCLK = 0x0206,          WM_MBUTTONDOWN = 0x0207,          WM_MBUTTONUP = 0x0208,          WM_MBUTTONDBLCLK = 0x0209,          WM_MOUSEWHEEL = 0x020A,          WM_PARENTNOTIFY = 0x0210,          WM_ENTERMENULOOP = 0x0211,          WM_EXITMENULOOP = 0x0212,          WM_NEXTMENU = 0x0213,          WM_SIZING = 0x0214,          WM_CAPTURECHANGED = 0x0215,          WM_MOVING = 0x0216,          WM_DEVICECHANGE = 0x0219,          WM_MDICREATE = 0x0220,          WM_MDIDESTROY = 0x0221,          WM_MDIACTIVATE = 0x0222,          WM_MDIRESTORE = 0x0223,          WM_MDINEXT = 0x0224,          WM_MDIMAXIMIZE = 0x0225,          WM_MDITILE = 0x0226,          WM_MDICASCADE = 0x0227,          WM_MDIICONARRANGE = 0x0228,          WM_MDIGETACTIVE = 0x0229,          WM_MDISETMENU = 0x0230,          WM_ENTERSIZEMOVE = 0x0231,          WM_EXITSIZEMOVE = 0x0232,          WM_DROPFILES = 0x0233,          WM_MDIREFRESHMENU = 0x0234,          WM_IME_SETCONTEXT = 0x0281,          WM_IME_NOTIFY = 0x0282,          WM_IME_CONTROL = 0x0283,          WM_IME_COMPOSITIONFULL = 0x0284,          WM_IME_SELECT = 0x0285,          WM_IME_CHAR = 0x0286,          WM_IME_REQUEST = 0x0288,          WM_IME_KEYDOWN = 0x0290,          WM_IME_KEYUP = 0x0291,          WM_MOUSEHOVER = 0x02A1,          WM_MOUSELEAVE = 0x02A3,          WM_CUT = 0x0300,          WM_COPY = 0x0301,          WM_PASTE = 0x0302,          WM_CLEAR = 0x0303,          WM_UNDO = 0x0304,          WM_RENDERFORMAT = 0x0305,          WM_RENDERALLFORMATS = 0x0306,          WM_DESTROYCLIPBOARD = 0x0307,          WM_DRAWCLIPBOARD = 0x0308,          WM_PAINTCLIPBOARD = 0x0309,          WM_VSCROLLCLIPBOARD = 0x030A,          WM_SIZECLIPBOARD = 0x030B,          WM_ASKCBFORMATNAME = 0x030C,          WM_CHANGECBCHAIN = 0x030D,          WM_HSCROLLCLIPBOARD = 0x030E,          WM_QUERYNEWPALETTE = 0x030F,          WM_PALETTEISCHANGING = 0x0310,          WM_PALETTECHANGED = 0x0311,          WM_HOTKEY = 0x0312,          WM_PRINT = 0x0317,          WM_PRINTCLIENT = 0x0318,          WM_HANDHELDFIRST = 0x0358,          WM_HANDHELDLAST = 0x035F,          WM_AFXFIRST = 0x0360,          WM_AFXLAST = 0x037F,          WM_PENWINFIRST = 0x0380,          WM_PENWINLAST = 0x038F,          WM_APP = 0x8000,          WM_USER = 0x0400,          WM_REFLECT = WM_USER + 0x1c00      }      #endregion      #region Window Styles      public enum WindowStyles : uint      {          WS_OVERLAPPED = 0x00000000,          WS_POPUP = 0x80000000,          WS_CHILD = 0x40000000,          WS_MINIMIZE = 0x20000000,          WS_VISIBLE = 0x10000000,          WS_DISABLED = 0x08000000,          WS_CLIPSIBLINGS = 0x04000000,          WS_CLIPCHILDREN = 0x02000000,          WS_MAXIMIZE = 0x01000000,          WS_CAPTION = 0x00C00000,          WS_BORDER = 0x00800000,          WS_DLGFRAME = 0x00400000,          WS_VSCROLL = 0x00200000,          WS_HSCROLL = 0x00100000,          WS_SYSMENU = 0x00080000,          WS_THICKFRAME = 0x00040000,          WS_GROUP = 0x00020000,          WS_TABSTOP = 0x00010000,          WS_MINIMIZEBOX = 0x00020000,          WS_MAXIMIZEBOX = 0x00010000,          WS_TILED = 0x00000000,          WS_ICONIC = 0x20000000,          WS_SIZEBOX = 0x00040000,          WS_POPUPWINDOW = 0x80880000,          WS_OVERLAPPEDWINDOW = 0x00CF0000,          WS_TILEDWINDOW = 0x00CF0000,          WS_CHILDWINDOW = 0x40000000      }      #endregion      #region Window Extended Styles      public enum WindowExStyles      {          WS_EX_DLGMODALFRAME = 0x00000001,          WS_EX_NOPARENTNOTIFY = 0x00000004,          WS_EX_TOPMOST = 0x00000008,          WS_EX_ACCEPTFILES = 0x00000010,          WS_EX_TRANSPARENT = 0x00000020,          WS_EX_MDICHILD = 0x00000040,          WS_EX_TOOLWINDOW = 0x00000080,          WS_EX_WINDOWEDGE = 0x00000100,          WS_EX_CLIENTEDGE = 0x00000200,          WS_EX_CONTEXTHELP = 0x00000400,          WS_EX_RIGHT = 0x00001000,          WS_EX_LEFT = 0x00000000,          WS_EX_RTLREADING = 0x00002000,          WS_EX_LTRREADING = 0x00000000,          WS_EX_LEFTSCROLLBAR = 0x00004000,          WS_EX_RIGHTSCROLLBAR = 0x00000000,          WS_EX_CONTROLPARENT = 0x00010000,          WS_EX_STATICEDGE = 0x00020000,          WS_EX_APPWINDOW = 0x00040000,          WS_EX_OVERLAPPEDWINDOW = 0x00000300,          WS_EX_PALETTEWINDOW = 0x00000188,          WS_EX_LAYERED = 0x00080000      }      #endregion      #region ShowWindow Styles      public enum ShowWindowStyles : short      {          SW_HIDE = 0,          SW_SHOWNORMAL = 1,          SW_NORMAL = 1,          SW_SHOWMINIMIZED = 2,          SW_SHOWMAXIMIZED = 3,          SW_MAXIMIZE = 3,          SW_SHOWNOACTIVATE = 4,          SW_SHOW = 5,          SW_MINIMIZE = 6,          SW_SHOWMINNOACTIVE = 7,          SW_SHOWNA = 8,          SW_RESTORE = 9,          SW_SHOWDEFAULT = 10,          SW_FORCEMINIMIZE = 11,          SW_MAX = 11      }      #endregion      #region SetWindowPos Z Order      public enum SetWindowPosZOrder      {          HWND_TOP = 0,          HWND_BOTTOM = 1,          HWND_TOPMOST = -1,          HWND_NOTOPMOST = -2      }      #endregion      #region SetWindowPosFlags      public enum SetWindowPosFlags : uint      {          SWP_NOSIZE = 0x0001,          SWP_NOMOVE = 0x0002,          SWP_NOZORDER = 0x0004,          SWP_NOREDRAW = 0x0008,          SWP_NOACTIVATE = 0x0010,          SWP_FRAMECHANGED = 0x0020,          SWP_SHOWWINDOW = 0x0040,          SWP_HIDEWINDOW = 0x0080,          SWP_NOCOPYBITS = 0x0100,          SWP_NOOWNERZORDER = 0x0200,          SWP_NOSENDCHANGING = 0x0400,          SWP_DRAWFRAME = 0x0020,          SWP_NOREPOSITION = 0x0200,          SWP_DEFERERASE = 0x2000,          SWP_ASYNCWINDOWPOS = 0x4000      }      #endregion      #region Virtual Keys      public enum VirtualKeys      {          VK_LBUTTON = 0x01,          VK_CANCEL = 0x03,          VK_BACK = 0x08,          VK_TAB = 0x09,          VK_CLEAR = 0x0C,          VK_RETURN = 0x0D,          VK_SHIFT = 0x10,          VK_CONTROL = 0x11,          VK_MENU = 0x12,          VK_CAPITAL = 0x14,          VK_ESCAPE = 0x1B,          VK_SPACE = 0x20,          VK_PRIOR = 0x21,          VK_NEXT = 0x22,          VK_END = 0x23,          VK_HOME = 0x24,          VK_LEFT = 0x25,          VK_UP = 0x26,          VK_RIGHT = 0x27,          VK_DOWN = 0x28,          VK_SELECT = 0x29,          VK_EXECUTE = 0x2B,          VK_SNAPSHOT = 0x2C,          VK_HELP = 0x2F,          VK_0 = 0x30,          VK_1 = 0x31,          VK_2 = 0x32,          VK_3 = 0x33,          VK_4 = 0x34,          VK_5 = 0x35,          VK_6 = 0x36,          VK_7 = 0x37,          VK_8 = 0x38,          VK_9 = 0x39,          VK_A = 0x41,          VK_B = 0x42,          VK_C = 0x43,          VK_D = 0x44,          VK_E = 0x45,          VK_F = 0x46,          VK_G = 0x47,          VK_H = 0x48,          VK_I = 0x49,          VK_J = 0x4A,          VK_K = 0x4B,          VK_L = 0x4C,          VK_M = 0x4D,          VK_N = 0x4E,          VK_O = 0x4F,          VK_P = 0x50,          VK_Q = 0x51,          VK_R = 0x52,          VK_S = 0x53,          VK_T = 0x54,          VK_U = 0x55,          VK_V = 0x56,          VK_W = 0x57,          VK_X = 0x58,          VK_Y = 0x59,          VK_Z = 0x5A,          VK_NUMPAD0 = 0x60,          VK_NUMPAD1 = 0x61,          VK_NUMPAD2 = 0x62,          VK_NUMPAD3 = 0x63,          VK_NUMPAD4 = 0x64,          VK_NUMPAD5 = 0x65,          VK_NUMPAD6 = 0x66,          VK_NUMPAD7 = 0x67,          VK_NUMPAD8 = 0x68,          VK_NUMPAD9 = 0x69,          VK_MULTIPLY = 0x6A,          VK_ADD = 0x6B,          VK_SEPARATOR = 0x6C,          VK_SUBTRACT = 0x6D,          VK_DECIMAL = 0x6E,          VK_DIVIDE = 0x6F,          VK_ATTN = 0xF6,          VK_CRSEL = 0xF7,          VK_EXSEL = 0xF8,          VK_EREOF = 0xF9,          VK_PLAY = 0xFA,          VK_ZOOM = 0xFB,          VK_NONAME = 0xFC,          VK_PA1 = 0xFD,          VK_OEM_CLEAR = 0xFE,          VK_LWIN = 0x5B,          VK_RWIN = 0x5C,          VK_APPS = 0x5D,          VK_LSHIFT = 0xA0,          VK_RSHIFT = 0xA1,          VK_LCONTROL = 0xA2,          VK_RCONTROL = 0xA3,          VK_LMENU = 0xA4,          VK_RMENU = 0xA5      }      #endregion      #region PatBlt Types      public enum PatBltTypes      {          SRCCOPY = 0x00CC0020,          SRCPAINT = 0x00EE0086,          SRCAND = 0x008800C6,          SRCINVERT = 0x00660046,          SRCERASE = 0x00440328,          NOTSRCCOPY = 0x00330008,          NOTSRCERASE = 0x001100A6,          MERGECOPY = 0x00C000CA,          MERGEPAINT = 0x00BB0226,          PATCOPY = 0x00F00021,          PATPAINT = 0x00FB0A09,          PATINVERT = 0x005A0049,          DSTINVERT = 0x00550009,          BLACKNESS = 0x00000042,          WHITENESS = 0x00FF0062      }      #endregion      #region Clipboard Formats      public enum ClipboardFormats : uint      {          CF_TEXT = 1,          CF_BITMAP = 2,          CF_METAFILEPICT = 3,          CF_SYLK = 4,          CF_DIF = 5,          CF_TIFF = 6,          CF_OEMTEXT = 7,          CF_DIB = 8,          CF_PALETTE = 9,          CF_PENDATA = 10,          CF_RIFF = 11,          CF_WAVE = 12,          CF_UNICODETEXT = 13,          CF_ENHMETAFILE = 14,          CF_HDROP = 15,          CF_LOCALE = 16,          CF_MAX = 17,          CF_OWNERDISPLAY = 0x0080,          CF_DSPTEXT = 0x0081,          CF_DSPBITMAP = 0x0082,          CF_DSPMETAFILEPICT = 0x0083,          CF_DSPENHMETAFILE = 0x008E,          CF_PRIVATEFIRST = 0x0200,          CF_PRIVATELAST = 0x02FF,          CF_GDIOBJFIRST = 0x0300,          CF_GDIOBJLAST = 0x03FF      }      #endregion      #region Common Controls Initialization flags      public enum CommonControlInitFlags      {          ICC_LISTVIEW_CLASSES = 0x00000001,          ICC_TREEVIEW_CLASSES = 0x00000002,          ICC_BAR_CLASSES = 0x00000004,          ICC_TAB_CLASSES = 0x00000008,          ICC_UPDOWN_CLASS = 0x00000010,          ICC_PROGRESS_CLASS = 0x00000020,          ICC_HOTKEY_CLASS = 0x00000040,          ICC_ANIMATE_CLASS = 0x00000080,          ICC_WIN95_CLASSES = 0x000000FF,          ICC_DATE_CLASSES = 0x00000100,          ICC_USEREX_CLASSES = 0x00000200,          ICC_COOL_CLASSES = 0x00000400,          ICC_INTERNET_CLASSES = 0x00000800,          ICC_PAGESCROLLER_CLASS = 0x00001000,          ICC_NATIVEFNTCTL_CLASS = 0x00002000      }      #endregion      #region Common Controls Styles      public enum CommonControlStyles      {          CCS_TOP = 0x00000001,          CCS_NOMOVEY = 0x00000002,          CCS_BOTTOM = 0x00000003,          CCS_NORESIZE = 0x00000004,          CCS_NOPARENTALIGN = 0x00000008,          CCS_ADJUSTABLE = 0x00000020,          CCS_NODIVIDER = 0x00000040,          CCS_VERT = 0x00000080,          CCS_LEFT = (CCS_VERT | CCS_TOP),          CCS_RIGHT = (CCS_VERT | CCS_BOTTOM),          CCS_NOMOVEX = (CCS_VERT | CCS_NOMOVEY)      }      #endregion      #region ToolBar Styles      public enum ToolBarStyles      {          TBSTYLE_BUTTON = 0x0000,          TBSTYLE_SEP = 0x0001,          TBSTYLE_CHECK = 0x0002,          TBSTYLE_GROUP = 0x0004,          TBSTYLE_CHECKGROUP = (TBSTYLE_GROUP | TBSTYLE_CHECK),          TBSTYLE_DROPDOWN = 0x0008,          TBSTYLE_AUTOSIZE = 0x0010,          TBSTYLE_NOPREFIX = 0x0020,          TBSTYLE_TOOLTIPS = 0x0100,          TBSTYLE_WRAPABLE = 0x0200,          TBSTYLE_ALTDRAG = 0x0400,          TBSTYLE_FLAT = 0x0800,          TBSTYLE_LIST = 0x1000,          TBSTYLE_CUSTOMERASE = 0x2000,          TBSTYLE_REGISTERDROP = 0x4000,          TBSTYLE_TRANSPARENT = 0x8000,          TBSTYLE_EX_DRAWDDARROWS = 0x00000001      }      #endregion      #region ToolBar Ex Styles      public enum ToolBarExStyles      {          TBSTYLE_EX_DRAWDDARROWS = 0x1,          TBSTYLE_EX_HIDECLIPPEDBUTTONS = 0x10,          TBSTYLE_EX_DOUBLEBUFFER = 0x80      }      #endregion      #region ToolBar Messages      public enum ToolBarMessages      {          WM_USER = 0x0400,          TB_ENABLEBUTTON = (WM_USER + 1),          TB_CHECKBUTTON = (WM_USER + 2),          TB_PRESSBUTTON = (WM_USER + 3),          TB_HIDEBUTTON = (WM_USER + 4),          TB_INDETERMINATE = (WM_USER + 5),          TB_MARKBUTTON = (WM_USER + 6),          TB_ISBUTTONENABLED = (WM_USER + 9),          TB_ISBUTTONCHECKED = (WM_USER + 10),          TB_ISBUTTONPRESSED = (WM_USER + 11),          TB_ISBUTTONHIDDEN = (WM_USER + 12),          TB_ISBUTTONINDETERMINATE = (WM_USER + 13),          TB_ISBUTTONHIGHLIGHTED = (WM_USER + 14),          TB_SETSTATE = (WM_USER + 17),          TB_GETSTATE = (WM_USER + 18),          TB_ADDBITMAP = (WM_USER + 19),          TB_ADDBUTTONSA = (WM_USER + 20),          TB_INSERTBUTTONA = (WM_USER + 21),          TB_ADDBUTTONS = (WM_USER + 20),          TB_INSERTBUTTON = (WM_USER + 21),          TB_DELETEBUTTON = (WM_USER + 22),          TB_GETBUTTON = (WM_USER + 23),          TB_BUTTONCOUNT = (WM_USER + 24),          TB_COMMANDTOINDEX = (WM_USER + 25),          TB_SAVERESTOREA = (WM_USER + 26),          TB_CUSTOMIZE = (WM_USER + 27),          TB_ADDSTRINGA = (WM_USER + 28),          TB_GETITEMRECT = (WM_USER + 29),          TB_BUTTONSTRUCTSIZE = (WM_USER + 30),          TB_SETBUTTONSIZE = (WM_USER + 31),          TB_SETBITMAPSIZE = (WM_USER + 32),          TB_AUTOSIZE = (WM_USER + 33),          TB_GETTOOLTIPS = (WM_USER + 35),          TB_SETTOOLTIPS = (WM_USER + 36),          TB_SETPARENT = (WM_USER + 37),          TB_SETROWS = (WM_USER + 39),          TB_GETROWS = (WM_USER + 40),          TB_GETBITMAPFLAGS = (WM_USER + 41),          TB_SETCMDID = (WM_USER + 42),          TB_CHANGEBITMAP = (WM_USER + 43),          TB_GETBITMAP = (WM_USER + 44),          TB_GETBUTTONTEXTA = (WM_USER + 45),          TB_GETBUTTONTEXTW = (WM_USER + 75),          TB_REPLACEBITMAP = (WM_USER + 46),          TB_SETINDENT = (WM_USER + 47),          TB_SETIMAGELIST = (WM_USER + 48),          TB_GETIMAGELIST = (WM_USER + 49),          TB_LOADIMAGES = (WM_USER + 50),          TB_GETRECT = (WM_USER + 51),          TB_SETHOTIMAGELIST = (WM_USER + 52),          TB_GETHOTIMAGELIST = (WM_USER + 53),          TB_SETDISABLEDIMAGELIST = (WM_USER + 54),          TB_GETDISABLEDIMAGELIST = (WM_USER + 55),          TB_SETSTYLE = (WM_USER + 56),          TB_GETSTYLE = (WM_USER + 57),          TB_GETBUTTONSIZE = (WM_USER + 58),          TB_SETBUTTONWIDTH = (WM_USER + 59),          TB_SETMAXTEXTROWS = (WM_USER + 60),          TB_GETTEXTROWS = (WM_USER + 61),          TB_GETOBJECT = (WM_USER + 62),          TB_GETBUTTONINFOW = (WM_USER + 63),          TB_SETBUTTONINFOW = (WM_USER + 64),          TB_GETBUTTONINFOA = (WM_USER + 65),          TB_SETBUTTONINFOA = (WM_USER + 66),          TB_INSERTBUTTONW = (WM_USER + 67),          TB_ADDBUTTONSW = (WM_USER + 68),          TB_HITTEST = (WM_USER + 69),          TB_SETDRAWTEXTFLAGS = (WM_USER + 70),          TB_GETHOTITEM = (WM_USER + 71),          TB_SETHOTITEM = (WM_USER + 72),          TB_SETANCHORHIGHLIGHT = (WM_USER + 73),          TB_GETANCHORHIGHLIGHT = (WM_USER + 74),          TB_SAVERESTOREW = (WM_USER + 76),          TB_ADDSTRINGW = (WM_USER + 77),          TB_MAPACCELERATORA = (WM_USER + 78),          TB_GETINSERTMARK = (WM_USER + 79),          TB_SETINSERTMARK = (WM_USER + 80),          TB_INSERTMARKHITTEST = (WM_USER + 81),          TB_MOVEBUTTON = (WM_USER + 82),          TB_GETMAXSIZE = (WM_USER + 83),          TB_SETEXTENDEDSTYLE = (WM_USER + 84),          TB_GETEXTENDEDSTYLE = (WM_USER + 85),          TB_GETPADDING = (WM_USER + 86),          TB_SETPADDING = (WM_USER + 87),          TB_SETINSERTMARKCOLOR = (WM_USER + 88),          TB_GETINSERTMARKCOLOR = (WM_USER + 89)      }      #endregion      #region ToolBar Notifications      public enum ToolBarNotifications      {          TTN_NEEDTEXTA = ((0 - 520) - 0),          TTN_NEEDTEXTW = ((0 - 520) - 10),          TBN_QUERYINSERT = ((0 - 700) - 6),          TBN_DROPDOWN = ((0 - 700) - 10),          TBN_HOTITEMCHANGE = ((0 - 700) - 13)      }      #endregion      #region Reflected Messages      public enum ReflectedMessages      {          OCM__BASE = (WinMsg.WM_USER + 0x1c00),          OCM_COMMAND = (OCM__BASE + WinMsg.WM_COMMAND),          OCM_CTLCOLORBTN = (OCM__BASE + WinMsg.WM_CTLCOLORBTN),          OCM_CTLCOLOREDIT = (OCM__BASE + WinMsg.WM_CTLCOLOREDIT),          OCM_CTLCOLORDLG = (OCM__BASE + WinMsg.WM_CTLCOLORDLG),          OCM_CTLCOLORLISTBOX = (OCM__BASE + WinMsg.WM_CTLCOLORLISTBOX),          OCM_CTLCOLORWinMsgBOX = (OCM__BASE + WinMsg.WM_CTLCOLORWinMsgBOX),          OCM_CTLCOLORSCROLLBAR = (OCM__BASE + WinMsg.WM_CTLCOLORSCROLLBAR),          OCM_CTLCOLORSTATIC = (OCM__BASE + WinMsg.WM_CTLCOLORSTATIC),          OCM_CTLCOLOR = (OCM__BASE + WinMsg.WM_CTLCOLOR),          OCM_DRAWITEM = (OCM__BASE + WinMsg.WM_DRAWITEM),          OCM_MEASUREITEM = (OCM__BASE + WinMsg.WM_MEASUREITEM),          OCM_DELETEITEM = (OCM__BASE + WinMsg.WM_DELETEITEM),          OCM_VKEYTOITEM = (OCM__BASE + WinMsg.WM_VKEYTOITEM),          OCM_CHARTOITEM = (OCM__BASE + WinMsg.WM_CHARTOITEM),          OCM_COMPAREITEM = (OCM__BASE + WinMsg.WM_COMPAREITEM),          OCM_HSCROLL = (OCM__BASE + WinMsg.WM_HSCROLL),          OCM_VSCROLL = (OCM__BASE + WinMsg.WM_VSCROLL),          OCM_PARENTNOTIFY = (OCM__BASE + WinMsg.WM_PARENTNOTIFY),          OCM_NOTIFY = (OCM__BASE + WinMsg.WM_NOTIFY)      }      #endregion      #region Notification Messages      public enum NotificationMessages      {          NM_FIRST = (0 - 0),          NM_CUSTOMDRAW = (NM_FIRST - 12),          NM_NCHITTEST = (NM_FIRST - 14)      }      #endregion      #region ToolTip Flags      public enum ToolTipFlags      {          TTF_CENTERTIP = 0x0002,          TTF_RTLREADING = 0x0004,          TTF_SUBCLASS = 0x0010,          TTF_TRACK = 0x0020,          TTF_ABSOLUTE = 0x0080,          TTF_TRANSPARENT = 0x0100,          TTF_DI_SETITEM = 0x8000      }      #endregion      #region Custom Draw Return Flags      public enum CustomDrawReturnFlags      {          CDRF_DODEFAULT = 0x00000000,          CDRF_NEWFONT = 0x00000002,          CDRF_SKIPDEFAULT = 0x00000004,          CDRF_NOTIFYPOSTPAINT = 0x00000010,          CDRF_NOTIFYITEMDRAW = 0x00000020,          CDRF_NOTIFYSUBITEMDRAW = 0x00000020,          CDRF_NOTIFYPOSTERASE = 0x00000040      }      #endregion      #region Custom Draw Item State Flags      public enum CustomDrawItemStateFlags      {          CDIS_SELECTED = 0x0001,          CDIS_GRAYED = 0x0002,          CDIS_DISABLED = 0x0004,          CDIS_CHECKED = 0x0008,          CDIS_FOCUS = 0x0010,          CDIS_DEFAULT = 0x0020,          CDIS_HOT = 0x0040,          CDIS_MARKED = 0x0080,          CDIS_INDETERMINATE = 0x0100      }      #endregion      #region Custom Draw Draw State Flags      public enum CustomDrawDrawStateFlags      {          CDDS_PREPAINT = 0x00000001,          CDDS_POSTPAINT = 0x00000002,          CDDS_PREERASE = 0x00000003,          CDDS_POSTERASE = 0x00000004,          CDDS_ITEM = 0x00010000,          CDDS_ITEMPREPAINT = (CDDS_ITEM | CDDS_PREPAINT),          CDDS_ITEMPOSTPAINT = (CDDS_ITEM | CDDS_POSTPAINT),          CDDS_ITEMPREERASE = (CDDS_ITEM | CDDS_PREERASE),          CDDS_ITEMPOSTERASE = (CDDS_ITEM | CDDS_POSTERASE),          CDDS_SUBITEM = 0x00020000      }      #endregion      #region Toolbar button info flags      public enum ToolBarButtonInfoFlags      {          TBIF_IMAGE = 0x00000001,          TBIF_TEXT = 0x00000002,          TBIF_STATE = 0x00000004,          TBIF_STYLE = 0x00000008,          TBIF_LPARAM = 0x00000010,          TBIF_COMMAND = 0x00000020,          TBIF_SIZE = 0x00000040,          I_IMAGECALLBACK = -1,          I_IMAGENONE = -2      }      #endregion      #region Toolbar button styles      public enum ToolBarButtonStyles      {          TBSTYLE_BUTTON = 0x0000,          TBSTYLE_SEP = 0x0001,          TBSTYLE_CHECK = 0x0002,          TBSTYLE_GROUP = 0x0004,          TBSTYLE_CHECKGROUP = (TBSTYLE_GROUP | TBSTYLE_CHECK),          TBSTYLE_DROPDOWN = 0x0008,          TBSTYLE_AUTOSIZE = 0x0010,          TBSTYLE_NOPREFIX = 0x0020,          TBSTYLE_TOOLTIPS = 0x0100,          TBSTYLE_WRAPABLE = 0x0200,          TBSTYLE_ALTDRAG = 0x0400,          TBSTYLE_FLAT = 0x0800,          TBSTYLE_LIST = 0x1000,          TBSTYLE_CUSTOMERASE = 0x2000,          TBSTYLE_REGISTERDROP = 0x4000,          TBSTYLE_TRANSPARENT = 0x8000,          TBSTYLE_EX_DRAWDDARROWS = 0x00000001      }      #endregion      #region Toolbar button state      public enum ToolBarButtonStates      {          TBSTATE_CHECKED = 0x01,          TBSTATE_PRESSED = 0x02,          TBSTATE_ENABLED = 0x04,          TBSTATE_HIDDEN = 0x08,          TBSTATE_INDETERMINATE = 0x10,          TBSTATE_WRAP = 0x20,          TBSTATE_ELLIPSES = 0x40,          TBSTATE_MARKED = 0x80      }      #endregion      #region Windows Hook Codes      public enum WindowsHookCodes      {          WH_MSGFILTER = (-1),          WH_JOURNALRECORD = 0,          WH_JOURNALPLAYBACK = 1,          WH_KEYBOARD = 2,          WH_GETMESSAGE = 3,          WH_CALLWNDPROC = 4,          WH_CBT = 5,          WH_SYSMSGFILTER = 6,          WH_MOUSE = 7,          WH_HARDWARE = 8,          WH_DEBUG = 9,          WH_SHELL = 10,          WH_FOREGROUNDIDLE = 11,          WH_CALLWNDPROCRET = 12,          WH_KEYBOARD_LL = 13,          WH_MOUSE_LL = 14      }      #endregion      #region Mouse Hook Filters      public enum MouseHookFilters      {          MSGF_DIALOGBOX = 0,          MSGF_MESSAGEBOX = 1,          MSGF_MENU = 2,          MSGF_SCROLLBAR = 5,          MSGF_NEXTWINDOW = 6      }      #endregion      #region Draw Text format flags      public enum DrawTextFormatFlags      {          DT_TOP = 0x00000000,          DT_LEFT = 0x00000000,          DT_CENTER = 0x00000001,          DT_RIGHT = 0x00000002,          DT_VCENTER = 0x00000004,          DT_BOTTOM = 0x00000008,          DT_WORDBREAK = 0x00000010,          DT_SINGLELINE = 0x00000020,          DT_EXPANDTABS = 0x00000040,          DT_TABSTOP = 0x00000080,          DT_NOCLIP = 0x00000100,          DT_EXTERNALLEADING = 0x00000200,          DT_CALCRECT = 0x00000400,          DT_NOPREFIX = 0x00000800,          DT_INTERNAL = 0x00001000,          DT_EDITCONTROL = 0x00002000,          DT_PATH_ELLIPSIS = 0x00004000,          DT_END_ELLIPSIS = 0x00008000,          DT_MODIFYSTRING = 0x00010000,          DT_RTLREADING = 0x00020000,          DT_WORD_ELLIPSIS = 0x00040000      }      #endregion      #region Rebar Styles      public enum RebarStyles      {          RBS_TOOLTIPS = 0x0100,          RBS_VARHEIGHT = 0x0200,          RBS_BANDBORDERS = 0x0400,          RBS_FIXEDORDER = 0x0800,          RBS_REGISTERDROP = 0x1000,          RBS_AUTOSIZE = 0x2000,          RBS_VERTICALGRIPPER = 0x4000,          RBS_DBLCLKTOGGLE = 0x8000,      }      #endregion      #region Rebar Notifications      public enum RebarNotifications      {          RBN_FIRST = (0 - 831),          RBN_HEIGHTCHANGE = (RBN_FIRST - 0),          RBN_GETOBJECT = (RBN_FIRST - 1),          RBN_LAYOUTCHANGED = (RBN_FIRST - 2),          RBN_AUTOSIZE = (RBN_FIRST - 3),          RBN_BEGINDRAG = (RBN_FIRST - 4),          RBN_ENDDRAG = (RBN_FIRST - 5),          RBN_DELETINGBAND = (RBN_FIRST - 6),          RBN_DELETEDBAND = (RBN_FIRST - 7),          RBN_CHILDSIZE = (RBN_FIRST - 8),          RBN_CHEVRONPUSHED = (RBN_FIRST - 10)      }      #endregion      #region Rebar Messages      public enum RebarMessages      {          CCM_FIRST = 0x2000,          WM_USER = 0x0400,          RB_INSERTBANDA = (WM_USER + 1),          RB_DELETEBAND = (WM_USER + 2),          RB_GETBARINFO = (WM_USER + 3),          RB_SETBARINFO = (WM_USER + 4),          RB_GETBANDINFO = (WM_USER + 5),          RB_SETBANDINFOA = (WM_USER + 6),          RB_SETPARENT = (WM_USER + 7),          RB_HITTEST = (WM_USER + 8),          RB_GETRECT = (WM_USER + 9),          RB_INSERTBANDW = (WM_USER + 10),          RB_SETBANDINFOW = (WM_USER + 11),          RB_GETBANDCOUNT = (WM_USER + 12),          RB_GETROWCOUNT = (WM_USER + 13),          RB_GETROWHEIGHT = (WM_USER + 14),          RB_IDTOINDEX = (WM_USER + 16),          RB_GETTOOLTIPS = (WM_USER + 17),          RB_SETTOOLTIPS = (WM_USER + 18),          RB_SETBKCOLOR = (WM_USER + 19),          RB_GETBKCOLOR = (WM_USER + 20),          RB_SETTEXTCOLOR = (WM_USER + 21),          RB_GETTEXTCOLOR = (WM_USER + 22),          RB_SIZETORECT = (WM_USER + 23),          RB_SETCOLORSCHEME = (CCM_FIRST + 2),          RB_GETCOLORSCHEME = (CCM_FIRST + 3),          RB_BEGINDRAG = (WM_USER + 24),          RB_ENDDRAG = (WM_USER + 25),          RB_DRAGMOVE = (WM_USER + 26),          RB_GETBARHEIGHT = (WM_USER + 27),          RB_GETBANDINFOW = (WM_USER + 28),          RB_GETBANDINFOA = (WM_USER + 29),          RB_MINIMIZEBAND = (WM_USER + 30),          RB_MAXIMIZEBAND = (WM_USER + 31),          RB_GETDROPTARGET = (CCM_FIRST + 4),          RB_GETBANDBORDERS = (WM_USER + 34),          RB_SHOWBAND = (WM_USER + 35),          RB_SETPALETTE = (WM_USER + 37),          RB_GETPALETTE = (WM_USER + 38),          RB_MOVEBAND = (WM_USER + 39),          RB_SETUNICODEFORMAT = (CCM_FIRST + 5),          RB_GETUNICODEFORMAT = (CCM_FIRST + 6)      }      #endregion      #region Rebar Info Mask      public enum RebarInfoMask      {          RBBIM_STYLE = 0x00000001,          RBBIM_COLORS = 0x00000002,          RBBIM_TEXT = 0x00000004,          RBBIM_IMAGE = 0x00000008,          RBBIM_CHILD = 0x00000010,          RBBIM_CHILDSIZE = 0x00000020,          RBBIM_SIZE = 0x00000040,          RBBIM_BACKGROUND = 0x00000080,          RBBIM_ID = 0x00000100,          RBBIM_IDEALSIZE = 0x00000200,          RBBIM_LPARAM = 0x00000400,          BBIM_HEADERSIZE = 0x00000800      }      #endregion      #region Rebar Styles      public enum RebarStylesEx      {          RBBS_BREAK = 0x1,          RBBS_CHILDEDGE = 0x4,          RBBS_FIXEDBMP = 0x20,          RBBS_GRIPPERALWAYS = 0x80,          RBBS_USECHEVRON = 0x200      }      #endregion      #region Object types      public enum ObjectTypes      {          OBJ_PEN = 1,          OBJ_BRUSH = 2,          OBJ_DC = 3,          OBJ_METADC = 4,          OBJ_PAL = 5,          OBJ_FONT = 6,          OBJ_BITMAP = 7,          OBJ_REGION = 8,          OBJ_METAFILE = 9,          OBJ_MEMDC = 10,          OBJ_EXTPEN = 11,          OBJ_ENHMETADC = 12,          OBJ_ENHMETAFILE = 13      }      #endregion      #region WM_MENUCHAR return values      public enum MenuCharReturnValues      {          MNC_IGNORE = 0,          MNC_CLOSE = 1,          MNC_EXECUTE = 2,          MNC_SELECT = 3      }      #endregion      #region Background Mode      public enum BackgroundMode      {          TRANSPARENT = 1,          OPAQUE = 2      }      #endregion      #region ListView Messages      public enum ListViewMessages      {          LVM_FIRST = 0x1000,          LVM_GETSUBITEMRECT = (LVM_FIRST + 56),          LVM_GETITEMSTATE = (LVM_FIRST + 44),          LVM_GETITEMTEXTW = (LVM_FIRST + 115)      }      #endregion      #region Header Control Messages      public enum HeaderControlMessages : int      {          HDM_FIRST = 0x1200,          HDM_GETITEMRECT = (HDM_FIRST + 7),          HDM_HITTEST = (HDM_FIRST + 6),          HDM_SETIMAGELIST = (HDM_FIRST + 8),          HDM_GETITEMW = (HDM_FIRST + 11),          HDM_ORDERTOINDEX = (HDM_FIRST + 15)      }      #endregion      #region Header Control Notifications      public enum HeaderControlNotifications      {          HDN_FIRST = (0 - 300),          HDN_BEGINTRACKW = (HDN_FIRST - 26),          HDN_ENDTRACKW = (HDN_FIRST - 27),          HDN_ITEMCLICKW = (HDN_FIRST - 22),      }      #endregion      #region Header Control HitTest Flags      public enum HeaderControlHitTestFlags : uint      {          HHT_NOWHERE = 0x0001,          HHT_ONHEADER = 0x0002,          HHT_ONDIVIDER = 0x0004,          HHT_ONDIVOPEN = 0x0008,          HHT_ABOVE = 0x0100,          HHT_BELOW = 0x0200,          HHT_TORIGHT = 0x0400,          HHT_TOLEFT = 0x0800      }      #endregion      #region List View sub item portion      public enum SubItemPortion      {          LVIR_BOUNDS = 0,          LVIR_ICON = 1,          LVIR_LABEL = 2      }      #endregion      #region Cursor Type      public enum CursorType : uint      {          IDC_ARROW = 32512U,          IDC_IBEAM = 32513U,          IDC_WAIT = 32514U,          IDC_CROSS = 32515U,          IDC_UPARROW = 32516U,          IDC_SIZE = 32640U,          IDC_ICON = 32641U,          IDC_SIZENWSE = 32642U,          IDC_SIZENESW = 32643U,          IDC_SIZEWE = 32644U,          IDC_SIZENS = 32645U,          IDC_SIZEALL = 32646U,          IDC_NO = 32648U,          IDC_HAND = 32649U,          IDC_APPSTARTING = 32650U,          IDC_HELP = 32651U      }      #endregion      #region Tracker Event Flags      public enum TrackerEventFlags : uint      {          TME_HOVER = 0x00000001,          TME_LEAVE = 0x00000002,          TME_QUERY = 0x40000000,          TME_CANCEL = 0x80000000      }      #endregion      #region Mouse Activate Flags      public enum MouseActivateFlags      {          MA_ACTIVATE = 1,          MA_ACTIVATEANDEAT = 2,          MA_NOACTIVATE = 3,          MA_NOACTIVATEANDEAT = 4      }      #endregion      #region Dialog Codes      public enum DialogCodes      {          DLGC_WANTARROWS = 0x0001,          DLGC_WANTTAB = 0x0002,          DLGC_WANTALLKEYS = 0x0004,          DLGC_WANTMESSAGE = 0x0004,          DLGC_HASSETSEL = 0x0008,          DLGC_DEFPUSHBUTTON = 0x0010,          DLGC_UNDEFPUSHBUTTON = 0x0020,          DLGC_RADIOBUTTON = 0x0040,          DLGC_WANTCHARS = 0x0080,          DLGC_STATIC = 0x0100,          DLGC_BUTTON = 0x2000      }      #endregion      #region Update Layered Windows Flags      public enum UpdateLayeredWindowsFlags      {          ULW_COLORKEY = 0x00000001,          ULW_ALPHA = 0x00000002,          ULW_OPAQUE = 0x00000004      }      #endregion      #region Alpha Flags      public enum AlphaFlags : byte      {          AC_SRC_OVER = 0x00,          AC_SRC_ALPHA = 0x01      }      #endregion      #region ComboBox messages      public enum ComboBoxMessages      {          CB_GETDROPPEDSTATE = 0x0157      }      #endregion      #region SetWindowLong indexes      public enum SetWindowLongOffsets      {          GWL_WNDPROC = (-4),          GWL_HINSTANCE = (-6),          GWL_HWNDPARENT = (-8),          GWL_STYLE = (-16),          GWL_EXSTYLE = (-20),          GWL_USERDATA = (-21),          GWL_ID = (-12)      }      #endregion      #region TreeView Messages      public enum TreeViewMessages      {          TV_FIRST = 0x1100,          TVM_GETITEMRECT = (TV_FIRST + 4),          TVM_GETITEMW = (TV_FIRST + 62)      }      #endregion      #region TreeViewItem Flags      public enum TreeViewItemFlags      {          TVIF_TEXT = 0x0001,          TVIF_IMAGE = 0x0002,          TVIF_PARAM = 0x0004,          TVIF_STATE = 0x0008,          TVIF_HANDLE = 0x0010,          TVIF_SELECTEDIMAGE = 0x0020,          TVIF_CHILDREN = 0x0040,          TVIF_INTEGRAL = 0x0080      }      #endregion      #region ListViewItem flags      public enum ListViewItemFlags      {          LVIF_TEXT = 0x0001,          LVIF_IMAGE = 0x0002,          LVIF_PARAM = 0x0004,          LVIF_STATE = 0x0008,          LVIF_INDENT = 0x0010,          LVIF_NORECOMPUTE = 0x0800      }      #endregion      #region HeaderItem flags      public enum HeaderItemFlags      {          HDI_WIDTH = 0x0001,          HDI_HEIGHT = HDI_WIDTH,          HDI_TEXT = 0x0002,          HDI_FORMAT = 0x0004,          HDI_LPARAM = 0x0008,          HDI_BITMAP = 0x0010,          HDI_IMAGE = 0x0020,          HDI_DI_SETITEM = 0x0040,          HDI_ORDER = 0x0080      }      #endregion      #region GetDCExFlags      public enum GetDCExFlags      {          DCX_WINDOW = 0x00000001,          DCX_CACHE = 0x00000002,          DCX_NORESETATTRS = 0x00000004,          DCX_CLIPCHILDREN = 0x00000008,          DCX_CLIPSIBLINGS = 0x00000010,          DCX_PARENTCLIP = 0x00000020,          DCX_EXCLUDERGN = 0x00000040,          DCX_INTERSECTRGN = 0x00000080,          DCX_EXCLUDEUPDATE = 0x00000100,          DCX_INTERSECTUPDATE = 0x00000200,          DCX_LOCKWINDOWUPDATE = 0x00000400,          DCX_VALIDATE = 0x00200000      }      #endregion      #region HitTest      public enum HitTest      {          HTERROR = (-2),          HTTRANSPARENT = (-1),          HTNOWHERE = 0,          HTCLIENT = 1,          HTCAPTION = 2,          HTSYSMENU = 3,          HTGROWBOX = 4,          HTSIZE = HTGROWBOX,          HTMENU = 5,          HTHSCROLL = 6,          HTVSCROLL = 7,          HTMINBUTTON = 8,          HTMAXBUTTON = 9,          HTLEFT = 10,          HTRIGHT = 11,          HTTOP = 12,          HTTOPLEFT = 13,          HTTOPRIGHT = 14,          HTBOTTOM = 15,          HTBOTTOMLEFT = 16,          HTBOTTOMRIGHT = 17,          HTBORDER = 18,          HTREDUCE = HTMINBUTTON,          HTZOOM = HTMAXBUTTON,          HTSIZEFIRST = HTLEFT,          HTSIZELAST = HTBOTTOMRIGHT,          HTOBJECT = 19,          HTCLOSE = 20,          HTHELP = 21      }      #endregion      #region ActivateFlags      public enum ActivateState      {          WA_INACTIVE = 0,          WA_ACTIVE = 1,          WA_CLICKACTIVE = 2      }      #endregion      #region StrechModeFlags      public enum StrechModeFlags      {          BLACKONWHITE = 1,          WHITEONBLACK = 2,          COLORONCOLOR = 3,          HALFTONE = 4,          MAXSTRETCHBLTMODE = 4      }      #endregion      #region ScrollBarFlags      public enum ScrollBarFlags      {          SBS_HORZ = 0x0000,          SBS_VERT = 0x0001,          SBS_TOPALIGN = 0x0002,          SBS_LEFTALIGN = 0x0002,          SBS_BOTTOMALIGN = 0x0004,          SBS_RIGHTALIGN = 0x0004,          SBS_SIZEBOXTOPLEFTALIGN = 0x0002,          SBS_SIZEBOXBOTTOMRIGHTALIGN = 0x0004,          SBS_SIZEBOX = 0x0008,          SBS_SIZEGRIP = 0x0010      }      #endregion      #region System Metrics Codes      public enum SystemMetricsCodes      {          SM_CXSCREEN = 0,          SM_CYSCREEN = 1,          SM_CXVSCROLL = 2,          SM_CYHSCROLL = 3,          SM_CYCAPTION = 4,          SM_CXBORDER = 5,          SM_CYBORDER = 6,          SM_CXDLGFRAME = 7,          SM_CYDLGFRAME = 8,          SM_CYVTHUMB = 9,          SM_CXHTHUMB = 10,          SM_CXICON = 11,          SM_CYICON = 12,          SM_CXCURSOR = 13,          SM_CYCURSOR = 14,          SM_CYMENU = 15,          SM_CXFULLSCREEN = 16,          SM_CYFULLSCREEN = 17,          SM_CYKANJIWINDOW = 18,          SM_MOUSEPRESENT = 19,          SM_CYVSCROLL = 20,          SM_CXHSCROLL = 21,          SM_DEBUG = 22,          SM_SWAPBUTTON = 23,          SM_RESERVED1 = 24,          SM_RESERVED2 = 25,          SM_RESERVED3 = 26,          SM_RESERVED4 = 27,          SM_CXMIN = 28,          SM_CYMIN = 29,          SM_CXSIZE = 30,          SM_CYSIZE = 31,          SM_CXFRAME = 32,          SM_CYFRAME = 33,          SM_CXMINTRACK = 34,          SM_CYMINTRACK = 35,          SM_CXDOUBLECLK = 36,          SM_CYDOUBLECLK = 37,          SM_CXICONSPACING = 38,          SM_CYICONSPACING = 39,          SM_MENUDROPALIGNMENT = 40,          SM_PENWINDOWS = 41,          SM_DBCSENABLED = 42,          SM_CMOUSEBUTTONS = 43,          SM_CXFIXEDFRAME = SM_CXDLGFRAME,          SM_CYFIXEDFRAME = SM_CYDLGFRAME,          SM_CXSIZEFRAME = SM_CXFRAME,          SM_CYSIZEFRAME = SM_CYFRAME,          SM_SECURE = 44,          SM_CXEDGE = 45,          SM_CYEDGE = 46,          SM_CXMINSPACING = 47,          SM_CYMINSPACING = 48,          SM_CXSMICON = 49,          SM_CYSMICON = 50,          SM_CYSMCAPTION = 51,          SM_CXSMSIZE = 52,          SM_CYSMSIZE = 53,          SM_CXMENUSIZE = 54,          SM_CYMENUSIZE = 55,          SM_ARRANGE = 56,          SM_CXMINIMIZED = 57,          SM_CYMINIMIZED = 58,          SM_CXMAXTRACK = 59,          SM_CYMAXTRACK = 60,          SM_CXMAXIMIZED = 61,          SM_CYMAXIMIZED = 62,          SM_NETWORK = 63,          SM_CLEANBOOT = 67,          SM_CXDRAG = 68,          SM_CYDRAG = 69,          SM_SHOWSOUNDS = 70,          SM_CXMENUCHECK = 71,          SM_CYMENUCHECK = 72,          SM_SLOWMACHINE = 73,          SM_MIDEASTENABLED = 74,          SM_MOUSEWHEELPRESENT = 75,          SM_XVIRTUALSCREEN = 76,          SM_YVIRTUALSCREEN = 77,          SM_CXVIRTUALSCREEN = 78,          SM_CYVIRTUALSCREEN = 79,          SM_CMONITORS = 80,          SM_SAMEDISPLAYFORMAT = 81,          SM_CMETRICS = 83      }      #endregion      #region ScrollBarTypes      public enum ScrollBarTypes      {          SB_HORZ = 0,          SB_VERT = 1,          SB_CTL = 2,          SB_BOTH = 3      }      #endregion      #region SrollBarInfoFlags      public enum ScrollBarInfoFlags      {          SIF_RANGE = 0x0001,          SIF_PAGE = 0x0002,          SIF_POS = 0x0004,          SIF_DISABLENOSCROLL = 0x0008,          SIF_TRACKPOS = 0x0010,          SIF_ALL = (SIF_RANGE | SIF_PAGE | SIF_POS | SIF_TRACKPOS)      }      #endregion      #region Enable ScrollBar flags      public enum EnableScrollBarFlags      {          ESB_ENABLE_BOTH = 0x0000,          ESB_DISABLE_BOTH = 0x0003,          ESB_DISABLE_LEFT = 0x0001,          ESB_DISABLE_RIGHT = 0x0002,          ESB_DISABLE_UP = 0x0001,          ESB_DISABLE_DOWN = 0x0002,          ESB_DISABLE_LTUP = ESB_DISABLE_LEFT,          ESB_DISABLE_RTDN = ESB_DISABLE_RIGHT      }      #endregion      #region Scroll Requests      public enum ScrollBarRequests      {          SB_LINEUP = 0,          SB_LINELEFT = 0,          SB_LINEDOWN = 1,          SB_LINERIGHT = 1,          SB_PAGEUP = 2,          SB_PAGELEFT = 2,          SB_PAGEDOWN = 3,          SB_PAGERIGHT = 3,          SB_THUMBPOSITION = 4,          SB_THUMBTRACK = 5,          SB_TOP = 6,          SB_LEFT = 6,          SB_BOTTOM = 7,          SB_RIGHT = 7,          SB_ENDSCROLL = 8      }      #endregion      #region SrollWindowEx flags      public enum ScrollWindowExFlags      {          SW_SCROLLCHILDREN = 0x0001,          SW_INVALIDATE = 0x0002,          SW_ERASE = 0x0004,          SW_SMOOTHSCROLL = 0x0010      }      #endregion      #region ImageListFlags      public enum ImageListFlags      {          ILC_MASK = 0x0001,          ILC_COLOR = 0x0000,          ILC_COLORDDB = 0x00FE,          ILC_COLOR4 = 0x0004,          ILC_COLOR8 = 0x0008,          ILC_COLOR16 = 0x0010,          ILC_COLOR24 = 0x0018,          ILC_COLOR32 = 0x0020,          ILC_PALETTE = 0x0800      }      #endregion      #region List View Notifications      public enum ListViewNotifications      {          LVN_FIRST = (0 - 100),          LVN_GETDISPINFOW = (LVN_FIRST - 77),          LVN_SETDISPINFOA = (LVN_FIRST - 51)      }      #endregion    }

3.启动测试 :用户自己测试热插拔

串口接收数据

1.拖拽上来一个TextBox

2.点击TextBox上面的箭头,选择MultiLine (允许显示多行)

 2.拖拽TextBox使其达到自己满意的长宽,

设置TextBox的Scrollbars属性为Vertical  (显示竖直滚动条,可以滚动显示接收数据)

3.为了更好看些,设置TextBox的背景色为黑色 (Black) 

显示的字体颜色为草绿色 (LawnGreen)

4.选择serialPort1 -> 选择事件 -> 双击DataReceived

生成串口接收回调函数

5.在回调函数中接收数据,然后把接收数据显示在TextBox

            int len = serialPort1.BytesToRead;//获取可以读取的字节数              byte[] buff = new byte[len];//创建缓存数据数组              serialPort1.Read(buff, 0, len);//把数据读取到buff数组              string str = Encoding.Default.GetString(buff);//Byte值根据ASCII码表转为 String              Invoke((new Action(() => //C# 3.0以后代替委托的新方法              {                  textBox1.AppendText(str);//对话框追加显示数据              })));

6.测试接收数据

为了测试接收数据,可以安装虚拟串口软件

https://qqqqqbucket.oss-cn-beijing.aliyuncs.com/LearnC%23/VSPD6.9.zip

安装好以后

提示:

按照上面的操作以后

电脑上便会有了COM1和COM2

COM1发送的数据将会自动发送给COM2

COM2发送的数据将会自动发送给COM1

7.测试

8.增加选择16进制显示(CheckBox),增加数据清除按钮

9.关于显示字符串和显示16进制说明

在上面的测试接收中COM1那个串口调试助手发送的

数据为字符串 123456

实际传输是按照ASCii码表传输的对应的16进制

实际上buff数组

buff[0] = 49 = 0x31

执行 string str = Encoding.Default.GetString(buff); 以后

str = 0 (字符串0)

所以接收显示为:123456

当COM1选择16进制传输的时候

假设传输的是0x01 0x02 0x03 0x04 0x05 0x06

COM1实际发送也是:0x01 0x02 0x03 0x04 0x05 0x06

不过ASCII码表中显示的字符是乱码

所以咱们需要另外添加转换程序

程序如下:

        /// <字节数组转16进制字符串>          /// <param name="bytes"></param>          /// <returns> String 16进制显示形式</returns>          public static string byteToHexStr(byte[] bytes)          {              string returnStr = "";              try              {                  if (bytes != null)                  {                      for (int i = 0; i < bytes.Length; i++)                      {                          returnStr += bytes[i].ToString("X2");                          returnStr += " ";//两个16进制用空格隔开,方便看数据                      }                  }                  return returnStr;              }              catch (Exception)              {                  return returnStr;              }          }

实际上就一句话:

bytes[i].ToString("X2");  

如果变量是 0x01

则经过函数以后会返回 "01" ,字符串形式

10.如果用户选择16进制,则接收的数据按照16进制显示

        private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)          {              int len = serialPort1.BytesToRead;//获取可以读取的字节数              byte[] buff = new byte[len];//创建缓存数据数组              serialPort1.Read(buff, 0, len);//把数据读取到buff数组                Invoke((new Action(() =>{//C# 3.0以后代替委托的新方法                  if (checkBox1.Checked){//16进制显示                      textBox1.AppendText(byteToHexStr(buff));                  }                  else{                      textBox1.AppendText(Encoding.Default.GetString(buff));//对话框追加显示数据                  }              })));          }            /// <字节数组转16进制字符串>          /// <param name="bytes"></param>          /// <returns> String 16进制显示形式</returns>          public static string byteToHexStr(byte[] bytes)          {              string returnStr = "";              try{                  if (bytes != null){                      for (int i = 0; i < bytes.Length; i++){                          returnStr += bytes[i].ToString("X2");                          returnStr += " ";//两个16进制用空格隔开,方便看数据                      }                  }                  return returnStr;              }              catch (Exception){                  return returnStr;              }          }

11.测试

12.双击清除接收按钮,生成按钮点击事件

写上 textBox1.Clear(); //清除接收对话框显示的数据

串口发送数据

1.页面布局如下:

2.双击点击发送按钮,生成按钮点击事件

3.事件函数中,程序如下

            String Str = textBox2.Text.ToString();//获取发送文本框里面的数据              try              {                  if (Str.Length > 0)                  {                      serialPort1.Write(Str);//串口发送数据                  }              }              catch (Exception){ }

4.测试发送数据

5.发送16进制数据说明

首先需要明确

假设文本框里面填写的是:01 02 03 04 05 06

Str获取的是01 02 03 04 05 06  是字符串

咱所希望的是把01转为0x01

02转为0x02

.

.

.

然后发送

首先先说思路

默认把文本框每隔两个字符作为一个16进制数

假设文本框中是

010203040506   (偶数个数据)

则01 ,02 ,03 ,04 ,05 ,06 分别作为16进制

如果文本框中的字符个数是奇数个

1115268

则默认先把前面每隔两个作为一个16进制数

最后一个数前面补零

0x11,0x15,0x26,0x08

封装的解析转换程序如下:

        /// <字符串转16进制格式,不够自动前面补零>          ///          /// </summary>          /// <param name="hexString"></param>          /// <returns></returns>          private static byte[] strToToHexByte(String hexString)          {              int i;              hexString = hexString.Replace(" ", "");//清除空格              if ((hexString.Length % 2) != 0)//奇数个              {                  byte[] returnBytes = new byte[(hexString.Length + 1) / 2];                  try                  {                      for (i = 0; i < (hexString.Length - 1) / 2; i++)                      {                          returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);                      }                      returnBytes[returnBytes.Length - 1] = Convert.ToByte(hexString.Substring(hexString.Length - 1, 1).PadLeft(2, '0'), 16);                  }                  catch                  {                      MessageBox.Show("含有非16进制字符", "提示");                      return null;                  }                  return returnBytes;              }              else              {                  byte[] returnBytes = new byte[(hexString.Length) / 2];                  try                  {                      for (i = 0; i < returnBytes.Length; i++)                      {                          returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);                      }                  }                  catch                  {                      MessageBox.Show("含有非16进制字符", "提示");                      return null;                  }                  return returnBytes;              }          }

6.完善发送16进制程序

        private void button3_Click(object sender, EventArgs e)          {              String Str = textBox2.Text.ToString();//获取发送文本框里面的数据              try              {                  if (Str.Length > 0)                  {                      if (checkBox2.Checked)//16进制发送                      {                          byte[] byt = strToToHexByte(Str);                          serialPort1.Write(byt, 0, byt.Length);                      }                      else                      {                          serialPort1.Write(Str);//串口发送数据                      }                  }              }              catch (Exception){ }          }              /// <字符串转16进制格式,不够自动前面补零>          ///          /// </summary>          /// <param name="hexString"></param>          /// <returns></returns>          private static byte[] strToToHexByte(String hexString)          {              int i;              hexString = hexString.Replace(" ", "");//清除空格              if ((hexString.Length % 2) != 0)//奇数个              {                  byte[] returnBytes = new byte[(hexString.Length + 1) / 2];                  try                  {                      for (i = 0; i < (hexString.Length - 1) / 2; i++)                      {                          returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);                      }                      returnBytes[returnBytes.Length - 1] = Convert.ToByte(hexString.Substring(hexString.Length - 1, 1).PadLeft(2, '0'), 16);                  }                  catch                  {                      MessageBox.Show("含有非16进制字符", "提示");                      return null;                  }                  return returnBytes;              }              else              {                  byte[] returnBytes = new byte[(hexString.Length) / 2];                  try                  {                      for (i = 0; i < returnBytes.Length; i++)                      {                          returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);                      }                  }                  catch                  {                      MessageBox.Show("含有非16进制字符", "提示");                      return null;                  }                  return returnBytes;              }          }

7.测试

8.双击 清除发送 按钮,生成按钮点击事件

textBox2.Clear();//清除发送文本框里面的内容

提醒

提醒

提醒

C#的串口中断回调函数也是不定个数的进入

假设另一个串口发送的数据为 123456

int len = serialPort1.BytesToRead;//获取可以读取的字节数 byte[] buff = new byte[len];//创建缓存数据数组

serialPort1.Read(buff, 0, len);//把数据读取到buff数组

len 可能等于 2

则存入buff 的数据为 

buff [0] = '1'

buff [1] = '2'

然后接着又进来这个函数

len 可能等于 4

则存入buff 的数据为 

buff [0] = '3'

buff [1] = '4'

buff [2] = '5'

buff [3] = '6'

如若想接收到一条完整的数据以后再进行处理

可参考: https://www.cnblogs.com/yangfengwu/p/11669373.html

增加一个定时器,用于空闲时间检测