Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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-сайт: basicproduction.nm.ru
 Профиль | | #6
Добавлено: 29.08.04 00:57
IDC_MY_BUTTON можно получить с помощью GetDlgItem(Command1.hWnd).
 Хотя наверное cresta правильно сказал что только для диалогов, но ты всё равно попробуй.

Ответить

Номер ответа: 7
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #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()
    ;Dim 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-сайт: basicproduction.nm.ru
 Профиль | | #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 уже это обсуждали - покапайся в форуме...

Ответить

Страница: 1 | 2 | 3 | 4 | 5 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам