Lack, making his third consecutive start with Luongo (lower body) on the injured list, won his fifth straight and earned his second shutout.
"It was a pretty easy night for me," Lack said. "I had to be sharp a couple times, but overall I felt that our D-men boxed them out really good."
Lack improved to 7-2 and moved into third place in the NHL with a 1.74 goals-against average. His .933 save percentage is sixth best.
"The guys are playing awesome in front of me," Lack said. "I can't really complain about anything. I just want to keep it going."
Vancouver took the lead in the final minute of the first period on a terrific breakaway pass from Henrik Sedin and an even better finish by the speedy Hansen.
With the puck inside his blue line, Sedin spotted Hansen darting up the ice. Looking like a quarterback, Sedin paused as Hansen got open behind Mark Giordano and lofted a long pass that connected at the Flames' blue line.
Hansen controlled the puck and quickly whipped a shot past goalie Reto Berra.
"I saw an opportunity for us to turn the puck over in our end, so took a chance that we were going to get it," Hansen said. "Fortunately enough it ends up on Hank's tape and he's able to feather it through.
"It jumped on me, and I think that fooled the goalie a little bit, too -- maybe caught him a little bit out of position and leaving a little more room than he would have liked to."
Mike Santorelli also scored for Vancouver (23-11-6), 10-1-1 in its last 12.
"If you look at the standings, it's extremely tight," Hansen said. "If you're not stringing wins together, you're not going anywhere. We've played a tremendous December and we're still fourth in our division."
Calgary (14-19-6) fell to 1-2 on its five-game homestand.
Coming off a 2-0 loss to Edmonton on Friday, the Flames have been shut out at home for a span of 125 minutes and 5 seconds.
"Goal scoring, that's the toughest part of this league," Flames coach Bob Hartley said. "Right now, we have a few guys that are squeezing the sticks."
Berra (5-10-2) was sharp throughout. He kept the game 1-0 until 1:16 was left in the game when Santorelli converted on a 2-on-1 rush on Vancouver's 30th shot.
It took a while for Lack to face his first shot. The Canucks built a 10-0 edge in the first period before Lack made a solid save at the 13 minute mark off Mike Cammalleri.
The game got off to a rousing start when rugged Flames fourth-liner Brian McGrattan got his arm up high on a heavy hit along the side boards in the Canucks end that caught defenseman Andrew Alberts in the head and flattened him.
While Alberts remained down and not, McGrattan squared off in a fight with Canucks enforcer Tom Sestito.
McGrattan, who entered the night with 34 penalty minutes in 35 games, received a fighting major, an elbowing major, and a game misconduct.
Alberts didn't return.
Henrik Sedin needed stitches after getting hit in the ear by a puck in warmups. He played in his 669th consecutive game, the second longest active streak and sixth longest in NHL history. ... Flames C Markus Granlund, recalled early Sunday from Abbotsford (AHL), didn't play because Mikael Backlund was in the lineup. Granlund, 20, has never played in an NHL game. ... Calgary's only lineup change was inserting Derek Smith on defense for Chris Breen. ... Twenty-five of the Flames 39 games have been decided by one goal, which leads the NHL.