>>50
BOOL だから安心したんだろうけど、MSDN はちゃんと読むもんだよ。

BOOL PtInRegion(HRGN hrgn, int X, int Y);
戻り値
点がリージョンの内側に含まれていたときは、0 以外の値が返ります。
点がリージョンの内側に含まれていなかったときは、0 が返ります。

TRUE が返るとは一言も書いてない。そもそも C 言語で...

if(xxx == TRUE){...

とかくのはどうかと思う。真偽しか返ってこないとわかっているなら...

if(xxx){...

と書いたほうが良いと思う。(まあ、個人的見解だけどね。)