这节教给用户使用C#做一个串口调试助手,
用户可在此基础上依据自己的需求做修改
本人的其它关于串口通信的上位机也会在此基础上做修改,
请用户认真学习本节.
1.拖拽上来一个 GroupBox
2.重新命名
3.拖拽上去6个Label,位置和显示如下
设置Button的显示改为打开串口
-----------------------------------------------------------------------------------------------以上需要嵌入视频演示
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里面的数据
无
奇校验
偶校验
----------------------------------以上需要录制演示视频
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里面显示当前电脑上可用串口号
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数组
buff0 = 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;
}
}
实际上就一句话:
bytesi.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://cloud.tencent.com/developer/article/1520554
增加一个定时器,用于空闲时间检测