2015-08-07 4 views
1

Кто-нибудь может сказать мне, как использовать растровое изображение в качестве кнопки, на самом деле я могу создать статический элемент управления и установить его изображение, но дело в том, что я не знаю, как использовать его как кнопку, я использую C++ win32. Это, как я создания растрового изображенияКак сделать кнопку clickable в C++ win32

Код:

HWND Profile_Stuff(HWND hWnd, HINSTANCE hInst) 
{ 
    HWND Profile_Pic; 

    Profile_Pic = CreateWindow("STATIC", NULL, SS_BITMAP|WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER, 5,5,33,33, hWnd, NULL, hInst, NULL); 
    HBITMAP hBmp = (HBITMAP)LoadImage(NULL, "camera1.jpg", IMAGE_BITMAP,0,0,LR_LOADFROMFILE); 
    if(hBmp == NULL){ 
     MessageBox(NULL, "Error while loading image", "Error", MB_OK|MB_ICONERROR); 
    } 
    SendMessage(Profile_Pic, STM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)hBmp); 
    return 0; 
} 

затем я вызвать функцию в главном окне WM_CREATE обработчика сообщений, который создает его успешно, теперь я не знаю, чтобы использовать его в качестве кнопки, например, у нас есть фотография рекламы в нижней части приложения бит-торрент. Я использую визуальную студию C++ с win32 api.

ответ

2

Если вы хотите управлять кнопкой, вы должны создать кнопку управления. Визуальное представление может контролироваться приложением. Для этого укажите BS_OWNERDRAWButton Style. Управление кнопкой с этим стилем отправляет сообщение WM_DRAWITEM родительскому элементу управления всякий раз, когда визуальный аспект изменился. Затем контрольный родитель может отобразить элемент управления по своему усмотрению.

Введение в элементы управления, созданные владельцем, доступно по адресу Custom Controls. Если вы хотите сохранить некоторые элементы управления кнопкой (например, ее границы), см. Using Visual Styles with Custom and Owner-Drawn Controls для получения дополнительной информации (или DrawFrameControl, если вы не используете визуальные стили).


Полностью рабочий образец кода для управляемой владельцем кнопки управления можно найти в this answer.

+0

Вы имеете в виду, что я могу создать обычную кнопку с помощью функции CreateWindow() или CreateWindowEx(), тогда я могу указать стиль BS_OWNERDRAW на нее, чтобы сделать программа понимает, что к этой кнопке будут внесены изменения. я прав? – Wajid

+0

Должен ли я сделать это так? – Wajid

+0

@Wajid: Точно вызовите 'CreateWindow [Ex]' с классом окна 'WC_BUTTON' и передайте также стиль' 'BS_OWNDERDRAW''. Код в связанном с ответом просто делает это, за исключением того, что он не вызывает 'CreateWindow [Ex]' напрямую, но использует скрипт ресурсов, который анализируется и переводится в соответствующие вызовы API диспетчером диалогов. – IInspectable

0

В Windows окна относятся к классу, класс определяет процедуру Windows для всех окон этого класса, что означает, как они реагируют на события.

Если вы создаете окно STATIC, оно не будет реагировать ни на один клик и не будет использоваться в качестве кнопки.

Вы можете создать собственный класс, зарегистрировать его вместе с пользовательской процедурой Windows, способной имитировать КНОПКУ. Но если у вас нет особых требований, просто создайте кнопку рисования владельца, как показано в ответе @ IInspectable.