|
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.
|
|
|
|
|
i have vs2008.
i set the limit by using this code ---
portID.SetLimitText(5);
only numeric problem is left.
modified on Wednesday, July 22, 2009 2:29 AM
|
|
|
|
|
In addition to the above comment, you can use the FindItem() function of list control directly. No need to loop.
|
|
|
|
|
|
LVFINDINFO temp;
CString ff;
temp.flags = LVFI_STRING | LVFI_PARTIAL;
CStdioFile fileh;
fileh.Open(L"C:\\srvc.txt", CFile::modeRead);
int i;
do
{
if(fileh.ReadString(ff)== NULL)
{
break;
}
temp.psz = ff.GetBuffer();
i = m_objListCtrl.FindItem(&temp);
if(lstrcmp(m_objListCtrl.GetItemText(i, 0), temp.psz) == 0)
{
m_objListCtrl.SetCheck(i, TRUE);
}
}
while(ff.GetBuffer() != NULL);
fileh.Close();
This can work in my computer, but I don't guarantee it could work in your computer.
And by the way, I am in school now, but tomorrow I'll back home(There is no computer in my house ). It means I could not use computer for a long time. And I can't solve problem together with you, I'm sorry for that..
|
|
|
|
|
I Now wish to extend my existing XP Program suiteto enable installation into Vista. I do not use Windows Installer, and do not propose to use it. What steps are required to adapt my own installation program, on the basis that neither is registered anywhere.
Regards,
Bram van Kampen
|
|
|
|
|