1

動的な幅のボタンを作成したいと思います。これが私のコードです:

CreateWindowEx(BS_PUSHBUTTON, "BUTTON", "OK",
            WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
            50, 220, 100, 24, hwnd,
            (HMENU)ID_BUTTON,
            GetModuleHandle(NULL),
            0);

しかし、ラベル「OK」を「SOMETHING LONGER」に変更すると、ボタンの幅が足りなくなります。動的な幅を設定するにはどうすればよいですか?

4

1 に答える 1

3

Button_GetIdealSizeマクロを試してください。


OK、David、次回はもっと情報を提供してください、あなたが理解していないことすべてに言及してください。コメントの質問から、あなたはWin APIに慣れていないだけでなく、C /C++プログラミングにも非常に慣れていないことが推測できます。一般に。

HWND buttonHandle = CreateWindowEx(BS_PUSHBUTTON, "BUTTON", "OK",
                                   WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
                                   50, 220, 100, 24,
                                   hwnd,
                                   (HMENU)ID_BUTTON,
                                   GetModuleHandle(NULL),
                                   0);
SIZE size;

if (!Button_GetIdealSize(buttonHandle, &size)) {
  // Call of `Button_GetIdealSize` failed, do proper error handling here.
  // For that you have various options:
  // 1. Exit current scope and return error code;
  // 2. Throw an exception;
  // 3. Terminate execution of your application and print an error message.
  // Of course these options can be mixed.
  // If you don't understand what I'm talking about here, then either skip this
  // check or start reading books on software development with C/C++.
}

// At this point `size` variable was filled with proper dimensions.
// Now we can use it to actually resize our button...

if (!MoveWindow(buttonHandle, 50, 220, (int)size.cx, (int)size.cy, TRUE)) {
  // Call of `MoveWindow` failed, do proper error handling here, again.
}

// We are done!

:質問のタイトルが正しく表示されていません。C ++は、ボタンや特にWin APIとは何の関係もありません。ちなみに、これは純粋なCです。はるかに優れたタイトルは次のようになります。WinAPI:ボタンのサイズをコンテンツに合わせて適切に変更するにはどうすればよいですか。

于 2013-03-17T20:23:41.547 に答える