初心者です。質問させてください。
猫でもわかるプログラミング、SDK65章についてです。
case WM_NOTIFY:
switch (((LPNMHDR)lp)->code) {
case TTN_NEEDTEXT:
lptip = (LPTOOLTIPTEXT)lp;
lptip->hinst = hInst;
switch (lptip->hdr.idFrom) {
case IDM_PARENT:
lptip->lpszText
= MAKEINTRESOURCE(IDS_TIPS_PARENT);
break;
〜以下省略〜

WM_NOTIFYを受け取っているのでここでlp(LPARAM)の型はLPNMHDRですよね?
LPTOOLTIPTEXTのlptipにlpを入れるときに、
lptip = (LPTOOLTIPTEXT)lp;というように、
TOOLTIPTEXT構造体のポインタにキャストして代入することが可能らしいのですが、
何故、どのように代入されるのかがよくわかりません。

また、switch (lptip->hdr.idFrom)というようになっていますが、
ただ単にコントロールを調べるだけなので、WPARAMで指定した方が楽ではないかと思うのですが、
それでは何か問題が発生するのでしょうか?

よろしくお願いします。