用C++Builder实现Windows2000的Messenger

用C++Builder实现Windows2000的Messenger,第1张

用C++Builder实现Windows2000的Messenger,第2张

本文详细介绍了用C++Builder实现Messenger的方法,其中使用了以下技术:

1.防止接口死锁的多线程排序技术。

2.网络枚举用于枚举在线网络用户。

3.Unicode转换函数用于从AnsiString转换为Unicode。

4.使用简单的不规则窗口技术。

5.自动安装,将自己添加到系统启动中。

6.系统托盘技术。

编程方法:

1.一些添加到窗体的控件:tlistview,treeview,tmemo,菜单,托盘,按钮和状态栏。

2.对于每个控件,只需添加本文中编写的代码。

3.下面是发送函数

void _ _ fast call tform main::button send click(to object * Sender)
{
正在发送消息,用户名,FromName
TListItem * ListItem;
if(CheckBoxAnony-> Checked)from name = EditAnony-> Text;
else from name = " ";
Message = memo 1-> Text;
if(Message = = " "){ show Message("请输入要发送的单词");返回;}
if(!listview 1-> sel count){
if(treeview 1-> Selected = = NULL){ show message(" Please select destnation ");返回;}
UserName = treeview 1-> Selected-> Text;
if(treeview 1-> Selected-> Level = = 1)UserName = UserName+" * ";
new NetMessageSend(false,UserName,FromName,Message,CheckBoxGetRet-> Checked);
退货;
}
ListItem = listview 1-> Selected;
UserName = ListItem-> Caption;
if(treeview 1-> Selected-> Level = = 0)UserName+= " * ";
while(UserName[1]= = ' \ \ ')
UserName = UserName。子串(2,用户名。长度()-1);
new NetMessageSend(false,UserName,FromName,Message,CheckBoxGetRet-> Checked);
for(int I = 1;iSelCounti++){
ListItem = listview 1-> get next item(ListItem,sdAll,titem States()< UserName = ListItem-> Caption;
if(treeview 1-> Selected-> Level = = 0)UserName+= " * ";
while(UserName[1]= = ' \ \ ')UserName =用户名。子串(2,用户名。长度()-1);
new NetMessageSend(false,UserName,FromName,Message,CheckBoxGetRet-> Checked);
}
}


下面的网络节点枚举函数是一个线程。


bool _ _ fastcall EnumNetResource::GetNetRes(
TTreeNodes * Nodes,TTreeNode * Node,NETRESOURCE *pNetResource,int Depth)
{
# define enum bufsize(16 * 1024)
# define enum count 10
net resource buff[1024];
注册用户名;
if(已终止)返回false
if(Nodes==NULL)返回false
if(Depth==0)返回true
处理hEnum
bool reValue = true;
NETRESOURCE *pNetRes,NetRes。
if(WNetOpenEnum(RESOURCE _ global net,RESOURCETYPE_ANY,0,
pNetResource,&hEnum)!=NO_ERROR)返回false
DWORD ECount = enum count;
DWORD ESize = enum bufsize;
DWORD错误号;
do {
Error _ num = WNetEnumResource(hEnum,&ECount,buff,& ESize);
if (ESize>ENUMBUFSIZE)返回false
if(Error _ num = = NO _ Error){
for(DWORD num = 0;num if(终止)返回false
pnet RES = & buff[num];
file://if(Node)Node-> image index = 1-Depth;
UserName = ansi string(pNetRes-> lpRemoteName);
while(UserName[1]= = ' \ \ ')
UserName = UserName。子串(2,用户名。长度()-1);
TTreeNode * tNode = Nodes-> AddChild(Node,UserName);
if(tNode)
switch(pNetRes-> dwType){
case resource type _ ANY:
switch(tNode-> Level){
case 0:tNode-> image index = 1;打破;
情况一:
情况二:tNode-> image index = 2;打破;
}
break;
case resource type _ DISK:tNode-> image index = 3;打破;
case resource type _ PRINT:tNode-> image index = 4;打破;
}
if(pNetRes-> dw display type!= resource display type _ SHARE){
if(!GetNetRes(Nodes,tNode,pNetRes,Depth-1))reValue = false;
}
}
}
} while(ECount = = enum count);
if (Error_num!= ERROR _ NO _ MORE _ ITEMS & & ERROR _ num!=NO_ERROR)重估=假;
WNetCloseEnum(hEnum);
return重估;
}

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 用C++Builder实现Windows2000的Messenger

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情