I'm guessing that you're using a "while" or a "for" loop to continuously do the preview? If so, this will stop all interaction because the app will just sit there in that loop.
You need to do the preview as an active object. Have a look at the timer classes in the SDK (CPeriodic should do the job).
It will give you a callback at regular intervals and you can update the preview - and the application interactions will still work.
When you get the key press (via OfferKeyEventL as you describe), then stop the CPeriodic timer and take the picture.