timer disabled on drag?
Gene Sewell -- genes@fast.net Sunday, September 08, 1996 Hi, Environment: MSVC 4.1, NT 3.51 I'm trying to use a timer to help me draw flashing focused rectangles illuminating the target of a drag operation. I've installed a timer, but I'm having problems. Using either a timer proc or just the wm_timer message handling, I get exactly one callback and then... no more. I had a hope that the problem was that DragEnter locks updates to the window, so I surrounded the timer code with DragLeave and then DragEnter. That didn't help. Anyone else have problems with timers during the drag? Any ideas on how to get it to work? Here's a snip of my timer code: void CCommonListView::OnTimer(UINT nIDEvent) { // unlock the window and hide drag image mx_pApp->m_pimageListDrag->DragLeave(mx_pApp->mx_DestList); // this draws a flashing focus rectangle on the current target FlashDropTarget(); // call the default handler as well.... CListView::OnTimer(nIDEvent); // lock updates and show drag image mx_pApp->m_pimageListDrag->DragEnter(this, mx_pApp->mx_CurrentPos); } Thanks! Gene ---- The game of life is a game of boomerangs. Our thoughts, deeds and words return to us sooner or later with astounding accuracy. -Florence Scovel Shinn
David Ohlssen -- DAVIDO@COMMERCE.CTECH.AC.ZA Monday, September 09, 1996 >I've installed a timer, but I'm having problems. Using either a timer proc >or just the wm_timer message handling, I get exactly one callback and >then... no more. >Thanks! > >Gene It also disables timer messages while you hold down a button while on the title bar, whether or not you move the mouse. Easiest way around is to try OnIdle - hopefully those messages get through! You will have to read COleDateTime to get a "real-time" indication of how much time has elapsed because OnIdle is called erratically when the wndproc is busy. If all else fails, open a worker thread that Sleeps for a short time and then based on a flag stored in the app, sends your view a suitable message - I'm not sure what.
Chris Scott -- cscott@aceltd.com Monday, September 09, 1996 [Mini-digest: 2 responses] << I'm trying to use a timer to help me draw flashing focused rectangles illuminating the target of a drag operation. I've installed a timer, but I'm having problems. Using either a timer proc or just the wm_timer message handling, I get exactly one callback and then... no more. Anyone else have problems with timers during the drag? Any ideas on how to get it to work? >> Yeah, don't call the base class implementation. Remove this line... << // call the default handler as well.... CListView::OnTimer(nIDEvent); >> - Chris Scott - Useless stuff that looks bad w/o a Terminal font goes here. -----From: Danny LauwersHello, The timer and drawing messages are kept in the threads message queue until there are no other messages. Maybe it is because you are dragging that the timer message are not coming through. You could use a UIThread that does the updating. Multimedia timer are out of the question because you can't do much inside the callback routine. Hope this helps Danny Lauwers
Kelly Capelli -- capelli@waste.org Monday, September 09, 1996 Hi Gene.. Remember that timer messages get pushed to the back of the message queue (even behind WM_PAINT messages). So if you're somehow causing a paint message, but you're not instantiating a CPaintDC class in your OnPaint handler, you'll get an endless queue of WM_PAINT messages and you'll never see your timer messages again. This happened to me 2 weeks ago and may or may not be your problem. Have you tried spy-ing to see if you're getting a bunch of paint message? -Angela On Sun, 8 Sep 1996, Gene Sewell wrote: > Environment: MSVC 4.1, NT 3.51 > > I'm trying to use a timer to help me draw flashing focused rectangles > illuminating the target of a drag operation. > > I've installed a timer, but I'm having problems. Using either a timer proc > or just the wm_timer message handling, I get exactly one callback and > then... no more. > > Anyone else have problems with timers during the drag? Any ideas on how to > get it to work? > > Here's a snip of my timer code: > > void CCommonListView::OnTimer(UINT nIDEvent) > { > // unlock the window and hide drag image > mx_pApp->m_pimageListDrag->DragLeave(mx_pApp->mx_DestList); > > // this draws a flashing focus rectangle on the current target > FlashDropTarget(); > > // call the default handler as well.... > CListView::OnTimer(nIDEvent); > > // lock updates and show drag image > mx_pApp->m_pimageListDrag->DragEnter(this, mx_pApp->mx_CurrentPos); > } -> > Thanks! > > Gene > ---- > The game of life is a game of boomerangs. Our thoughts, deeds and words > return to us sooner or later with astounding accuracy. > -Florence Scovel Shinn > -- Kelly Capelli capelli@waste.org HOW RUDE!!
Gene Sewell -- genes@fast.net Tuesday, September 10, 1996 [Mini-digest: 2 responses] Hi all, Just to complete the thread.... I got a lot of suggestions, all of which were enlightening. As it turned out, I changed one line of code, and fixed the problem. As soon as I commented out the default timer proc, everything worked just fine! // CListView::OnTimer(nIDEvent); Thanks to all! Gene ---- The universe is full of magical things, patiently waiting for our wits to grow sharper. -- Eden Phillpotts -----From: Kelly CapelliHi Gene.. Remember that timer messages get pushed to the back of the message queue (behind WM_PAINT messages). So if you're somehow causing a paint message, but you're not instantiating a CPaintDC class in your OnPaint handler, you'll get an endless queue of WM_PAINT messages and you'll never see your timer messages again. This happened to me 2 weeks ago and may or may not be your problem. Have you tried spy-ing to see if you're getting a bunch of paint message? -Angela -- Kelly Capelli capelli@waste.org HOW RUDE!!
| Вернуться в корень Архива |