|
srvc.Write(ff, 2 * lstrlen(ff) - 1);
This can work in my computer too, maybe it's better than the last one I gave you.
|
|
|
|
|
same problem as other. there is a extra space between each letter and no new line.
|
|
|
|
|
My OS is winows XP.
And if I view the text by Notepad.exe, it's the same as you.
But if I use anothor software to view the text, it just be OK.
|
|
|
|
|
wcscat_s(ff, L"\n");
Em, try to replace the code by
1. wcscat_s(ff, L"\r\n");
2. wcscat_s(ff, L"\r");
3. wcscat_s(ff, L"\n\r");
|
|
|
|
|
i do some changes ----
for (int nItem = 0; nItem < srvcList.GetItemCount(); nItem++)
{
if (srvcList.GetCheck(nItem))
{
srvcList.GetItemText(nItem, 0, (LPTSTR)ff, 98);
srvc.SeekToEnd();
int i = 2 * lstrlen(ff) - 2;
int j = 0;
while(i)
{
srvc.Write(&ff[j], 1);
i--;
j++;
}
}
}
the content is ---
AVP BFE BITS
if i use wcscat_s(ff, L"\r\n"), then
AVP
þþþBFE
þþþBITS
þþþþ
this text file will be used by other program, therefore cant compromise with it.
|
|
|
|
|
It looks inefficient
|
|
|
|
|
still there is a problem, there is no new line. i want the content of the text file like this -----
AVP
BFE
BITS
|
|
|
|
|
You can try veiwing the text in Edit Plus or other text edit software.
|
|
|
|
|
You can try this, open the "srvc.txt", and select all text, and copy them, and open anthor TextEditor(Edit Plus), and paste.
If still there is no new line, then I have no ideas. It's seems that Microsoft define a new line as '\r\n', while in Unix it's '\n'.
|
|
|
|
|
thanks for all the support. finally it is done. the code is not that good ---
TCHAR ff[100] = {0};
CStdioFile srvc;
srvc.Open(_T("c:\\srvc.txt"), CFile::modeCreate|CFile::modeReadWrite);
for (int nItem = 0; nItem < srvcList.GetItemCount(); nItem++)
{
if (srvcList.GetCheck(nItem))
{
srvcList.GetItemText(nItem, 0, (LPTSTR)ff, 100);
int i = 2 * lstrlen(ff) - 2;
srvc.SeekToEnd();
int j = 0;
while(i)
{
srvc.Write(&ff[j++], 1);
--i;
}
ZeroMemory(ff, 100);
srvc.SeekToEnd();
srvc.Write("\n", 1);
}
}
output is ---
Audiosrv
AVP
BFE
BITS
also please tell me that is there a way due to which edit box control can take only numeric values and with in a bound, say 1 to 1000 only ???
modified on Sunday, July 19, 2009 5:19 PM
|
|
|
|
|
you solve the problem by yourself, congratulation .
maybe you can try replace the follow codes by "srvc.Write(ff, 2 * lstrlen(ff));", it works too in my computer.
rahuljin wrote: while(i) { srvc.Write(&ff[j++], 1); --i; }
|
|
|
|
|
thanks. if you didnt guide and help me, it would be impossible for me.
please answer my last question.
one more problem found ---
in first list control, when i enter an ip say "111.111.111.111", then i cannot enter the ip address "111.111.111.11". also "111.111.111.11" deletes "111.111.111.111" from the list control.
here is the code ----
BYTE m_M1, m_M2, m_M3, m_M4;
TCHAR ss[50] = {0};
UpdateData();
int i = -1;
LVFINDINFO temp;
ipAdd.GetAddress(m_M1, m_M2, m_M3, m_M4);
temp.flags = LVFI_PARTIAL|LVFI_STRING;
_stprintf_s(ss, _T("%d.%d.%d.%d"), m_M1, m_M2, m_M3, m_M4);
temp.psz = ss;
i = ipList.FindItem(&temp);
if(radBut1->GetState())
{
if(m_M1 && m_M2 && m_M3 && m_M4 && i == -1)
{
ipList.InsertItem(s++, (LPCTSTR)ss);
ipAdd.ClearAddress();
}
}
else if(radBut2->GetState())
{
if(i != -1)
ipList.DeleteItem(i);
else
MessageBox((LPCTSTR)L"Error: Address not found", (LPCTSTR)L"Delete Address", MB_ICONWARNING | MB_OK);
ipAdd.ClearAddress();
modified on Monday, July 20, 2009 3:17 AM
|
|
|
|
|
rahuljin wrote: ipList.DeleteItem(i);
What's "s" means? The last index of CListCtrl?
So if it's, then here
rahuljin wrote: ipList.DeleteItem(i);
after deleting a item, you must also descend "s". I don't know if this is the reason.
|
|
|
|
|
still the same problem ---
ipList.DeleteItem(i);
s--;
|
|
|
|
|
rahuljin wrote: if(i != -1) ipList.DeleteItem(i);
Relpace the codes with:
if (i != -1 && lstrcmp(ipList.GetItemText(i), temp.psz) == 0)
{
ipList.DeleteItem(i);
}
|
|
|
|
|
thanks, both the problems are solved.
BYTE m_M1, m_M2, m_M3, m_M4;
TCHAR ss[50] = {0};
UpdateData();
int i = -1;
LVFINDINFO temp;
ipAdd.GetAddress(m_M1, m_M2, m_M3, m_M4);
temp.flags = LVFI_PARTIAL|LVFI_STRING;
_stprintf_s(ss, _T("%d.%d.%d.%d"), m_M1, m_M2, m_M3, m_M4);
temp.psz = ss;
i = ipList.FindItem(&temp);
if(radBut1->GetState())
{
if(m_M1 && (i == -1 || lstrcmp(ipList.GetItemText(i, 0), temp.psz) != 0) )
{
ipList.InsertItem(s++, (LPCTSTR)ss);
ipAdd.ClearAddress();
}
}
else if(radBut2->GetState())
{
if (i != -1 && lstrcmp(ipList.GetItemText(i, 0), temp.psz) == 0)
{
ipList.DeleteItem(i);
s--;
}
else
MessageBox((LPCTSTR)L"Error: Address not found", (LPCTSTR)L"Delete Address", MB_ICONWARNING | MB_OK);
ipAdd.ClearAddress();
}
|
|
|
|
|
I think your code still has some problems.
Consider the situation below:
There are two items in CListCtrl.
111.111.111.111
111.111.111.11
And you enter 111.111.111.11 to insert the new item, see what happen.
If I am right, it will insert successfully!!That may not be what you want.
|
|
|
|
|
in that case, 'i' will not be -1 and lstrcmp(ipList.GetItemText(i, 0), temp.psz) will be equal to zero because the item text and temp.psz will be same.
|
|
|
|
|
Before you changed the "temp.flags = LVFI_PARTIAL|LVFI_STRING;" to "tem.flags=LVFI_STRING;", it's a wrong case exactly.
But now it isn't.
|
|
|
|
|
BYTE m_M1, m_M2, m_M3, m_M4;
TCHAR ss[50] = {0};
UpdateData();
ipAdd.GetAddress(m_M1, m_M2, m_M3, m_M4);
_stprintf_s(ss, _T("%d.%d.%d.%d"), m_M1, m_M2, m_M3, m_M4);
int compare;
for (int i = 0; i < ipList.GetItemCount(), ++i)
{
compare = lstrcmp(ss, ipList.GetItemText(i));
if(radBut1->GetState())
{
if(m_M1 && m_M2 && m_M3 && m_M4 && compare != 0)
{
ipList.InsertItem(s++, (LPCTSTR)ss);
ipAdd.ClearAddress();
}
}
else if(radBut2->GetState())
{
if(compare == 0)
ipList.DeleteItem(i);
else
MessageBox((LPCTSTR)L"Error: Address not found", (LPCTSTR)L"Delete Address", MB_ICONWARNING | MB_OK);
ipAdd.ClearAddress();
}
}
This is the final version.
|
|
|
|
|
got another solution ---
temp.flags = LVFI_STRING;
and everything becomes right.
modified on Monday, July 20, 2009 5:46 AM
|
|
|
|
|
You are right.
|
|
|
|
|
hello,
is it possible to make edit control to take only numeric values and limited digits only ???
i have an edit control which is used for the port number, so i want that the user can enter only numeric value and 5 digits.
any suggestion ??
|
|
|
|
|
Yes, it can.
you can set the property of the control to gain what you want.
I forget the details, but I am sure it can. My computer do not have a compiler, so I can't take a test.
|
|
|
|
|
If your compiler is VS200X, you can right click the control, and click the "Add Variable" in the pop menus.
Then it will pop out a window, and you can set the property in it.
If your compiler is VC++6.0, select the control, and in the "View->Class Wizzard->Add Member", I hope I don't misremember.
|
|
|
|
|