Atletico Madrid's French forward Antoine Griezmann finished third in the vote.
Ronaldo helped Real Madrid win last season's Champions League and scored three goals as Portugal won Euro 2016.
He has now won the Ballon d'Or in 2008, 2013, 2014 and 2016, with Messi the only other recipient of the award since winning it for the first time in 2009.
"I never thought in my mind that I would win the Golden Ball four times. I am pleased. I feel so proud and happy," said Ronaldo.
"I have the opportunity to thank all of my team-mates, the national team, Real Madrid, all of the people and players who helped me to win this individual award."
The former Manchester United forward has scored 19 goals in 20 games for club and country this term, to add to the 54 he got last season.
Ronaldo's Real Madrid team-mate Gareth Bale finished sixth in the vote, while Leicester City striker Jamie Vardy - the only Englishman included on the 30-player shortlist - was eighth.
The Ballon d'Or is voted for by 173 journalists from around the world.
It has been awarded by France Football every year since 1956, but for the past six years it became the Fifa Ballon d'Or in association with world football's governing body and was awarded to the world's best player.
However, Fifa ended its association with the award in September.
Fifa will hand out its own prize for the world's best men's player, along with the best women's player and team of the year, at the Best Fifa Football Awards ceremony in Zurich on 9 January.
Ronaldo's 2016 in numbers
42 games, 38 goals, 14 assists
Third best minutes-per-goal rate - 83.68 - of anyone scoring a minimum of 10 goals across Europe's top five leagues during 2016, behind Luis Suarez (82.57) and Falcao (59.6)
Directly involved in 39 La Liga goals in 30 games - 31 scored and nine assists.
- Hearts Go Top Of the Ghana Premier League
- Black Satellites Beat Burkina Faso 4-2 In Friendly
- Sports Minister confirms government spends $1m on every Black Stars game
- Hearts Of Oak' Fan Base Reducing At Alarming Rate - Report
- GPL Round-up: Hearts held by Aduana, WA All Stars drop points at home