|
Thank you!
I tryed something similar but I never used the CUIntArray.
This works Thank you again!
/Jarek
He believed the commercials that said drink beer, get laid
but at closin' time he was alone, he didn't get paid.
Last night his lover was a razorblade..
"Dan Reed song Mix it up"
What do you want to patch today?
|
|
|
|
|
You have to iterate the list first to get all the selected items positions. Once you have that list go through it backwards to delete all the indexes as deleting them in the order you receive them changes the indexes of the following items.
int count = m_UsingList.GetSelectedCount();
if (count > 0)
{
int *pIndexes = new int[count];
int index = 0;
POSITION pos = m_UsingList.GetFirstSelectedItemPosition();
while (pos)
{
pIndexes[index++] = m_UsingList.GetNextSelectedItem(pos);
}
for (index = count - 1 ; index >= 0 ; index--)
{
m_UsingList.DeleteItem(pIndexes[index]);
}
delete []pIndexes;
pIndexes = NULL;
}
Roger Allen
Sonork 100.10016
Death come early, death come late,
It takes us all, there is no reason.
For every purpose under heaven,
To each a turn, to each a season.
A time to weep and a time to sigh,
A time to laugh and a time to cry,
A time to be born and a time to die.
Dust to dust and ashes to ashes,
And so I end my song.
|
|
|
|
|
Here are two ways:
for (int x = 0; x < m_list.GetItemCount(); x++)
{
int nItem = m_list.GetNextItem(-1, LVNI_SELECTED);
BOOL bStatus = m_list.DeleteItem(nItem);
}
and
int nItem = m_list.GetNextItem(-1, LVNI_SELECTED);
do
{
BOOL bStatus = m_list.DeleteItem(nItem);
nItem = m_list.GetNextItem(nItem - 1, LVNI_SELECTED);
} while (nItem != -1);
The latter is a tad faster as it does not have to continually search from the beginning of the list for a match.
Five birds are sitting on a fence.
Three of them decide to fly off.
How many are left?
|
|
|
|
|
It works fine Thank you!
I am suprised that there is so many ways to delete multiple files in a listbox, and I could not pick any of them
Thats the cool way of programming sometimes you know so much and so litle!
He believed the commercials that said drink beer, get laid
but at closin' time he was alone, he didn't get paid.
Last night his lover was a razorblade..
"Dan Reed song Mix it up"
What do you want to patch today?
|
|
|
|
|
"DeleteItem" makes indices of all subsequent items decrease by one, so suppose the "next selected item" had index of 5, it could become 4 after a call of "DeleteItem". So you should do this instead:
m_ListControll.LockWindowUpdate();
POSITION p = m_ListControll.GetFirstSelectedItemPosition();
while (p)
{
m_ListControll.DeleteItem(m_ListControll.GetNextSelectedItem(p));
p = m_ListControll.GetFirstSelectedItemPosition();
}
m_ListControll.UnlockWindowUpdate();
Simply keep deleting the first selected item until there's no more, you really don't need to make things complicated, such as establishing an additional array.
|
|
|
|
|
I have 3 classes
CFirst : CButton
CSecond : CFirst
CThird : CSecond
CSecond::OnTimer() sends the parent window a message using:
WPARAM wParam = MAKEWPARAM(GetDlgCtrlID(), BN_CLICKED);
GetParent()->SendMessage(WM_COMMAND, wParam, this);
I'm trying to notify the parent that this particular button was clicked, but i have 2 problems/questions:
1) How can I send the
this</code pointer? When I cast it as long woun't it loose it's RTTI? I need this for later :)<br />
<br />
2) When the parent recieves <code>WM_COMMAND messages is there anyway the parent window can determine using the this pointer which class derived from CButton was clicked? CSecond or CThird
Will the parent be able to determine that it was a CSecond clicked or a CThird clicked??? or will it always get the CSecond ? Do I have to make CSecond::OnTimer virtual?
Thanks in advance
I'm drinking triples, seeing double and acting single
|
|
|
|
|
1. The notification is done only by window handle. For SendMessage, you should use something like
GetParent()->SendMessage(WM_COMMAND, wParam, (LPARAM)GetSafeHwnd());
2. It could examine the control ID, assuming you know at runtime which IDs are associated with each kind of button. The virtuality of OnTimer won't help. The sink (target) for the message must be able to work it out itself.
Steve S
|
|
|
|
|
Steve S wrote:
GetParent()->SendMessage(WM_COMMAND, wParam, (LPARAM)GetSafeHwnd());
I Initially had that, but figured sending a generic window handle to my parent wouldn't allow me to use RTTI Unless I has code in my parent class that would create the appropriate object (CSecond or CThird) and attach the windows handle. Not quite the solution I wanted. I think i'll just use command ID's
Thanks again
Cheers
I'm drinking triples, seeing double and acting single
|
|
|
|
|
There is a posibility that you can get the runtime class infromation and access that.
CWnd *pWnd = GetDlgItem(pMsg->wParam);
if (pWnd->GetRuntimeClass() == CFirst::GetRuntimeClass())
{
}
This will mean using the IMPLEMENT_DYNAMIC and DECLARE_DYNAMIC macros in yout CFisrt, CSecond and CThird classes
Roger Allen
Sonork 100.10016
Death come early, death come late,
It takes us all, there is no reason.
For every purpose under heaven,
To each a turn, to each a season.
A time to weep and a time to sigh,
A time to laugh and a time to cry,
A time to be born and a time to die.
Dust to dust and ashes to ashes,
And so I end my song.
|
|
|
|
|
Generally, this will only work if you have actual MFC objects corresponding to the windows themselves, since left to it's own devices, GetDlgItem() will return back either the permanent object associated with an HWND, or a temporary CWnd object. You don't, for instance, get a CButton* back if you use
GetDlgItem(IDOK)
unless you've associated one with the dialog item.
In the scenario outlined, of course, it should be OK.
Steve S
|
|
|
|
|
I have a app that I want to restore the state, like location and size.
Where can I find info on how to do this? I am saving the RECT from
GetWindowRect to the registry if not IsIconic. But what about Maximized?
And if it is Maximized how and where do I resotre this during startup?
Thank You
Bo Hunter
|
|
|
|
|
See CWnd::GetWindowPlacement() and CWnd::SetWindowPlacement() .
/ravi
Let's put "civil" back in "civilization"
Home | Articles | Freeware | Music
ravib@ravib.com
|
|
|
|
|
I need to invoke a common dialog so the user can select folder NOT files. Should I use the open common dialog or is there something else for this (some applications eg. Visual Studio) have these dialogs that list only folders.
|
|
|
|
|
|
Yep, that's what I was looking for. My problem is that I need to get the full path of the folder not just it's name and the BROWSEINFO struct doesn't have a member for that...what is the workaround here?
|
|
|
|
|
See this article and use the SelectFolder() method. And while you're there, rate Davide's article a 5. It deserves it.
/ravi
Let's put "civil" back in "civilization"
Home | Articles | Freeware | Music
ravib@ravib.com
|
|
|
|
|
Perfect...it earned it's 5 star rating.
|
|
|
|
|
|
I need to take the letter A (in upper case) and increment it using ++ to B,C,D,E,F, etc. How do I do this?
"I am the First, the Last, the Alpha and Omega."--Jesus Christ
|
|
|
|
|
char cExample = 'A';
cExample++;
|
|
|
|
|
Thanks! I'm a dumb noob! I was using "A" instead of 'A'
"I am the First, the Last, the Alpha and Omega."--Jesus Christ
|
|
|
|
|
i'm surprised it compiled that way.
|
|
|
|
|
I need a CArray-compatible template for the GCC compiler. I've decided to rewrite an original CArray, but received a "corrupted stack" error during destruction of the array. Please help me.
|
|
|
|
|
My worst nightmare - a port of CArray. Why not convert to std::vector instead ? Or if you must attempt this atrocity, write a class that contains a vector and presents a CArray compatible interface.
Christian
I have drunk the cool-aid and found it wan and bitter. - Chris Maunder
|
|
|
|
|
Hi,
I wrote a console application.In this I want to read a file and write into another file.The first number in the input file gives the number of characters in the file.
My program is as follows:
char ch;
int i=0,n,j=0;
char data[9];
FILE *fp=fopen("input.txt","r");
FILE *fp1=fopen("output.txt","w");
fscanf(fp,"%d",&n);
while(j<=n)
{
j++;
ch=fgetc(fp);
fprintf(fp1,"%c",ch);
}
fclose(fp);
fclose(fp1);
Input file on which it is not working:--
160 e‘Ünýv¾§–yDBwŠÑûhŠ[ŠÑûhŠ[ŠÑûhŠ[ŠÑûhŠ[ŠÑûhŠ[ŠÑûhŠ[ŠÑûhŠ[±³~%IШƻѡ¸#M$=¹»z÷Ê‚ÉyÀ¨fza÷Aœ,®áÀŽ¥L”vP_üã†ÉÖU´¥šÁ×ÕVI¶÷kúÎEu„~:
†í•BØ
hmg¸
Output file given:--
e‘Ünýv¾§–yDBwŠÑûhŠ[ŠÑûhŠ[ŠÑûhŠ[ŠÑûhŠ[ŠÑûhŠ[ŠÑûhŠ[ŠÑûhŠ[±³~%IШƻѡ¸#M$=¹»zÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Please help me in finding out the problem
Karteek
|
|
|
|