|
[図3-5] :
WM_GETMINMAXINFOが来たときlParamにMINMAXINFO構造体へのポインタが入っているので,その先の値を変えてやることで,図3-5のようなことになります.図3-5は,MINMAXINFO構造体の中身をいろいろ変えてみた例です.
この値を,リスト3-4のようにすると,縦サイズのみ変更可能なように見えます.なぜそうなるのかというと,ptMinTrackSizeとptMaxTrackSizeの幅を同じにしているので,横方向に動かそうとしても,大きくもできず,小さくもできず,サイズ変更の枠はぜんぜん動かせなくなってしまうからです.
もう一つ考えられる方法で,WM_NCHITTESTメッセージを利用する方法も考えられますが,ややこしくなるのでWM_GETMINMAXINFOを使う方法でいいでしょう.
[リスト3-4] :
case WM_GETMINMAXINFO :{ MINMAXINFO FAR * lpmmi; lpmmi = (MINMAXINFO FAR *)lParam; lpmmi->ptMaxSize.x = 0; /*最大表示時の位置*/ lpmmi->ptMaxSize.y = 0; lpmmi->ptMaxPosition.x = 640; /*最大表示時の大きさ*/ lpmmi->ptMaxPosition.y = 480; lpmmi->ptMinTrackSize.x = 300; /*最小のサイズ変更できる大きさ*/ lpmmi->ptMinTrackSize.y = 100; lpmmi->ptMaxTrackSize.x = 300; /*最大のサイズ変更できる大きさ*/ lpmmi->ptMaxTrackSize.y = 700; return(0); }