Hughes put the Canucks up 1-0 at 2:02 on the game's first shot, a wrister under Markstrom's glove from inside the right face-off dot. The goal, his ninth, set an NHL career high in 25 games and leads NHL defensemen this season.
Lafferty pushed the lead to 2-0 at 8:38 when he knocked in a loose rebound at the edge of the crease after Markstrom made the initial save on a Filip Hronek one-timer from the point.
"We can start on time and start better and push the pace," Flames defenseman MacKenzie Weegar said. "That first 10 minutes they sort of dictated the pace and we should be the one in our home building to dictate the pace in the first 10 minutes. The last few games, obviously we haven't had the lead and that's a position we're comfortable in."
Calgary cut the lead to 2-1 at 12:18 with their first power-play goal in 18 attempts, a backdoor tap-in by Mikael Backlund on a feed from Adam Ruzicka.
Mikheyev gave Vancouver a 3-1 lead at 19:32 of the second period with a chip shot over Markstrom's glove and under the crossbar.
Lindholm pulled the Flames to within 3-2 at 15:39 of the third period with a shot that beat Demko along the ice.
"We'd like to play with the lead, but it just seems to be that way right now, be down a lot and come back," Lindholm said. "We ran out of luck today. It's a dangerous game to play. We've got to come out better and be better in the first."