Rasmus Andersson and Andrew Mangiapane scored, Johnny Gaudreau had two assists, and Jacob Markstrom made 24 saves in his 14th straight start for the Flames (24-26-3), who have three games remaining against the Canucks to close the season.
"Obviously we want to win the last three games, so that's how we approach it," Andersson said.
Matthew Highmore scored, and Thatcher Demko made 24 saves for the Canucks (21-28-3), who are 2-9-0 in the past 11 games and have four games remaining.
"I'm encouraged by our group," Vancouver defenseman Tyler Myers said. "Obviously we're going through a tough stretch right now. We don't want to make any excuses, but we're battling hard. I love the way we're still battling even though we're out of it."
Calgary is fifth and Vancouver is seventh in the seven-team Scotia North Division. Neither team qualified for the Stanley Cup Playoffs.
"We're certainly not tweaking things in the system now," Flames coach Darryl Sutter said. "I'm going to put some other guys in the lineup and give them an opportunity and put them in back-to-back games and make sure they play the right way and go from there."
Highmore deflected Travis Hamonic's point shot by Markstrom 1:02 into the first period to put Vancouver up 1-0. The goal was Highmore's first of the season, and first in 45 games dating to Feb. 25, 2020, when he was with the Chicago Blackhawks.
"I just tried to get a stick on it," Highmore said. "Honestly, I didn't know it went in until I heard somebody scream. Just right place, right time. It was nice, just trying to play my game and help my linemates out."