|
My apologies.
I would never have suspected that was necessary but I live and learn.
Thank you very much for helping me over that hurdle.
|
|
|
|
|
Do you have something similar to:
class CSomething
{
public:
enum
{
ONE,
TWO,
THREE
} SomeType;
void Serialize( CArchive &ar )
{
if (ar.IsStoring())
ar << (int) SomeType;
else
ar >> (int) SomeType;
}
};
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
That's basically it. I needed a typedef in front of the enum. I've tried a couple variations which should effectively be the same thing in the end but none get me past the error.
I tried the cast operation an it didn't change the error.
I'm not sure if this matters, but I've noticed from past posts you use VC++ 6.0 exclusively and this project is on Visual C++ 2003, so if that's working for you in your environment, I'll give it try in a Visual C++ 6.0 project to see if the 2003 compiler just changed the rules.
|
|
|
|
|
bob16972 wrote: ...if that's working for you in your environment, I'll give it try in a Visual C++ 6.0 project...
You might have to tweak it a bit like:
if (ar.IsStoring())
{
int x = SomeType;
ar << x;
}
else
{
int x;
ar >> x;
SomeType = (_SomeType) x;
}
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
I feel silly now but a tad bit smarter.
Thanks for helping me out. I learned something new.
|
|
|
|
|
Why have you written the underscore in the casting by loading???
I mean: SomeType = (_SomeType) x;
Greetings.
--------
M.D.V.
If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about?
Help me to understand what I'm saying, and I'll explain it better to you
|
|
|
|
|
Nelek wrote: Why have you written the underscore in the casting by loading???
To differentiate between a type and a value.
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
Thanks
Greetings.
--------
M.D.V.
If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about?
Help me to understand what I'm saying, and I'll explain it better to you
|
|
|
|
|
Hi,
Is there a possibility to get the previous item selection in a LVN_ONITEMCHANGING handler.
The handler provides the item that is about to change from unselected to selected, but I can not
find a way to get the item that loses the selection.
void CMPRSDlg::OnItemChangingMPRSLst(NMHDR *pNMHDR, LRESULT *pResult)
{
NM_LISTVIEW *pNMListView = (NM_LISTVIEW *) pNMHDR;
*pResult = 0;
// TODO : Add your control notification handler code here.
if (pNMListView->uChanged & LVIF_STATE)
{
int nItem = pNMListView->iItem;
// An item's state is about to change.
if (!(pNMListView->uOldState & LVIS_SELECTED) && (pNMListView->uNewState & LVIS_SELECTED))
{
// Item will go from unselected to selected.
ASSERT(::IsWindow(m_ctlMPRSLst.m_hWnd));
POSITION pos = m_ctlMPRSLst.GetFirstSelectedItemPosition();
/// THIS DOES NOT WORK. pos = NULL ???? Is there another way ?
:
:
// Prevent selection if the item is locked.
CMPRSEntry *pEntry = (CMPRSEntry *) m_ctlMPRSLst.GetItemData(nItem);
if (pEntry->m_SKU.IsLocked())
{
*pResult = 1;
return;
}
}
}
}
|
|
|
|
|
If the number of items is not very big and the time is not critical you can deal with it using a help-array.
I mean:
void CMPRSDlg::OnItemChangingMPRSLst(NMHDR *pNMHDR, LRESULT *pResult)
{
for (int i = 0; i < number_of_items; i++)
{
if (Help_array[i] == 1)
{
last_item = i;
Help_array[i] = 0;
break;
}
last_item = -1;
}
Help_array[index_of_changing_item] = 1;
}
Where Help_Array has zero in ALL positions at the beggining.
Hope it helps.
Greetings.
--------
M.D.V.
If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about?
Help me to understand what I'm saying, and I'll explain it better to you
|
|
|
|
|
You can always store the HITEM of the currently selected item, which will be
the last selected item when a new item is selected.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
yes, but where to I have to do this.
I want to achieve the following :
I want to prevent that in a multiselection CListCtrl some items which have a particular
flag set bound to the item with SetItemData() are getting selected. But selection can occur in many different ways. Through a mouseclick, through the keyboard interface and particular with the Ctrl and Shift keys. I can not find a place to do the saving which handles all these cases.
tia
|
|
|
|
|
I'm not understanding what you want to do.
Do you want to prevent items from being selected?
You get a notification when the state of an item is about to change, which you can prevent.
You also get a notification when an item's state is changed.
You can use LVM_GETSELECTEDCOUNT and LVM_GETNEXTITEM to enumerate the selected items.
Can you implement the logic you want using these?
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Yes, I want to prevent multiple items from being selected by skipping the unwanted ones and
setting the selection back to the first item which is wanted( without flag), depending on the direction of the selection.
|
|
|
|
|
paper67 wrote: I want to prevent multiple items from being selected
Always or sometimes?
If always, then the LVS_SINGLESEL style should be used for the control.
If sometimes, the control isn't going to keep track of this for you AFAIK.
Depending on the complexity of the logic involved, you may need to handle
item selection yourself, overriding the control's default behavior.
Default List-View Message Processing[^]
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Don't you like my first answer? or is not what you need? Is a bypass and may take a bit of time in performance, but it can work.
Greetings.
--------
M.D.V.
If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about?
Help me to understand what I'm saying, and I'll explain it better to you
|
|
|
|
|
Just to confirm if this is standard behaviour.
I have a large linked list of some 100,000 objects, each allocated with new. When deleting this list, in debug mode it takes a good 15 seconds causing the app to appear hung. yet in release mode it takes a fraction of second.
I know that with DEBUG set, a lot of extra validation is going on behind the scenes, but should it really cause this much of a slowdown?
Waldermort
|
|
|
|
|
yes.
never trust a DEBUG version for performance.
|
|
|
|
|
Here is what happens when you call operator new when _DEBUG is defined. (As I understand it)
1.) _malloc_dbg() is invoked and your size_t is passed through.
2.) An object is created of struct type _CrtMemBlockHeader.
3.) The memory you have requested is allocated and memset() to 0xCD. (C = Clean)
4.) 4 bytes on both sides of the memory you requested are memset() to 0xFD (F = Fence)
5.) A pointer to the _CrtMemBlockHeader is added to an internal linked list for tracking.
6.) A pointer to the memory you requested is returned.
When the memory is released here is what happens:
1.) _free_dbg is invoked and passed the address.
2.) The debug heap manager walks through the linked list and finds the pointer to the CrtMemBlockHeader struct.
3.) Checks are made on both sizes of the memory you requested to make sure the Fence 0xFD is still there.
4.) The memory location is memset() to 0xDD (D = Dead)
5.) The _CrtMemBlockHeader is marked as freed in the heap managers linked list. But the struct remains in memory.
Upon application termination the entire linked list is walked and inspected for memory which was not freed or missing its fence.
Hope this helps you,
-Randor (David Delaune)
|
|
|
|
|
That's a good description Now I can see why it takes so long, walking a linked list of 100,000 items must add quite an overhead.
Another reason why delete was taking so long was due to using vld.
Perhaps a mapped file may better suit my needs...
Waldermort
|
|
|
|
|
Hi,
I am trying to get any message or a point where I can found system generated window poping up (i.e. net send window) I tried system hooks ( CBT ,SHELL) these are not working for these situation. can some one help me??
Sharad goyal
|
|
|
|
|
Sharad Goyal wrote: net send window
actually you can hook creation messagebox that could help you!
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow Never mind - my own stupidity is the source of every "problem" - Mixture
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
Support CRY- Child Relief and You
|
|
|
|
|
like this:FILE*in ,what does it mean? and the function is include in which file?
|
|
|
|
|
in is a variable of type "pointer to FILE "
FILE is defined in stdio.h
Though I speak with the tongues of men and of angels, and have not money, I am become as a sounding brass, or a tinkling cymbal. George Orwell, "Keep the Aspidistra Flying", Opening words
|
|
|
|
|
this is not a function (but probably that you didn't provide full informations).
FILE is a structure defined in the CRT, used for files operations.
FILE* is a pointer to a FILE.
mainly, when you have to use files, you first open it (with fopen() for instance). such a function returns a FILE*. then, you may want to read, write, move inside and close your file freshly opened. all the function that perform such an action get a FILE* parameter...
more question ?
|
|
|
|