The homeside scored a goal in each of the periods en route to the victory.
The Flames are now 9-8-3 on the season - and 2-2-1 on this roadie - while the Capitals improved to 9-10-3.
Jacob Markstrom got the start between the pipes for Calgary - his seventh in the last eight games - and made 22 saves in the tilt.
At the other end of the ice, Darcy Kuemper had 32 stops for the shutout.
Calgary finished with a 10-7 edge in high-danger scoring chances at 5-on-5 according to Naturalstattrick.com.
Former Flame Garnet Hathaway had the first Grade-A look of the opening frame, Aliaksei Protas throwing a pass from behind the bet as he fell to a streaking Hathaway coming right down main, but Markstrom made the stop.
Calgary got the first powerplay of the game when Washington captain Alex Ovechkin was sent off for a high stick on Rasmus Andersson. Andrew Mangiapane got a couple of whacks at the puck up near the top of the blue paint but Kuemper stood tall.
T.J. Oshie - who returned to the Caps lineup in their last game after missing the previous 11 outings - opened the scoring at 7:56, converting a one-timer from Erik Gustafsson five-hole past Markstrom. Ovechkin got the other helper.
Kuemper made a few big stops later in the period, the first one on Jonathan Huberdeau in tight as he drove the net, and then with less than two minutes to go in the frame, Tyler Toffoli caused Gustafsson to cough the puck up deep in the Caps zone and the Flames forward grabbed and it and skated across the crease but Kuemper stayed with him and made a left pad save.
The Flames had a 15-6 edge in shots after 20 minutes and 5-1 edge in high-danger chances.
Markstrom denied Anthony Mantha off a rebound attempt - another point-blank stop - early in the second period to keep the deficit at one.