Страница: 1 | 2 | 3 | 4 | 5 |
Вопрос: Помогите с иконкой
Добавлено: 28.08.04 18:25
Автор вопроса: D_i_M
Всем привет.
Люди помогите установить на кнопке рисунок или иконку знаяя ее HWND,
а то чето у меня с кнопками не выходит. Икноку заголовка в окне меняет а вот с кнопкой не работает.
использую такой код
sd = SendMessage(cmd1.hwnd, WM_SETIMAGE,0, lHwdIcon)
может че нетак делаю.
Пожалуйтса, киньте пару примерчиков или подскажите где можно взять.
Ответы
Всего ответов: 64
Номер ответа: 1
Автор ответа:
dNW
Вопросов: 30
Ответов: 683
Профиль | | #1
Добавлено: 28.08.04 19:29
А может DrawIcon GetDC(Cmd1.hwnd,0,0,lHwdIcon) ?
Номер ответа: 2
Автор ответа:
D_i_M
Вопросов: 1
Ответов: 10
Профиль | | #2
Добавлено: 28.08.04 23:15
О добрый человек большое тебе спасибо, 3 дня бился над этой проблемой и вот наконец -то получилось.
Так вроде везде было написано, как у меня а почему не работает, даже пример с кнопкой пуск видел, там было тоже самое ч/з SendMessage. Ладно главное результат.
Еще раз спасибо!
Номер ответа: 3
Автор ответа:
D_i_M
Вопросов: 1
Ответов: 10
Профиль | | #3
Добавлено: 29.08.04 00:28
Да, оказалаось все не так хорошо как хотелось бы,
иконки прорисовываются но при семене фокуса она исчезает.
Тут нашел такой пример
SendMessage(GetDlgItem( hInstance, IDC_MY_BUTTON),BM_SETIMAGE,IMAGE_ICON,hIcon )
как я понял hInstance это HWND окна, а вот IDC_MY_BUTTON что это такое и где это взять я не нашел. Не подскажите что это такое?
Номер ответа: 4
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #4
Добавлено: 29.08.04 00:51
hInstance - это не hWnd, это экземпляр приложения. IDC_MY_BUTTON - идентификатор кнопки.
Такой пример будет работать, если у тебя диалог, а не окно. Кроме того, чтобы слать такие сообщения, нужно оговорить соответствующие стили для твоего контрола button.
А проще всего это сделать так: кнопке устанавливаешь style - графический, и Picture - выбираешь нужную тебе иконку.
Номер ответа: 5
Автор ответа:
Kodo
Разработчик Offline Client
ICQ: 293048085
Вопросов: 37
Ответов: 457
Профиль | | #5
Добавлено: 29.08.04 00:56
>как я понял hInstance это HWND окна
Неа. Правильно сказал cresta, но добавлю hInstance = app.hinstance
>А проще всего это сделать так: кнопке устанавливаешь style - графический, и Picture - выбираешь нужную тебе иконку
И все это прекрасно НЕ РАБОТАЕТ со стилями XP. Вернее стили на этом не работают.
Номер ответа: 6
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #6
Добавлено: 29.08.04 00:57
IDC_MY_BUTTON можно получить с помощью GetDlgItem(Command1.hWnd).
Хотя наверное cresta правильно сказал что только для диалогов, но ты всё равно попробуй.
Номер ответа: 7
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #7
Добавлено: 29.08.04 01:05
Ох, тут какие безобразия пошли, прелесть
Вот еще одно
hInstance = GetModuleHandle(vbNullString)
hInstance для всего процесса - один, а окон у процесса может быть несколько
Номер ответа: 8
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #8
Добавлено: 29.08.04 01:15
Если именно через hWnd, то вот тебе на скорую руку:
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Long) As Long
Private Declare Function ExtractIcon Lib "shell32.dll" Alias "ExtractIconA" (ByVal hInst As Long, ByVal lpszExeFileName As String, ByVal nIconIndex As Long) As Long
Private Const GWL_STYLE& = (-16)
Private Const BM_SETIMAGE As Long = &HF7&
Private Const IMAGE_ICON As Long = 1
Private Const BS_ICON As Long = &H40&
Dim i As Long
Private Sub Form_Load()
Command1.Caption = "Дави!"
End Sub
Private Sub Command1_Click()
 im ret As Long, hIcon As Long
ret = GetWindowLong(Command1.hwnd, GWL_STYLE)
ret = ret Or BS_ICON
i = i + 1
SetWindowLong Command1.hwnd, GWL_STYLE, ret
hIcon = ExtractIcon(App.hInstance, "shell32.dll", i)
SendMessage Command1.hwnd, BM_SETIMAGE, IMAGE_ICON, hIcon
End Sub
Номер ответа: 9
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #9
Добавлено: 29.08.04 01:22
Блин, пока набирал пример, вы тут нафлудили!!!!!
Это надо ж так надо суметь!!! ))
Kodo, а кто такие "стили ХР"? Подробней, плиз. А то у меня ХР, а почему-то работает, может мне пора систему переставлять?
Чтобы не работало.
Номер ответа: 10
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #10
Добавлено: 29.08.04 01:46
>а окон у процесса может быть несколько
А если прога не на VB делалась, то и потоков может быть несколько.
Номер ответа: 11
Автор ответа:
Lister
ICQ: 298621256
Вопросов: 57
Ответов: 304
Профиль | | #11
Добавлено: 29.08.04 03:19
2cresta:
кнопка с графическим стилем в ХР будет отображаться также как и в windows 9x...
Номер ответа: 12
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #12
Добавлено: 29.08.04 05:23
Lister
Тогда получается, что если у меня иконки отображаются, то либо Винда сдурела, либо одно из двух...
Номер ответа: 13
Автор ответа:
Lister
ICQ: 298621256
Вопросов: 57
Ответов: 304
Профиль | | #13
Добавлено: 29.08.04 05:46
У тебя отображаются иконки когда кнопка не имеет графического стиля???
Извини, не верю и требую доказательств
Номер ответа: 14
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #14
Добавлено: 29.08.04 07:50
Объясняю: если использовать код, который я нарисовал в ответе №8, то предварительная установка стиля кнопки в графический (путём манипуляций со свойствами кнопки в IDE) не требуется, т.к. для этого в коде используется SetWindowLong.
Если использовать вариант из ответа №4, то в ответе №4 написано: устанавливаешь style - графический.
Плиз, читай внимательно!
А Kodo заявил, что в варианте ручной установки (из IDE) графического стиля, прекрасно НЕ РАБОТАЕТ со стилями XP. Вернее стили на этом не работают. Хотя я проверяю - в ХР работает. А может, мне это сниться?
Вот я и пытаюсь выяснить, кто такие стили ХР которые (на этом не работают).
Номер ответа: 15
Автор ответа:
Lister
ICQ: 298621256
Вопросов: 57
Ответов: 304
Профиль | | #15
Добавлено: 29.08.04 08:16
2cresta:
графический стиль кнопки можно установить тремя путями:
1) изменив Style на Graphical
2) при создании кнопки CreateWindowEx
3) используя SetWindowLong и константы стиля кнопок.
Одним словом, графический стиль кнопки это не только Style=Graphical...
без этого стиля невозможно отобразить картинку на кнопке.
Вот тебя и спрашивают - каким образом у тебя отображается картинка на кнопке, которая не имеет графического стиля? Теперь ты сам сказал, что поменял стиль на графический средствами АПИ.
А Kodo все-таки прав! Мы со sne уже это обсуждали - покапайся в форуме...