本文整理汇总了C++中CKnownFile类的典型用法代码示例。如果您正苦于以下问题:C++ CKnownFile类的具体用法?C++ CKnownFile怎么用?C++ CKnownFile使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了CKnownFile类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: switch
void CQueueListCtrl::OnGetDispInfo(NMHDR *pNMHDR, LRESULT *pResult)
{
NMLVDISPINFO *pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR);
if (g_App.m_pMDlg->IsRunning())
{
// Although we have an owner drawn listview control we store the text for the primary item in the listview, to be
// capable of quick searching those items via the keyboard. Because our listview items may change their contents,
// we do this via a text callback function. The listview control will send us the LVN_DISPINFO notification if
// it needs to know the contents of the primary item.
//
// But, the listview control sends this notification all the time, even if we do not search for an item. At least
// this notification is only sent for the visible items and not for all items in the list. Though, because this
// function is invoked *very* often, no *NOT* put any time consuming code here in.
if ((pDispInfo->item.mask & LVIF_TEXT) != 0)
{
// Check for own search request, the rest of the flood comes from list control
// and isn't used as list is drawn by us
if (pDispInfo->item.cchTextMax == ML_SEARCH_SZ)
{
CUpDownClient *pClient = reinterpret_cast<CUpDownClient*>(pDispInfo->item.lParam);
if (pClient != NULL)
{
switch (pDispInfo->item.iSubItem)
{
case QLCOL_USERNAME:
_tcsncpy(pDispInfo->item.pszText, pClient->GetUserName(), pDispInfo->item.cchTextMax);
pDispInfo->item.pszText[pDispInfo->item.cchTextMax - 1] = _T('\0');
break;
case QLCOL_COUNTRY:
_tcsncpy(pDispInfo->item.pszText, pClient->GetCountryName(), pDispInfo->item.cchTextMax);
pDispInfo->item.pszText[pDispInfo->item.cchTextMax - 1] = _T('\0');
break;
case QLCOL_FILENAME:
{
CKnownFile *pKnownFile = g_App.m_pSharedFilesList->GetFileByID(pClient->m_reqFileHash);
if (pKnownFile != NULL)
{
_tcsncpy(pDispInfo->item.pszText, pKnownFile->GetFileName(), pDispInfo->item.cchTextMax);
pDispInfo->item.pszText[pDispInfo->item.cchTextMax - 1] = _T('\0');
break;
}
}
default:
pDispInfo->item.pszText[0] = _T('\0');
break;
}
}
}
else if (pDispInfo->item.cchTextMax != 0)
pDispInfo->item.pszText[0] = _T('\0');
}
}
*pResult = 0;
}
示例2: ProcessPreviewRequest
void CMMServer::ProcessPreviewRequest(CMMData* data, CMMSocket* sender){
uint8 byFileType = data->ReadByte();
uint8 byFileIndex = data->ReadByte();
uint16 nDisplayWidth = data->ReadShort();
uint8 nNumber = data->ReadByte();
CKnownFile* knownfile = NULL;
bool bError = false;
if (byFileType == MMT_PARTFILFE){
if (byFileIndex >= m_SentFileList.GetSize()
|| !theApp.downloadqueue->IsPartFile(m_SentFileList[byFileIndex]))
{
bError = true;
}
else
knownfile = m_SentFileList[byFileIndex];
}
else if (byFileType == MMT_FINISHEDFILE){
if (byFileIndex >= m_SentFinishedList.GetSize()
|| !theApp.knownfiles->IsKnownFile(m_SentFinishedList[byFileIndex]))
{
bError = true;
}
else
knownfile = m_SentFinishedList[byFileIndex];
}
if (!bError){
if (h_timer != 0)
bError = true;
else{
h_timer = SetTimer(0,0,20000,CommandTimer);
if (!h_timer){
bError = true;
}
else{
if (nDisplayWidth > 140)
nDisplayWidth = 140;
m_byPendingCommand = MMT_PREVIEW;
m_pPendingCommandSocket = sender;
if (!knownfile->GrabImage(1,(nNumber+1)*50.0,true,nDisplayWidth,this))
PreviewFinished(NULL,0);
}
}
}
if (bError){
CMMPacket* packet = new CMMPacket(MMP_GENERALERROR);
sender->SendPacket(packet);
ASSERT ( false );
return;
}
}
示例3: Append
bool CKnownFileList::Append(CKnownFile *Record, bool afterHashing)
{
if (Record->GetFileSize() > 0) {
const CMD4Hash& tkey = Record->GetFileHash();
CKnownFileMap::iterator it = m_knownFileMap.find(tkey);
if (it == m_knownFileMap.end()) {
m_knownFileMap[tkey] = Record;
return true;
} else {
CKnownFile *existing = it->second;
if (KnownFileMatches(Record, existing->GetFileName(), existing->GetLastChangeDatetime(), existing->GetFileSize())) {
// The file is already on the list, ignore it.
AddDebugLogLineN(logKnownFiles, CFormat(wxT("%s is already on the list")) % Record->GetFileName().GetPrintable());
return false;
} else if (IsOnDuplicates(Record->GetFileName(), Record->GetLastChangeDatetime(), Record->GetFileSize())) {
// The file is on the duplicates list, ignore it.
// Should not happen, at least not after hashing. Or why did it get hashed in the first place then?
AddDebugLogLineN(logKnownFiles, CFormat(wxT("%s is on the duplicates list")) % Record->GetFileName().GetPrintable());
return false;
} else {
if (afterHashing && existing->GetFileSize() == Record->GetFileSize()) {
// We just hashed a "new" shared file and find it's already known under a different name or date.
// Guess what - it was probably renamed or touched.
// So copy over all properties from the existing known file and just keep name/date.
time_t newDate = Record->GetLastChangeDatetime();
CPath newName = Record->GetFileName();
CMemFile f;
existing->WriteToFile(&f);
f.Reset();
Record->LoadFromFile(&f);
Record->SetLastChangeDatetime(newDate);
Record->SetFileName(newName);
}
// The file is a duplicated hash. Add THE OLD ONE to the duplicates list.
// (This is used when reading the known file list where the duplicates are stored in front.)
m_duplicateFileList.push_back(existing);
if (theApp->sharedfiles) {
// Removing the old kad keywords created with the old filename
theApp->sharedfiles->RemoveKeywords(existing);
}
m_knownFileMap[tkey] = Record;
return true;
}
}
} else {
AddDebugLogLineN(logGeneral,
CFormat(wxT("%s is 0-size, not added")) %
Record->GetFileName());
return false;
}
}
示例4: CheckForTimeOver
bool CUploadQueue::CheckForTimeOver(CUpDownClient* client){
//If we have nobody in the queue, do NOT remove the current uploads..
//This will save some bandwidth and some unneeded swapping from upload/queue/upload..
if ( waitinglist.IsEmpty() || client->GetFriendSlot() )
return false;
if(client->HasCollectionUploadSlot()){
CKnownFile* pDownloadingFile = theApp.sharedfiles->GetFileByID(client->requpfileid);
if(pDownloadingFile == NULL)
return true;
if (CCollection::HasCollectionExtention(pDownloadingFile->GetFileName()) && pDownloadingFile->GetFileSize() < (uint64)MAXPRIORITYCOLL_SIZE)
return false;
else{
if (thePrefs.GetLogUlDlEvents())
AddDebugLogLine(DLP_HIGH, false, _T("%s: Upload session ended - client with Collection Slot tried to request blocks from another file"), client->GetUserName());
return true;
}
}
if (!thePrefs.TransferFullChunks()){
if( client->GetUpStartTimeDelay() > SESSIONMAXTIME){ // Try to keep the clients from downloading for ever
if (thePrefs.GetLogUlDlEvents())
AddDebugLogLine(DLP_LOW, false, _T("%s: Upload session ended due to max time %s."), client->GetUserName(), CastSecondsToHM(SESSIONMAXTIME/1000));
return true;
}
// Cache current client score
const uint32 score = client->GetScore(true, true);
// Check if another client has a bigger score
if (score < GetMaxClientScore() && m_dwRemovedClientByScore < GetTickCount()) {
if (thePrefs.GetLogUlDlEvents())
AddDebugLogLine(DLP_VERYLOW, false, _T("%s: Upload session ended due to score."), client->GetUserName());
//Set timer to prevent to many uploadslot getting kick do to score.
//Upload slots are delayed by a min of 1 sec and the maxscore is reset every 5 sec.
//So, I choose 6 secs to make sure the maxscore it updated before doing this again.
m_dwRemovedClientByScore = GetTickCount()+SEC2MS(6);
return true;
}
}
else{
// Allow the client to download a specified amount per session
if( client->GetQueueSessionPayloadUp() > SESSIONMAXTRANS ){
if (thePrefs.GetLogUlDlEvents())
AddDebugLogLine(DLP_DEFAULT, false, _T("%s: Upload session ended due to max transferred amount. %s"), client->GetUserName(), CastItoXBytes(SESSIONMAXTRANS, false, false));
return true;
}
}
return false;
}
示例5: DeleteUpdate
BOOL CUpdateInfo::DeleteUpdate(CString hash)
{
uchar UpdateHash[16];
CPartFile* pPartFile;
if(!strmd4(hash,UpdateHash))
{
return FALSE;
}
CKnownFile* file = CGlobalVariable::sharedfiles->GetFileByID(UpdateHash);
try
{
//共享列表中是否有
if(file)
{
if(file->IsPartFile())
{
//共享列表有,但未下载完,移除
pPartFile = DYNAMIC_DOWNCAST(CPartFile,file);
if( pPartFile )
{
pPartFile->DeleteFile();
}
}
else
{
//共享列表有,已经下载完成未安装,移除
DeleteFile(file->GetFilePath());
theApp.emuledlg->sharedfileswnd->sharedfilesctrl.RemoveFile(file);
CGlobalVariable::sharedfiles->RemoveFile(file);
}
}
if ((pPartFile = CGlobalVariable::downloadqueue->GetFileByID(UpdateHash)) != NULL)
{
//共享列表没有,但未下载完,移除
pPartFile->DeleteFile();
}
}
catch (CException* e)
{
e->Delete();
return FALSE;
}
return FALSE;
}
示例6: AddDebugLogLine
bool CUploadQueue::RemoveFromUploadQueue(CUpDownClient* client, LPCTSTR pszReason, bool updatewindow, bool earlyabort){
bool result = false;
uint32 slotCounter = 1;
for (POSITION pos = uploadinglist.GetHeadPosition();pos != 0;){
POSITION curPos = pos;
CUpDownClient* curClient = uploadinglist.GetNext(pos);
if (client == curClient){
if (updatewindow)
theApp.emuledlg->transferwnd->uploadlistctrl.RemoveClient(client);
if (thePrefs.GetLogUlDlEvents())
AddDebugLogLine(DLP_DEFAULT, true,_T("Removing client from upload list: %s Client: %s Transferred: %s SessionUp: %s QueueSessionPayload: %s In buffer: %s Req blocks: %i File: %s"), pszReason==NULL ? _T("") : pszReason, client->DbgGetClientInfo(), CastSecondsToHM( client->GetUpStartTimeDelay()/1000), CastItoXBytes(client->GetSessionUp(), false, false), CastItoXBytes(client->GetQueueSessionPayloadUp(), false, false), CastItoXBytes(client->GetPayloadInBuffer()), client->GetNumberOfRequestedBlocksInQueue(), (theApp.sharedfiles->GetFileByID(client->GetUploadFileID())?theApp.sharedfiles->GetFileByID(client->GetUploadFileID())->GetFileName():_T("")));
client->m_bAddNextConnect = false;
uploadinglist.RemoveAt(curPos);
bool removed = theApp.uploadBandwidthThrottler->RemoveFromStandardList(client->socket);
bool pcRemoved = theApp.uploadBandwidthThrottler->RemoveFromStandardList((CClientReqSocket*)client->m_pPCUpSocket);
(void)removed;
(void)pcRemoved;
//if(thePrefs.GetLogUlDlEvents() && !(removed || pcRemoved)) {
// AddDebugLogLine(false, _T("UploadQueue: Didn't find socket to delete. Adress: 0x%x"), client->socket);
//}
if(client->GetSessionUp() > 0) {
++successfullupcount;
totaluploadtime += client->GetUpStartTimeDelay()/1000;
} else if(earlyabort == false)
++failedupcount;
CKnownFile* requestedFile = theApp.sharedfiles->GetFileByID(client->GetUploadFileID());
if(requestedFile != NULL) {
requestedFile->UpdatePartsInfo();
}
theApp.clientlist->AddTrackClient(client); // Keep track of this client
client->SetUploadState(US_NONE);
client->ClearUploadBlockRequests();
client->SetCollectionUploadSlot(false);
m_iHighestNumberOfFullyActivatedSlotsSinceLastCall = 0;
result = true;
} else {
curClient->SetSlotNumber(slotCounter);
slotCounter++;
}
}
return result;
}
示例7: WXUNUSED
void CSharedFilesCtrl::OnRename( wxCommandEvent& WXUNUSED(event) )
{
int item = GetNextItem( -1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED );
if ( item != -1 ) {
CKnownFile* file = (CKnownFile*)GetItemData(item);
wxString strNewName = ::wxGetTextFromUser(
_("Enter new name for this file:"),
_("File rename"), file->GetFileName().GetPrintable());
CPath newName = CPath(strNewName);
if (newName.IsOk() && (newName != file->GetFileName())) {
theApp->sharedfiles->RenameFile(file, newName);
}
}
}
示例8: WXUNUSED
void CSharedFilesCtrl::OnAddCollection( wxCommandEvent& WXUNUSED(evt) )
{
int item = GetNextItem( -1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED );
if (item != -1) {
CKnownFile *file = reinterpret_cast<CKnownFile*>(GetItemData(item));
wxString CollectionFile = file->GetFilePath().JoinPaths(file->GetFileName()).GetRaw();
CMuleCollection my_collection;
if (my_collection.Open( (std::string)CollectionFile.mb_str() )) {
//#warning This is probably not working on Unicode
for (size_t e = 0; e < my_collection.size(); ++e) {
theApp->downloadqueue->AddLink(wxString(my_collection[e].c_str(), wxConvUTF8));
}
}
}
}
示例9: GetDlgItem
BOOL CCommentDialog::OnApply()
{
if (!m_bDataChanged)
{
CString strComment;
GetDlgItem(IDC_CMT_TEXT)->GetWindowText(strComment);
int iRating = m_ratebox.GetCurSel();
for (int i = 0; i < m_paFiles->GetSize(); i++)
{
CKnownFile* file = STATIC_DOWNCAST(CKnownFile, (*m_paFiles)[i]);
if (!strComment.IsEmpty() || !m_bMergedComment)
file->SetFileComment(strComment);
if (iRating != -1)
file->SetFileRating(iRating);
}
}
return CResizablePage::OnApply();
}
示例10: ScreenToClient
void CUploadListCtrl::OnLvnGetInfoTip(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLVGETINFOTIP pGetInfoTip = reinterpret_cast<LPNMLVGETINFOTIP>(pNMHDR);
if (pGetInfoTip->iSubItem == 0)
{
LVHITTESTINFO hti = {0};
::GetCursorPos(&hti.pt);
ScreenToClient(&hti.pt);
if (SubItemHitTest(&hti) == -1 || hti.iItem != pGetInfoTip->iItem || hti.iSubItem != 0){
// don' show the default label tip for the main item, if the mouse is not over the main item
if ((pGetInfoTip->dwFlags & LVGIT_UNFOLDED) == 0 && pGetInfoTip->cchTextMax > 0 && pGetInfoTip->pszText[0] != '\0')
pGetInfoTip->pszText[0] = '\0';
return;
}
const CUpDownClient* client = (CUpDownClient*)GetItemData(pGetInfoTip->iItem);
if (client && pGetInfoTip->pszText && pGetInfoTip->cchTextMax > 0)
{
CString info;
CKnownFile* file = theApp.sharedfiles->GetFileByID(client->GetUploadFileID());
// build info text and display it
info.Format(GetResString(IDS_USERINFO), client->GetUserName());
if (file)
{
info += GetResString(IDS_SF_REQUESTED) + _T(" ") + CString(file->GetFileName()) + _T("\n");
CString stat;
stat.Format(GetResString(IDS_FILESTATS_SESSION)+GetResString(IDS_FILESTATS_TOTAL),
file->statistic.GetAccepts(), file->statistic.GetRequests(), CastItoXBytes(file->statistic.GetTransferred(), false, false),
file->statistic.GetAllTimeAccepts(), file->statistic.GetAllTimeRequests(), CastItoXBytes(file->statistic.GetAllTimeTransferred(), false, false) );
info += stat;
}
else
{
info += GetResString(IDS_REQ_UNKNOWNFILE);
}
_tcsncpy(pGetInfoTip->pszText, info, pGetInfoTip->cchTextMax);
pGetInfoTip->pszText[pGetInfoTip->cchTextMax-1] = _T('\0');
}
}
*pResult = 0;
}
示例11: STATIC_DOWNCAST
BOOL CCommentDialog::OnSetActive()
{
if (!CResizablePage::OnSetActive())
return FALSE;
if (m_bDataChanged)
{
int iRating = -1;
m_bMergedComment = false;
CString strComment;
for (int i = 0; i < m_paFiles->GetSize(); i++)
{
CKnownFile* file = STATIC_DOWNCAST(CKnownFile, (*m_paFiles)[i]);
if (i == 0)
{
strComment = file->GetFileComment();
iRating = file->GetFileRating();
}
else
{
if (!m_bMergedComment && strComment.Compare(file->GetFileComment()) != 0)
{
strComment.Empty();
m_bMergedComment = true;
}
if (iRating != -1 && (UINT)iRating != file->GetFileRating())
iRating = -1;
}
}
m_bSelf = true;
SetDlgItemText(IDC_CMT_TEXT, strComment);
((CEdit*)GetDlgItem(IDC_CMT_TEXT))->SetLimitText(MAXFILECOMMENTLEN);
m_ratebox.SetCurSel(iRating);
m_bSelf = false;
m_bDataChanged = false;
RefreshData();
}
return TRUE;
}
示例12: strError
bool CKnownFileList::LoadKnownFiles()
{
CString fullpath = thePrefs.GetMuleDirectory(EMULE_CONFIGDIR);
fullpath.Append(KNOWN_MET_FILENAME);
CSafeBufferedFile file;
CFileException fexp;
if (!file.Open(fullpath,CFile::modeRead|CFile::osSequentialScan|CFile::typeBinary|CFile::shareDenyWrite, &fexp)){
if (fexp.m_cause != CFileException::fileNotFound){
CString strError(_T("Failed to load ") KNOWN_MET_FILENAME _T(" file"));
TCHAR szError[MAX_CFEXP_ERRORMSG];
if (fexp.GetErrorMessage(szError, ARRSIZE(szError))){
strError += _T(" - ");
strError += szError;
}
LogError(LOG_STATUSBAR, _T("%s"), strError);
}
return false;
}
setvbuf(file.m_pStream, NULL, _IOFBF, 16384);
CKnownFile* pRecord = NULL;
try {
uint8 header = file.ReadUInt8();
if (header != MET_HEADER && header != MET_HEADER_I64TAGS){
file.Close();
LogError(LOG_STATUSBAR, GetResString(IDS_ERR_SERVERMET_BAD));
return false;
}
AddDebugLogLine(false, _T("Known.met file version is %u (%s support 64bit tags)"), header, (header == MET_HEADER) ? _T("doesn't") : _T("does"));
UINT RecordsNumber = file.ReadUInt32();
for (UINT i = 0; i < RecordsNumber; i++) {
pRecord = new CKnownFile();
if (!pRecord->LoadFromFile(&file)){
TRACE(_T("*** Failed to load entry %u (name=%s hash=%s size=%I64u parthashs=%u expected parthashs=%u) from known.met\n"), i,
pRecord->GetFileName(), md4str(pRecord->GetFileHash()), pRecord->GetFileSize(), pRecord->GetHashCount(), pRecord->GetED2KPartHashCount());
delete pRecord;
pRecord = NULL;
continue;
}
SafeAddKFile(pRecord);
pRecord = NULL;
}
file.Close();
}
catch(CFileException* error){
if (error->m_cause == CFileException::endOfFile)
LogError(LOG_STATUSBAR, GetResString(IDS_ERR_SERVERMET_BAD));
else{
TCHAR buffer[MAX_CFEXP_ERRORMSG];
error->GetErrorMessage(buffer, ARRSIZE(buffer));
LogError(LOG_STATUSBAR, GetResString(IDS_ERR_SERVERMET_UNKNOWN),buffer);
}
error->Delete();
delete pRecord;
return false;
}
return true;
}
示例13: GetDlgItem
BOOL CCommentDialog::OnApply()
{
if (m_bEnabled && !m_bDataChanged)
{
CString strComment;
GetDlgItem(IDC_CMT_TEXT)->GetWindowText(strComment);
int iRating = m_ratebox.GetCurSel();
for (int i = 0; i < m_paFiles->GetSize(); i++)
{
if (!(*m_paFiles)[i]->IsKindOf(RUNTIME_CLASS(CKnownFile)))
continue;
CKnownFile* file = STATIC_DOWNCAST(CKnownFile, (*m_paFiles)[i]);
if (theApp.sharedfiles->GetFileByID(file->GetFileHash()) == NULL)
continue;
if (!strComment.IsEmpty() || !m_bMergedComment)
file->SetFileComment(strComment);
if (iRating != -1)
file->SetFileRating(iRating);
}
}
return CResizablePage::OnApply();
}
示例14: STATIC_DOWNCAST
BOOL CED2kLinkDlg::OnSetActive()
{
if (!CResizablePage::OnSetActive())
return FALSE;
if (m_bDataChanged)
{
//hashsetlink - check if at least one file has a hasset
BOOL bShowHashset = FALSE;
BOOL bShowAICH = FALSE;
BOOL bShowHTML = FALSE;
for (int i = 0; i != m_paFiles->GetSize(); i++){
if (!(*m_paFiles)[i]->IsKindOf(RUNTIME_CLASS(CKnownFile)))
continue;
bShowHTML = TRUE;
CKnownFile* file = STATIC_DOWNCAST(CKnownFile, (*m_paFiles)[i]);
if (file->GetFileIdentifier().GetAvailableMD4PartHashCount() > 0 && file->GetFileIdentifier().HasExpectedMD4HashCount())
{
bShowHashset = TRUE;
}
if (file->GetFileIdentifier().HasAICHHash())
{
bShowAICH = TRUE;
}
if (bShowHashset && bShowAICH)
break;
}
GetDlgItem(IDC_LD_HASHSETCHE)->EnableWindow(bShowHashset);
if (!bShowHashset)
((CButton*)GetDlgItem(IDC_LD_HASHSETCHE))->SetCheck(BST_UNCHECKED);
GetDlgItem(IDC_LD_HTMLCHE)->EnableWindow(bShowHTML);
UpdateLink();
m_bDataChanged = false;
}
return TRUE;
}
示例15: _T
void CED2kLinkDlg::UpdateLink()
{
CString strLinks;
CString strBuffer;
const bool bHashset = ((CButton*)GetDlgItem(IDC_LD_HASHSETCHE))->GetCheck() == BST_CHECKED;
const bool bHTML = ((CButton*)GetDlgItem(IDC_LD_HTMLCHE))->GetCheck() == BST_CHECKED;
const bool bSource = ((CButton*)GetDlgItem(IDC_LD_SOURCECHE))->GetCheck() == BST_CHECKED && theApp.IsConnected() && theApp.GetPublicIP() != 0 && !theApp.IsFirewalled();
const bool bHostname = ((CButton*)GetDlgItem(IDC_LD_HOSTNAMECHE))->GetCheck() == BST_CHECKED && theApp.IsConnected() && !theApp.IsFirewalled()
&& !thePrefs.GetYourHostname().IsEmpty() && thePrefs.GetYourHostname().Find(_T('.')) != -1;
for (int i = 0; i != m_paFiles->GetSize(); i++)
{
if (!(*m_paFiles)[i]->IsKindOf(RUNTIME_CLASS(CKnownFile)))
continue;
if (!strLinks.IsEmpty())
strLinks += _T("\r\n\r\n");
CKnownFile* file = STATIC_DOWNCAST(CKnownFile, (*m_paFiles)[i]);
strLinks += file->GetED2kLink(bHashset, bHTML, bHostname, bSource, theApp.GetPublicIP());
}
m_ctrlLinkEdit.SetWindowText(strLinks);
}