DirectX Cursor vs World Coordinates

I'm making a 2D platformer with DirectX. I have a sprite for my player's arm that I want to rotate to always be pointing at the cursor. I managed to get it working using some basic (and probably ghetto-rigged) trig, but only when the arm was in a static position, by itself.

Using getCursorPos(), I moused over the arm for the coordinates (vec2 m_Arm.pos) of the pivot point and used those with the current cursor position (vec2 m_Cursor) to calculate the rotation. So I had an arbitrarily placed arm that would rotate to point at the cursor. So far so good.

Next, I changed the pivot point (m_Arm.pos) to the position of my player (vec2 m_oPlayer.pos) so the rotating arm would actually move around with the player's body.

The problem is, I use the player's vector for world coordinates like so:

Lines 9 and 10 are using the coordinates I got from mousing over the arm. Lines 11 and 12 are my attempt at converting the world coordinates of the arm to the moused-over coordinates, but those multipliers only work in the arm's initial position.

So I need to either convert the mouse coordinates to world coordinates, or the other way around. Despite a solid 2.5 hours of googling and reading other people's seemingly relevant problems, I'm still stuck.

Okay... I'm not familiar with D3D (I'm more of an OpenGL guy) so you'll have to bear with me.

To get this to work you really only need 2 things:

1) The cursor position
2) The arm position

The arm position is the origin of the arm graphic. This will also be the point at which the rotation will "pivot around", so it probably should not be the center of the graphic... but rather should be all the way to one side:

Now it doesn't really matter what coordinate system you have these in... as long as they're both in the same coordinates. I would probably do the calculations in camera coordinates (which for a 2D game would be the same as screen coordinates, only the Y axis might be inverted depending on how you set up the view).

Doing the math in world coordinates is an option as well, but then you have to translate the cursor which is more work than you probably want to do.

Matrix operations operate like a 'FILO' effect. That is, the first matrix effect you employ will be the last one you see. So since we want the arm rotation around the origin to be the FIRST effect... that needs to be the LAST matrix we multiply.