awk or grep to match # of words before and after pattern

Pipe binary file matches grep results to file
I am using grep to match a pattern, but the output is strange.

$ grep -r -o "pattern" *

Gives me:

Binary file foo1 matches
Binary file foo2 matches
Binary file foo3 matches

To find the lines before/after, I then have to use the following on each file:

$ strings foo1 | grep -A1 -B1 "pattern"

How can I recursively perform this operation with strings? Or, is there an alternative?

This should handle the recursive 'strings'

find . -type f | while read f
do
   echo ====$f====
   strings $f | grep -A1 -B1 "pattern"
   echo
done