Сообщение Re[7]: Как изменить цвет кнопки? от 22.11.2019 16:37
Изменено 22.11.2019 16:42 Carc
Re[7]: Как изменить цвет кнопки?
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Здравствуйте, CEMb, Вы писали:
CEM>>Можно ещё завести таймер и "трясти" кнопку ±3 пикселя вверх-вниз, вправо-влево
ЕМ>Подозреваю, что это скорее насторожит и создаст опасение перед нажатием кнопки, нежели побудит ее нажать.
Как вариант есть еще два фокуса привлечь внимание
Вариант первый: Блинковать пару-тройку раз. Скрыть — показать. С каким нить таймаутом в 400 мс примено.
Вариант второй: Тоже блинковать элементом, если он с текстом. Менять ему шрифт: стандартный (который был изначально), этот же но полужирный (FW_BOLD).
Помогает привлечь внимание пользователя.
Как-то так примерно
PS: половина закоментирована, ибо код из реального проекта, там много чего добавляется по сути. Таймауты задержки, возможность дергать через сообщения внешний код перед блинковкой, способы отрисовки и после и.т.д.
Ну это детали и нюансы, суть та же.
ЕМ>Здравствуйте, CEMb, Вы писали:
CEM>>Можно ещё завести таймер и "трясти" кнопку ±3 пикселя вверх-вниз, вправо-влево
ЕМ>Подозреваю, что это скорее насторожит и создаст опасение перед нажатием кнопки, нежели побудит ее нажать.
Как вариант есть еще два фокуса привлечь внимание
Вариант первый: Блинковать пару-тройку раз. Скрыть — показать. С каким нить таймаутом в 400 мс примено.
Вариант второй: Тоже блинковать элементом, если он с текстом. Менять ему шрифт: стандартный (который был изначально), этот же но полужирный (FW_BOLD).
Помогает привлечь внимание пользователя.
Как-то так примерно
//функция потока блинкования элемента UI
DWORD __stdcall BlinkProc_ByVisible(LPVOID lp)
{
//const std::auto_ptr<BLINK_BY_VIS_PARAM> pParam((BLINK_BY_VIS_PARAM*)lp);
//const HWND hwnd=(HWND)lp;
//const HWND hwnd =pParam->hwnd;
const HWND hwnd=(HWND)lp;
ASSERT(IsWindow(hwnd));
if (!IsWindow(hwnd))
return 1;
//if (pParam->nSleepBefore)
// Sleep(pParam->nSleepBefore);
//if (!IsWindow(hwnd))
// return 1;
enum {TMT_AFTERHIDE=100, TMT_AFTERSHOW=400};
for(int i=0; i < 3; i++) {
::ShowWindow(hwnd,SW_HIDE);
Sleep(TMT_AFTERHIDE);
ShowWindow(hwnd,SW_SHOW);
Sleep(TMT_AFTERSHOW);
if (!IsWindow(hwnd))
return 1;
}
return 0;
}
//ну и запуск как-то так
void DoBlinkCtrl(const HWND hwnd)
{
DWORD tid;
const HANDLE hThread=CreateThread(NULL,0,BlinkProc_ByVisible,(LPVOID)hwnd,0,&id);
ASSERT(hThread);
if (hThread)
CloseHandle(hThread);
}
PS: половина закоментирована, ибо код из реального проекта, там много чего добавляется по сути. Таймауты задержки, возможность дергать через сообщения внешний код перед блинковкой, способы отрисовки и после и.т.д.
Ну это детали и нюансы, суть та же.
Re[7]: Как изменить цвет кнопки?
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Здравствуйте, CEMb, Вы писали:
CEM>>Можно ещё завести таймер и "трясти" кнопку ±3 пикселя вверх-вниз, вправо-влево
ЕМ>Подозреваю, что это скорее насторожит и создаст опасение перед нажатием кнопки, нежели побудит ее нажать.
Как вариант есть еще два фокуса привлечь внимание
Вариант первый: Блинковать пару-тройку раз. Скрыть — показать. С каким нить таймаутом в 400 мс примерно.
Вариант второй: Тоже блинковать элементом, если он с текстом. Менять ему шрифт: стандартный (который был изначально), этот же но полужирный (FW_BOLD).
Помогает привлечь внимание пользователя.
Как-то так примерно
PS: половина закоментирована, ибо код из реального проекта, там много чего добавляется по сути. Таймауты задержки, возможность дергать через сообщения внешний код перед блинковкой, способы отрисовки и после и.т.д.
Ну это детали и нюансы, суть та же.
ЕМ>Здравствуйте, CEMb, Вы писали:
CEM>>Можно ещё завести таймер и "трясти" кнопку ±3 пикселя вверх-вниз, вправо-влево
ЕМ>Подозреваю, что это скорее насторожит и создаст опасение перед нажатием кнопки, нежели побудит ее нажать.
Как вариант есть еще два фокуса привлечь внимание
Вариант первый: Блинковать пару-тройку раз. Скрыть — показать. С каким нить таймаутом в 400 мс примерно.
Вариант второй: Тоже блинковать элементом, если он с текстом. Менять ему шрифт: стандартный (который был изначально), этот же но полужирный (FW_BOLD).
Помогает привлечь внимание пользователя.
Как-то так примерно
//функция потока блинкования элемента UI
DWORD __stdcall BlinkProc_ByVisible(LPVOID lp)
{
//const std::auto_ptr<BLINK_BY_VIS_PARAM> pParam((BLINK_BY_VIS_PARAM*)lp);
//const HWND hwnd=(HWND)lp;
//const HWND hwnd =pParam->hwnd;
const HWND hwnd=(HWND)lp;
ASSERT(IsWindow(hwnd));
if (!IsWindow(hwnd))
return 1;
//if (pParam->nSleepBefore)
// Sleep(pParam->nSleepBefore);
//if (!IsWindow(hwnd))
// return 1;
enum {TMT_AFTERHIDE=100, TMT_AFTERSHOW=400};
for(int i=0; i < 3; i++) {
::ShowWindow(hwnd,SW_HIDE);
Sleep(TMT_AFTERHIDE);
ShowWindow(hwnd,SW_SHOW);
Sleep(TMT_AFTERSHOW);
if (!IsWindow(hwnd))
return 1;
}
return 0;
}
//ну и запуск как-то так
void DoBlinkCtrl(const HWND hwnd)
{
DWORD tid;
const HANDLE hThread=CreateThread(NULL,0,BlinkProc_ByVisible,(LPVOID)hwnd,0,&id);
ASSERT(hThread);
if (hThread)
CloseHandle(hThread);
}
PS: половина закоментирована, ибо код из реального проекта, там много чего добавляется по сути. Таймауты задержки, возможность дергать через сообщения внешний код перед блинковкой, способы отрисовки и после и.т.д.
Ну это детали и нюансы, суть та же.