Have a look at TLC5928, it's a cheap 16 channel led driver.
You connect it to a microcontroller using basic serial protocol (spi) and send 16 bits which tell the driver which led should turn on or off.
In a 8x16 or 16x16 matrix, the led driver would control one row of 16 leds at a time. Your microcontroller will turn on power to each row of leds at a time, and before it does that it sends data to the led driver telling which leds from that row should be on or off.
Here's an example on how you would do a matrix with 2 rows and each row having 16 or 32 or as many leds as you want (since the led drivers are daisy chained) - your microcontroller simply sends two bytes (16 bits) times the number of led drivers daisy chained and the bits are simply pushed from led driver to led driver as your microcontroller sends them.
Once you send all the bits required, you send the signal on the LATCH wire and all led drivers turn on or off their respective channels/leds (by sinking that pin to ground or not) and now you can send power to Vled 1 or Vled 2 ... or Vled 8 ... as many rows as you want.
You can't send power directly from the microcontroller because the pin of a microcontroller has a limited current capability (around 15-25ma) and each led may consume 10-30mA (the led driver can do up to 35mA per led, configurable using that Iref resisotr) but you can turn on an npn transistor or a mosfet which in turn will send power to those n x 16 leds.
microcontroller pin or shift register output pin -> small resistor to limit current going into transistor ---> npn transistor base pin
5v or something higher than the led's forward voltage on npn transistor collector , emitter connected to Vled1 or Vled 2 or whatever ... there's going to be a voltage drop between Collector pin and Emitter pin equal to Vce of the transistor which varies from transistor to transistor, but it's usually 0.1-0.2v
For more information on transistors see this link and the video below :
http://www.electronics-tutorials.ws/transistor/tran_2.htmlps. There's no law saying you have to make a n x 16 matrix, you could turn on and off two rows at a time and use 8 channels for even rows and 8 channels for odd rows, so you could make a 8x8 matrix with one led driver and a small microcontroller that turns on 2 rows at a time, so each set of rows is on for 25% of the time ... this would make sense if for example if you want a long band of 8 rows and lots of columns/pixels