0

ご返信いただきありがとうございます。SendMessage を調べましたが、少し行き詰まりました。現在、次のコードを使用しています。

HWND hwnd = GetForegroundWindow();
MINMAXINFO info;
POINT minSize = {500, 500}, maxSize = {600, 600};
SendMessage(hwnd, WM_GETMINMAXINFO, NULL, &info); //WM_GETMINMAXINFO(NULL, &info);
info.ptMinTrackSize = minSize;
info.ptMaxTrackSize = maxSize;

今、私はこれらの警告を持っています:

init.c:49:3: warning: passing argument 3 of 'SendMessageA' makes integer from po
inter without a cast [enabled by default]
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/../../../../include/winuser.h:4001:27: not
e: expected 'WPARAM' but argument is of type 'void *'
init.c:49:3: warning: passing argument 4 of 'SendMessageA' makes integer from po
inter without a cast [enabled by default]
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/../../../../include/winuser.h:4001:27: not
e: expected 'LPARAM' but argument is of type 'struct MINMAXINFO *'

また、ウィンドウのサイズは自由に変更できます。

4

1 に答える 1

3

WM_GETMINMAXINFOは関数ではなく、ウィンドウに送信できるメッセージの単なる識別子です。SendMessage達成したい内容に応じて、これらのメッセージを送信するか、WindowProc で処理する必要があります。

編集:

ウィンドウにアタッチしたメッセージ処理手順でこのメッセージを処理する必要があります。( MSDN のWindowProcを参照してください) WM_GETMINMAXINFO のドキュメントで説明されているように、メッセージは OS によってウィンドウに送信され、ウィンドウのサイズの制限を照会するためにサイズが変更されようとしています。

できることは、次のコードをウィンドウ プロシージャに追加することです。

LRESULT result = -1;

/* ... some code ... */

switch (uMsg)
{
    /* Some other Messages handled here... */

    case WM_GETMINMAXINFO:
    {
        HINMAXINFO *minmax = (MINMAXINFO *)lParam;
        minmax->ptMinTrackSize.x = 500;
        minmax->ptMinTrackSize.y = 500;
        minmax->ptMaxTrackSize.x = 600;
        minmax->ptMaxTrackSize.y = 600;
        result = 0;
        break;
    }

}

return result;
于 2013-07-14T17:52:12.377 に答える