Free Hex Control
希望大家表骂偶假洋鬼子,板砖?偶闪!
/*****************************************************************************
/
/ This software is published under the GPL 2.
/ For the detail about GPL 2, look into http://www.gnu.org
/
/ author: sproll.gangaro
/ mail: sproll@163.com
/
/ Hi every body, thanks for choosing Free Hex Control!
/
/ Errrrr...Actually, I hesitate to release the source code of this control,
/ Because when I checked after completion, I found that it's really ugly! Putting all
/ graphic codes in the CDraw class is the worst idea, and this makes re-drawing
/ specific area difficult, so I lazily redraw almost the whole control whenever
/ it needs. This results in the slowness (I suggest you can use the control in data
/ display, ^_^). In next version, I will optimize draw efficiency,
/ making range class to express character and other elements.
/ And the ascii-bar will support multi-character language,
/ for example: Chinese, etc.
/
/ Here are some description of some properties:
/ HScroll: extend control by horizontal scroll bar
/ AddressStart: the first byte's offset
/ AddressStyle: style of address, 0, HEX; 1, Dec
/ AddressNumber:number of address data in characters
/ ShowData: used in debugging, don't use it
/ SolidSelectionDisplay:
/ selected data's background is solid or not
/ BytesPerLine: if HScroll is true, how many bytes per line,
/ if HScroll is false, this depends on control's width
/ Group: separate data into groups or not in a line
/ GroupSize: if Group is true, how many bytes in a group
/ ShowCaret: high light the selected byte or not
/ ShowAddress: show address bar or not
/ ShowAscii: show ascii bar or not
/ ShowColumn: show column bar or not
/ AddressTextColor:
/ ColumnTextColor:
/ TextColor:
/ AsciiTextColor:
/ text color in each bar
/
*****************************************************************************/
socket演示程序
过去做网络方面的东东的时候,为了试验一些SOCKET API,编写了一个演示的DEMO,可能有朋友用得到,仅在此抛砖引玉。
这个测试工程中对Socket封装的类的文件:
Soc.h
Soc.cpp
网络传输封装类
SocMesWnd
异步网络传输时,接收网络消息的窗体
该DEMO演示了以下技术:
1、CTCPServe、CTCPClient
Tcp异步传输,含TCP客户端与TCP服务端
2、CUDPSocket
Udp异步传输 & Udp组播
3、CUDPSock5
Udp Sock5传输
4、CFtp
Ftp传输
设计说明:
每个传输类都有以下两个方法
void SetSocketNotify( HWND hWndMsg, UINT unMsg ){m_hWndMsg = hWndMsg; m_nMsg = unMsg;};
void SetSocketNotify(SOCKET_NOTIFY pFuncMes){m_pFuncMes = pFuncMes;};
这两个函数用来设置发生socket事件后的外部响应方式,一种是通过窗口消息进行响应,一种是通过回调函数进行响应。这两种方式都是阻塞的。
当发生网络事件后,两种方式都会收到
WPARAM wParam, LPARAM lParam
这两个参数,其中wParam是NET_MSG枚举,表示网络事件,lParam是附加数据,由SetExtData函数预先设置好。
void SetBufferLen( int nLen );
该函数是设置当socket收到数据后,接收数据的缓冲区的大小的。当收到数据事件发生时,首先会将数据接收在缓冲区中,然后向发部发送消息或者调用回调函数,外部模块可以在响应函数中调用类的
void GetData( const BYTE ** ppucBuf, int &nLen )
来获取接收到的数据。
对于 CTCPServe这个类,有些使用上的注意点:会在收到远程连接请求后自动连接客户端,当远程连接断开时,也会自动删除连接该远程socket的子socket。CTCPServe由于每次接受连接请求后,建立了新的子socket去连接远程客户,所以它有些方法需要输入子通道的标识来完成某些功能。该标识会在接受连接请求后通过响应消息或者函数发送给外部。
比如说:
int GetRemoteIP( int nID, CString& strPeerAddress, int &nPeerPort );
这个函数用来获取远程连接的客户端的IP和端口,参数中就需要指定是哪个远程客户。
UDP传输类在接收数据的时候会将远程发送数据的主机IP和地址传送给外部。
CUDPSock5在实际使用中发现与sock5服务器的连接不是很稳定,大概是我没能很好地解析sock5协议的关系。
这个DEMO在后期添加了CFtp这个类,处理FTP下载。之所以未使用WinInet,因为它有一个MS确认的BUG:超时设置无效。这个FTP类演示了FTP协议的解析过程,完成常用的FTP功能(除FTP上传外,容我有空再做,^_^)。它也是异步的。这个类支持PORT和PASSIVE两种模式的FTP,
socket演示程序
过去做网络方面的东东的时候,为了试验一些SOCKET API,编写了一个演示的DEMO,可能有朋友用得到,仅在此抛砖引玉。
这个测试工程中对Socket封装的类的文件:
Soc.h
Soc.cpp
网络传输封装类
SocMesWnd
异步网络传输时,接收网络消息的窗体
该DEMO演示了以下技术:
1、CTCPServe、CTCPClient
Tcp异步传输,含TCP客户端与TCP服务端
2、CUDPSocket
Udp异步传输 & Udp组播
3、CUDPSock5
Udp Sock5传输
4、CFtp
Ftp传输
设计说明:
每个传输类都有以下两个方法
void SetSocketNotify( HWND hWndMsg, UINT unMsg ){m_hWndMsg = hWndMsg; m_nMsg = unMsg;};
void SetSocketNotify(SOCKET_NOTIFY pFuncMes){m_pFuncMes = pFuncMes;};
这两个函数用来设置发生socket事件后的外部响应方式,一种是通过窗口消息进行响应,一种是通过回调函数进行响应。这两种方式都是阻塞的。
当发生网络事件后,两种方式都会收到
WPARAM wParam, LPARAM lParam
这两个参数,其中wParam是NET_MSG枚举,表示网络事件,lParam是附加数据,由SetExtData函数预先设置好。
void SetBufferLen( int nLen );
该函数是设置当socket收到数据后,接收数据的缓冲区的大小的。当收到数据事件发生时,首先会将数据接收在缓冲区中,然后向发部发送消息或者调用回调函数,外部模块可以在响应函数中调用类的
void GetData( const BYTE ** ppucBuf, int &nLen )
来获取接收到的数据。
对于 CTCPServe这个类,有些使用上的注意点:会在收到远程连接请求后自动连接客户端,当远程连接断开时,也会自动删除连接该远程socket的子socket。CTCPServe由于每次接受连接请求后,建立了新的子socket去连接远程客户,所以它有些方法需要输入子通道的标识来完成某些功能。该标识会在接受连接请求后通过响应消息或者函数发送给外部。
比如说:
int GetRemoteIP( int nID, CString& strPeerAddress, int &nPeerPort );
这个函数用来获取远程连接的客户端的IP和端口,参数中就需要指定是哪个远程客户。
UDP传输类在接收数据的时候会将远程发送数据的主机IP和地址传送给外部。
CUDPSock5在实际使用中发现与sock5服务器的连接不是很稳定,大概是我没能很好地解析sock5协议的关系。
这个DEMO在后期添加了CFtp这个类,处理FTP下载。之所以未使用WinInet,因为它有一个MS确认的BUG:超时设置无效。这个FTP类演示了FTP协议的解析过程,完成常用的FTP功能(除FTP上传外,容我有空再做,^_^)。它也是异步的。这个类支持PORT和PASSIVE两种模式的FTP,
VC版本改写的变色龙按钮
乌拉圭软件作者gonchuki开发的变色龙按钮非常漂亮,也非常著名。源代码公开的版本最新为2.0.6B,下载地址为:http: //www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=37471&lngWId=1
由于该版本是VB开发的,在某些其它的IDE中有些属性不支持,比如说在VC中不支持ToolTipText。我将它改写为一个VC版本。但是该版本比2.0.6B有点删减,比如说gonchuki支持的按钮快捷键我改写的不支持。
另外,我新加了一种Graphic按钮类型,该类型按钮显示4个图片:通常状态图片、按下图片、鼠标移动在按钮上时的图片、Disable时图片,并且在这种类型下,没有按钮边框,可以让开发人员轻松灵活地制作各种按钮效果。
BLOG好像不能上传附件,我只好将接口定义文件及控件的H、CPP文件列出如下(我使用VC6创建的是MFC控件工程,工程名称是Chameleon)
(最后:重发布请注明原作者gonchuki):
PS:其实,这个改写的版本源代码我05-9月就已经发在优快云上了,直到今天才发现,原来优快云上还有个发软件的地方啊!(我果然已经老年痴呆了啊!)这个控件很多地方还改得不够完善,比如说,控件属性的枚举就没做,还有Transparent风格的按钮类型也没做。因为是改写别人的东东,所以只是想拿出来抛砖引玉,没打算继续开发下去,所以大家板砖千万轻点拍啊!^_^
VC版本改写的变色龙按钮
乌拉圭软件作者gonchuki开发的变色龙按钮非常漂亮,也非常著名。源代码公开的版本最新为2.0.6B,下载地址为:http: //www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=37471&lngWId=1
由于该版本是VB开发的,在某些其它的IDE中有些属性不支持,比如说在VC中不支持ToolTipText。我将它改写为一个VC版本。但是该版本比2.0.6B有点删减,比如说gonchuki支持的按钮快捷键我改写的不支持。
另外,我新加了一种Graphic按钮类型,该类型按钮显示4个图片:通常状态图片、按下图片、鼠标移动在按钮上时的图片、Disable时图片,并且在这种类型下,没有按钮边框,可以让开发人员轻松灵活地制作各种按钮效果。
BLOG好像不能上传附件,我只好将接口定义文件及控件的H、CPP文件列出如下(我使用VC6创建的是MFC控件工程,工程名称是Chameleon)
(最后:重发布请注明原作者gonchuki):
PS:其实,这个改写的版本源代码我05-9月就已经发在优快云上了,直到今天才发现,原来优快云上还有个发软件的地方啊!(我果然已经老年痴呆了啊!)这个控件很多地方还改得不够完善,比如说,控件属性的枚举就没做,还有Transparent风格的按钮类型也没做。因为是改写别人的东东,所以只是想拿出来抛砖引玉,没打算继续开发下去,所以大家板砖千万轻点拍啊!^_^