A Matrix with labels, dashed lines

Perhaps the following is more suitable:

enter image description here

\documentclass{article}

\usepackage{arydshln,leftidx,mathtools}

\begin{document}

\[
  \setlength{\dashlinegap}{2pt}
  \leftidx{_{m-r}^{\phantom{m-r}\llap{$\scriptstyle r$}}}{\left( \begin{array}{c:c}
    \smash{\overset{r}{B}} & \mathclap{\smash{\overset{n-r}{C}}} \\
    \hdashline
    D & E
  \end{array} \right)}{}
\]

\end{document}

The gaps between the dashes of \hdashline has been shortened from 4pt down to 2pt. mathtools provides \mathclap (a zero-width box that is centred) and also loads amsmath, which provides \overset (a math accent-type macro). I've \smashed the elements in the first row to not let the array delimiters over the height of B or C.

leftidx is a super-small package that adds left indexing functionality. See Superscripts before a letter in math.