2013-09-26 37 views
10

私のトピックについては、StackOverflowに関するいくつかの質問があります。そのうちの1つはhereです。WINAPIの最大ウィンドウサイズと最小ウィンドウサイズ

また、MINMAXINFOに関するMicrosoftのドキュメントと、この構造に関連するメッセージも読んでいます。 ...

case WM_PAINT: 
{ 
    MINMAXINFO mmi = { 0 }; 
    SendMessage(hWnd, WM_GETMINMAXINFO, NULL, (LPARAM)&mmi); 
    POINT sz = { 640, 480 }; 
    mmi.ptMaxSize = sz; 
} 
break; 

私はそれは、ウィンドウ上の任意の効果を持っていないので、これは、完全に間違っていると思う:私は単にここで私はこれまで試したものです...それを動作させることができません

最小サイズがW: 450, H: 250、最大サイズがW:800, H: 600の場合、これをどのように動作させることができますか?

ユーザーが1つのコーナーまたはウィンドウの境界線をドラッグしてウィンドウが最大/最小サイズをドラッグしたときに、ユーザーはminimum_size/maximum_sizeより大きいまたは小さいウィンドウを作成できません。

答えて

15

WM_GETMINMAXINFOは、システムがウィンドウに送信するメッセージです。ウィンドウの最小サイズと最大サイズを知りたければ、そのメッセージを送信します。あなたはそのメッセージを送ることはありません。しかし、そのメッセージが送信されたときにそのメッセージに返信することはできます。

だから、あなたはあなたのウィンドウプロシージャにWM_GETMINMAXINFOのためのケースを追加する必要があります。

case WM_GETMINMAXINFO: 
{ 
    MINMAXINFO* mmi = (MINMAXINFO*)lParam; 
    mmi->ptMaxSize.x = 800; 
    mmi->ptMaxSize.y = 600; 
    return 0; 
} 

それはあなたが追跡サイズを制御したいことが判明しました。そうですね。

case WM_GETMINMAXINFO: 
{ 
    MINMAXINFO* mmi = (MINMAXINFO*)lParam; 
    mmi->ptMinTrackSize.x = 450; 
    mmi->ptMinTrackSize.y = 250; 
    mmi->ptMaxTrackSize.x = 640; 
    mmi->ptMaxTrackSize.y = 480; 
    return 0; 
} 
+0

ありがとうございました!これは私が得たいと思った効果を正確に作り出します! – Victor

関連する問題