|
Would this suffice:-
CWnd* AFXAPI AfxGetMainWnd( );
Regards,
FarPointer
Blog:FARPOINTER
|
|
|
|
|
Hakuna-Matada wrote: This is the why I think GetParent() is not such a good idea. Any other options?
thats right GetParent is good Idea
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
Support CRY- Child Relief and You
|
|
|
|
|
hello
I am trying to make a list control , so that it will display both name and
number when i enter them.
1) how do i delete an item from the list control
ie
void CSpeedDial::OnSpeedDel()
{
//
}
2)how do i move an item up or down in the list contol using "up buttom" and
"down buttom" i have created
ie
void CSpeedDial::OnSpeedUp()
{
}
and
void CSpeedDial::OnSpeedDown()
{
}
3)how do i make the "add buttom" disable when i have 8 items in the list
control.
this is what I have done so far:
BOOL CSpeedDial::OnInitDialog()
{
CDialog::OnInitDialog();
CRect rect;
m_speedList.GetClientRect(&rect);
m_speedList.InsertColumn(0,_T("Name"),LVCFMT_LEFT,rect.Width()/2,0);
m_speedList.InsertColumn(1,_T("Number"),LVCFMT_LEFT,rect.Width()/2,0);
m_speedList.SetImageList(&imList, LVSIL_SMALL);
for (int i=0;i< m_speedArray.GetSize();i++)
{
m_speedList.InsertItem(i,m_speedArray.GetAt(i));
}
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CSpeedDial::OnSpeedAdd()
{
// TODO: Add your control notification handler code here
CString AliasName,AliasNumber;
m_speedName.GetWindowText(AliasName);
m_speedNumber.GetWindowText(AliasNumber);
AliasName.TrimRight();
AliasName.TrimLeft();
AliasNumber.TrimLeft();
AliasNumber.TrimRight();
if(AliasName.FindOneOf("=|")>=0) return;
int nIndex = m_speedList.InsertItem(m_speedList.GetItemCount(),AliasName);
m_speedList.SetItemText(nIndex,1,AliasNumber);
m_speedName.SetWindowText(_T(""));
m_speedNumber.SetWindowText(_T(""));
}
thanks for you help
|
|
|
|
|
You can decide it, on PretraslateMessage, or WM_KEYDOWN message.
SaRath.
"Where I am from, there is no plan B. So, take advantage of today becuase tomorrow is not promised. - 50 Cent"
<blink>My Blog | Understanding State Patte
|
|
|
|
|
jokefake wrote: 1) how do i delete an item from the list control
By using the DeleteItem() method.
jokefake wrote: 2)how do i move an item up or down in the list contol using "up buttom" and
"down buttom" i have created
By deleting it and inserting it into the correct location.
jokefake wrote: 3)how do i make the "add buttom" disable when i have 8 items in the list
control.
By using the EnableWindow() method.
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
i did sth like this but it is not working
void CSpeedDial::OnSpeedDelete()
{
POSITION pos = m_speedList.GetFirstSelectedItemPosition();
if(pos == NULL) return;
int index = m_speedList.GetNextSelectedItem(pos);
if(index<0 || index>m_speedList.GetItemCount()||
m_speedList.GetItemCount()!= m_speedArray.GetSize())
return;
m_speedList.DeleteItem(index);
m_speedArray.RemoveAt(index);
// TODO: Add your control notification handler code here
}
|
|
|
|
|
jokefake wrote: i did sth like this but it is not working
So what's not working with it? You've got a lot of code there that needs to be narrowed down to just a single statement or two. Set breakpoints. Use the debugger. Step into the code to see what is going on.
The first thing to try is this:
void CSpeedDial::OnSpeedDelete()
{
m_speedList.DeleteItem(0);
} If this works, then you know what the problem is not.
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
|
Why don't you share with others what the resolution was?
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
i just removed some of the lines from the code
void CSpeedDial::OnSpeedDelete()
{
POSITION pos = m_speedList.GetFirstSelectedItemPosition();
int index = m_speedList.GetNextSelectedItem(pos);
m_speedList.DeleteItem(index);
// TODO: Add your control notification handler code here
}
but how can i move an item up and down in the list
i am a beginner
|
|
|
|
|
jokefake wrote:
i just removed some of the lines from the code
void CSpeedDial::OnSpeedDelete()
{
POSITION pos = m_speedList.GetFirstSelectedItemPosition();
int index = m_speedList.GetNextSelectedItem(pos);
m_speedList.DeleteItem(index);
// TODO: Add your control notification handler code here
}
Which can be shortened to:
void CSpeedDial::OnSpeedDelete()
{
int index = m_speedList.GetNextItem(-1, LVIS_SELECTED);
if (index != -1)
m_speedList.DeleteItem(index);
} jokefake wrote: but how can i move an item up and down in the list
By deleting it and inserting it into the correct location.
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
thanks, that code is really short and simple.
I tried moving a selected item up in the list control, but it is not working.
what may wrong with the code
void CTestingDlg::OnUp()
{
int index = m_cListCtrl.GetNextItem(-1, LVIS_SELECTED);
m_cListCtrl.InsertItem(index -1, m_cListCtrl.GetItemText(index, index));
m_cListCtrl.DeleteItem(index +1);
// TODO: Add your control notification handler code here
}
|
|
|
|
|
Delete first, then insert.
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
deleting it first, deletes the row as i click on the buttom
i extracted my code from here.
BOOL CListCtrlEx::MoveRow(int from, int to)
{
//Can't move to the same place, or from or to a negative index
if(from == to || from < 0 || to < 0)
return FALSE;
//First Copy the row to the new location
if(CopyRow(from, to))
{
//If we have just inserted a row before
//this one in the list, we need to increment
//our index.
if(from > to)
DeleteItem(from + 1);
else
DeleteItem(from);
return TRUE;
}
else
return FALSE;
}
BOOL CListCtrlEx::CopyRow(int from, int to)
{
//Can't move to the same place, or from or to a negative index
if(from == to || from < 0 || to < 0)
return FALSE;
//Copy the row to the new index
InsertItem(to, GetItemText(from, 0));
//If row has been inserted before original
//increment the original
if(from > to)
from++;
//Loop through subitems
for(int i = 1; i < GetColumnCount(); i++)
{
SetItemText(to, i, GetItemText(from, i));
}
return TRUE;
}
|
|
|
|
|
It's not a good idea to copy code from elsewhere unless you have a good understanding of what it is doing. If the code is doing a specific task and you copy it to a new location, its role will change.
void OnClickMoveUp( void )
{
int nIndex;
CString strCommand;
nIndex = m_listctrl.GetNextItem(-1, LVNI_SELECTED);
ASSERT(-1 != nIndex);
strCommand = m_listctrl.GetItemText(nIndex, 0);
m_listctrl.DeleteItem(nIndex);
nIndex = m_listctrl.InsertItem(nIndex - 1, strCommand);
}
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
thanks, it works perfectly with a list with only one column, what about if you have 2 columns
|
|
|
|
|
jokefake wrote: it works perfectly with a list with only one column, what about if you have 2 columns
Multiple calls to GetItemText() , for starters.
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
i did sth like this and the result was no good at all
void CTestingDlg::OnUp()
{
int nIndex;
CString strCommand,strCommand2;
nIndex = m_cListCtrl.GetNextItem(-1, LVNI_SELECTED);
ASSERT(-1 != nIndex);
strCommand = m_cListCtrl.GetItemText(nIndex, 0);
strCommand2 = m_cListCtrl.GetItemText(0,nIndex);
m_cListCtrl.DeleteItem(nIndex);
nIndex = m_cListCtrl.InsertItem(nIndex - 1, strCommand);
m_cListCtrl.SetItemText(nIndex-1,1, strCommand2);
}
|
|
|
|
|
jokefake wrote: strCommand2 = m_cListCtrl.GetItemText(0,nIndex);
Should be:
strCommand2 = m_cListCtrl.GetItemText(nIndex, 1);
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
do i have to do changes to the last code. the text on the 2nd column are not showing
m_cListCtrl.SetItemText(nIndex-1,1, strCommand2);
|
|
|
|
|
jokefake wrote: the text on the 2nd column are not showing
What does SetItemText() return? Have you verified that strCommand2 contains anything?
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
strCommand contains the correct string. i think the problem have to do with the SetWindowText. do you have any suggestion of what i can do.
-- modified at 6:02 Wednesday 12th July, 2006
|
|
|
|
|
jokefake wrote: i think the problem have to do with the SetWindowText.
SetWindowText() is not used with a list control.
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
1)Try CListCtrl::DeleteItem
2)Try LVN_KEYDOWN Notification after adding notify_reflect
3)Try LVN_INSERTITEM Notification and keep a counter along with the LVN_DELETEITEM were you will decrement it and wen it becomes 8 disable it .
Regards,
FarPointer
Blog:FARPOINTER
|
|
|
|
|
i try sth like this but is not working
void CSpeedDial::OnSpeedDelete()
{
POSITION pos = m_speedList.GetFirstSelectedItemPosition();
if(pos == NULL) return;
int index = m_speedList.GetNextSelectedItem(pos);
if(index<0 || index>m_speedList.GetItemCount()||
m_speedList.GetItemCount()!= m_speedArray.GetSize())
return;
m_speedList.DeleteItem(index);
m_speedArray.RemoveAt(index);
// TODO: Add your control notification handler code here
}
|
|
|
|