Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
 |  |  |
Да я тоже попробовал - болт 29.01.03 16:06 Число просмотров: 1096
Автор: amirul <Serge> Статус: The Elderman
|
> все равно не работает.. Некоторые стили не могут меняться на лету при помощи сообщений. Нужно удалить кнопку и пересоздать ее с новым стилем. Ну или пользоваться GetWindowLong/SetWindowLong. Этот пример работает - я специально проверил (только стиль обновляется как-то странно - но это уже другой вопрос)
case IDM_FLAT:
SetWindowLong(GetDlgItem(hDlg, IDOK), GWL_STYLE, GetWindowLong(GetDlgItem(hDlg, IDOK), GWL_STYLE) | BS_FLAT);
break;
---
|
<programming>
|
[C++] Свойства контрола 28.01.03 08:49
Автор: makeworld Статус: Member
|
Вопрос глупый, но как установить свойство контрола (используя WinAPI)? К примеру TRUE или FALSE у свойства Flat Button'a. как в делфи button1.flat:= true;
Смотрел исходники, там вроде для этого спользуется SendDlgItemMessage(), но не понятно какое именно сообщение нужно посылать для изменения того или иного св-ва..
|
 |
Bm_setstyle 28.01.03 12:09
Автор: amirul <Serge> Статус: The Elderman
|
> Вопрос глупый, но как установить свойство контрола > (используя WinAPI)? К примеру TRUE или FALSE у свойства > Flat Button'a. как в делфи button1.flat:= true; > Смотрел исходники, там вроде для этого спользуется > SendDlgItemMessage(), но не понятно какое именно сообщение > нужно посылать для изменения того или иного св-ва.. А вообще по свойствам контролов поглянь widowsx.h, в частности Button_Xxx макросы. Есть там и Button_SetStyle. Вот только одного не пойму: почему они в MSDN-е не задокументированы.
Кроме того, если юзаешь MFC - некоторым нравится. Там есть функция CButton::SetButtonStyle
И еще кроме того есть SetWindowLong
|
 |  |
Bm_setstyle 29.01.03 08:21
Автор: makeworld Статус: Member
|
Попробовал двумя способами:
SendMessage(GetDlgItem(hDlg,ID_CLOSE),BM_SETSTYLE,BS_FLAT,TRUE);
и
Button_SetStyle(GetDlgItem(hDlg,ID_CLOSE),BS_FLAT,TRUE);
все равно не работает..
|
 |  |  |
Да я тоже попробовал - болт 29.01.03 16:06
Автор: amirul <Serge> Статус: The Elderman
|
> все равно не работает.. Некоторые стили не могут меняться на лету при помощи сообщений. Нужно удалить кнопку и пересоздать ее с новым стилем. Ну или пользоваться GetWindowLong/SetWindowLong. Этот пример работает - я специально проверил (только стиль обновляется как-то странно - но это уже другой вопрос)
case IDM_FLAT:
SetWindowLong(GetDlgItem(hDlg, IDOK), GWL_STYLE, GetWindowLong(GetDlgItem(hDlg, IDOK), GWL_STYLE) | BS_FLAT);
break;
---
|
 |  |  |  |
Да я тоже попробовал - болт 31.01.03 06:54
Автор: makeworld Статус: Member
|
> > все равно не работает.. > Некоторые стили не могут меняться на лету при помощи > сообщений. Нужно удалить кнопку и пересоздать ее с новым > стилем. Ну или пользоваться GetWindowLong/SetWindowLong. > Этот пример работает - я специально проверил (только стиль > обновляется как-то странно - но это уже другой вопрос) > > case IDM_FLAT:
> SetWindowLong(GetDlgItem(hDlg, IDOK), GWL_STYLE,
> GetWindowLong(GetDlgItem(hDlg, IDOK), GWL_STYLE) |
> BS_FLAT);
> break;
> ---
После изменения стиля с помощью SetWindowLong() кнопка не перерисовывается автоматически. По идее должно быть сообщение для обновления окна, но я ничего не нашел и сделал так:
void RefreshButton (HWND bh) {
char buttext[65535];
SendMessage(bh,WM_GETTEXT,sizeof(buttext),(LPARAM)((LPCTSTR)buttext));
SendMessage(bh,WM_SETTEXT,0,(LPARAM)((LPCTSTR)buttext));
}
Теперь стиль обновляется нормально
|
 |  |  |  |  |
Вот об этом я и говорил, когда сказал, что странно стиль обновляется :-))) 31.01.03 12:52
Автор: amirul <Serge> Статус: The Elderman
|
Я примерно так и представлял себе решение. Еще стиль обновляется когда кнопка получает фокус - можно переключить
|
|
|