本文講述了如何用C++Builder實現Messenger的詳細方法,其中使用了如下技術:
1. 多線程序技術,防止界面出現死鎖。
2. 使用了枚舉來枚舉在線的網絡用戶。
3. 使用了Unicode的轉換函數進從AnsiString到Unicode的轉換。
4. 使用了簡單的不規則窗口的技術。
5. 自動安裝,將自己加入系統起動中。
6. 系統托盤技術。
編程方法:
1. 如圖所示在窗體上加入的有的控件:TListView,TTreeView,TMemo,菜單、托盤、按鈕、狀態欄
2. 針對各控件按本文所寫加入代碼即可。
3. 以下是發送函數
void __fastcall TFormMain::ButtonSendClick(TObject *Sender)
{
AnsiString Message,UserName,FromName;
TListItem *ListItem;
if(CheckBoxAnony->Checked)FromName=EditAnony->Text;
else FromName="";
Message=Memo1->Text;
if(Message==""){ShowMessage("Please Enter words to send");return;}
if(!ListView1->SelCount){
if(TreeView1->Selected==NULL){ShowMessage("Please select destnation");return;}
UserName=TreeView1->Selected->Text;
if(TreeView1->Selected->Level==1)UserName=UserName+"*";
new NetMessageSend(false,UserName,FromName,Message,CheckBoxGetRet->Checked);
return;
}
ListItem=ListView1->Selected;
UserName=ListItem->Caption;
if(TreeView1->Selected->Level==0)UserName+="*";
while(UserName[1]=='\\')UserName=UserName.SubString(2,UserName.Length()-1);
new NetMessageSend(false,UserName,FromName,Message,CheckBoxGetRet->Checked);
for(int i=1;iSelCount;i++){
ListItem=ListView1->GetNextItem(ListItem,sdAll,TItemStates()< UserName=ListItem->Caption;
if(TreeView1->Selected->Level==0)UserName+="*";
while(UserName[1]=='\\')UserName=UserName.SubString(2,UserName.Length()-1);
new NetMessageSend(false,UserName,FromName,Message,CheckBoxGetRet->Checked);
}
}
以下是網絡結點枚舉函數,是個線程