Hafeez was unbeaten on 190 as Pakistan moved to 333 for two by lunch at the Sheikh Abu Naser stadium and set to build a huge lead with eight wickets in hand.
Hafeez has so far hit 19 boundaries and three sixes as he closed in on his career-best score of 197, made in Pakistan's previous Test against New Zealand in Sharjah last November.
Azhar Ali was the lone batsman dismissed in the morning session after Pakistan resumed at 227-1.
Having taken his overnight score of 65 to 83, Azhar was bowled by Shuvagata Hom to end a 227-run partnership for the second wicket with Hafeez.
Younis Khan kept Hafeez company at lunch on 31, the pair having added 56 for the third wicket.
Bangladesh took the field without captain and wicket-keeper Mushfiqur Rahim, who had injured a finger while attempting to take a catch on the second day.
Imrul Kayes kept wickets and the captaincy was handed to Tamim Iqbal, whose review for a leg-before appeal when Hafeez was on 173 was turned down by both the on-field and TV umpires.
The second and final Test of the short series will start at the Sher-e-Bangla stadium in Dhaka on May 6.

Latest News from Sports News Desk