Как добавить растровое изображение для кнопок в MFC? - PullRequest
4 голосов
/ 12 января 2010

Я пытаюсь добавить изображение к существующей кнопке .. Я сделал это до некоторой степени, проблема в том, что я могу добавить изображение, нарисованное владельцем, но не могу добавить нужное изображение, которое я хочу .. для примера см. код ниже

CButton* pBtn= (CButton*)GetDlgItem(ID_WIZBACK);

   pBtn->ModifyStyle( 0, BS_ICON );

   HICON hIcn= (HICON)LoadImage(
        AfxGetApp()->m_hInstance,
  MAKEINTRESOURCE(IDI_ICON3),
        IMAGE_ICON,
        0,0, // use actual size
        LR_DEFAULTCOLOR
    );

    pBtn->SetIcon( hIcn );

с помощью приведенного выше кода я преобразую растровое изображение в значок, чтобы добавить к моей кнопке ... как я могу добавить точное растровое изображение непосредственно к существующей кнопке. Помогите, пожалуйста, друзьям ..

Ответы [ 6 ]

2 голосов
/ 11 февраля 2015

Шаги для назначения растрового изображения для кнопки в MFC:

  1. Создать объект растрового изображения
  2. Загрузка растрового изображения с помощью LoadBitmap ()
  3. Получить дескриптор кнопки, используя id и GetDlgItem () метод
  4. Изменить стиль, чтобы мы могли назначить ему растровое изображение
  5. используйте SetBitmap () на ручке кнопки для назначения растрового изображения

код:

CBitmap bmp;

bmp.LoadBitmap( IDB_BITMAP4 );

CButton* pButton = (CButton* )GetDlgItem(IDC_BUTTON1);

pButton->ModifyStyle(0,BS_BITMAP);

pButton->SetBitmap(bmp);
2 голосов
/ 12 января 2010

Я на самом деле исправил проблему .. что я сделал, я заменил HICON на HBITMAP и он отлично работал ... в принципе, оба работали бы нормально, но в моем случае, когда я загружал значок в кнопку, фон значка не меняется ... Я попробовал Bitmap, тогда он отлично работает. Сейчас я работаю над позиционированием изображения и добавлением текста ... думаю, я мог бы пройти через

1 голос
/ 12 декабря 2014

Вы не знаете, насколько это помогло. Спасибо за публикацию. Также нужно изменить несколько других вещей на растровое изображение ...

CButton* pBtn= (CButton*)GetDlgItem(ID_MYDIALOG);
pBtn->ModifyStyle( 0, BS_BITMAP );

HBITMAP hIcn= (HBITMAP)LoadImage(
  AfxGetApp()->m_hInstance,
  MAKEINTRESOURCE(IDB_MYPIC),
  IMAGE_BITMAP,
  0,0, // use actual size
  LR_DEFAULTCOLOR
  );

pBtn->SetBitmap( hIcn );
1 голос
/ 12 января 2010

Вы можете создать подкласс существующей кнопки, используя CBitmapButton::SubclassWindow, затем использовать LoadBitmaps.

0 голосов
/ 09 апреля 2018

Я хочу добавить некоторые идеи в ответ @Amruta Ghodke:

Вы можете изменить размер кнопки, используя функции GetWindowRect и SetWindowPos. Смотрите пример ниже:

CRect rc;

pButton->GetWindowRect(rc);
pButton->SetWindowPos(NULL, rc.left, rc.top, myWidth, myHeight, SWP_NOSENDCHANGING | SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOMOVE);

Если вы хотите отображать прозрачные изображения, используйте программное обеспечение Pixelformer , чтобы преобразовать ваши PNG в BMP с альфа-поддержкой. Вам придется:

  1. Перейдите в Изображение-> Свойства и установите RGB color with alpha channel
  2. Экспорт файла в формате A8:R8:G8:B8 и отключенных Premultiplied alpha и Top-down row order
0 голосов
/ 12 января 2010

Используйте классы кнопок из Feature Pack. Они поддерживают отображение текста и изображений на кнопках, обычная кнопка не может этого сделать Посмотрите на каталог 'samples' в вашем каталоге установки VS.

...