Yes. It doesn't have the LVS_SINGLESEL style. That's why I think it is difficult to deal with.
Right now I use a timer. I set a timer when I get the first message, after a short delay, I start to draw my window or something. If I handle each change message, my window will keep flashing during the processing. So I want to handle just once or in the last message. I'm looking for a better way to know when I get the last message. Thanks for your help.
In regards to your "I want to modify my data after it stop changing" comment, if some number of seconds elapse between selection messages, how are you to know if the subsequent selection is the last of the first group or the beginning of the next group? In other words, what defines "stop changing?"
To get a better understanding of what you are trying to accomplish, what exactly are you doing with each selection in the list control?
"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 click one item in the list-view control, hold down shift key, click another item, then I can select the items between the first and the last one. After that, I draw selection lines in another window for those items to indicate they are selected. Because I know windows will produce a bundle of messages to notify this operation, I draw my window just once after these messages to get better performance.
"stop changing" ==> windows won't generate selection messages anymore for this operation
Depending on windows' behavior, if there are few seconds between the messages, it should be the next selection operation. I know it is the first of the next group since it comes after my last timer event.
Sorry, the owner-drawn style also generates a lot of messages. But the LVS_OWNDERDATA style always generates 3 messages each operation. I have improved my timer logic and it works fine right now. Thanks for your help.
It's hard to explain COM in a small book let a lone in a short post so the best thing I can do is say try it and see. Try creating 3 separate Dlls, one object in each with the wizard and see where the code is the same and where it's different and if you can combine them manually. Also the theory of COM is different from the implementation of COM objects within a framework like MFC or ATL. Framework implementation details like COM Maps can be very confusing if you don't already understand what they're trying to achieve.
Learning by fiddling has always been the best way to learn programming and not just because that's how I did it.
Nothing is exactly what it seems but everything with seems can be unpicked.