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.
Yes, something like that. In fact, the expression ret == SQL_SUCCESS 'returns' a boolean (true if they are equals, false if they are different). The same with the || operator. Thus, the complete expression returns a boolean, which is stored in m_bIsConnected.