Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.133.147.87] |
|
Сообщ.
#1
,
|
|
|
Доброго времени суток! На окне имеется static, в котором, посредством таймера, каждую секунду обновляется время. Не пойму в чем причина, но при при использовании функции SetWindowText(), текст нового времени, в прямом смысле этого слова, накладывается на старый текст (почему то старый текст не удаляется). В чем может быть проблема?
Прикреплённая картинка
Таймер case WM_TIMER: { switch(wParam) { case TEST_WIN_TIMER: { if(!SetAsptTimer(hWnd, &aspt_controls)) { SendPostStop(hWnd, &aspt_controls); } break; } } break; } Обработка таймера BOOL WINAPI SetAsptTimer(HWND hWnd, lpAspt_Test_Controls lpaspt_test_controls) { BOOL result = TRUE; std::wstringstream stream; if(lpaspt_test_controls->Aspt_Timer.iMinutes > 0x00) { if(lpaspt_test_controls->Aspt_Timer.iSeconds == 0x00) { lpaspt_test_controls->Aspt_Timer.iSeconds = 0x3B; lpaspt_test_controls->Aspt_Timer.iMinutes--; } else { lpaspt_test_controls->Aspt_Timer.iSeconds--; } stream << TEST_WIN_TIME << lpaspt_test_controls->Aspt_Timer.iMinutes << _T(":"); if(lpaspt_test_controls->Aspt_Timer.iSeconds < 0x0A) { stream << _T("0") << lpaspt_test_controls->Aspt_Timer.iSeconds; } else { stream << lpaspt_test_controls->Aspt_Timer.iSeconds; } } else { stream << TEST_WIN_TIME << _T("0:00"); result = FALSE; KillTimer(hWnd, TEST_WIN_TIMER); } SetWindowText(lpaspt_test_controls->hTime, stream.str().c_str()); return result; } |
Сообщ.
#2
,
|
|
|
Ты неправильно обрабатываешь фон статика. https://social.msdn.microsoft.com/Forums/vs...forum=vcgeneral
|
Сообщ.
#3
,
|
|
|
Цитата Ты неправильно обрабатываешь фон статика. https://social.msdn.microsoft.com/Forums/vs...forum=vcgeneral Спасибо, вы оказались правы. Вот, обрабатываю фон статика, таким образом: case WM_CTLCOLORSTATIC: { SetBkMode((HDC)wParam, OPAQUE); SetTextColor((HDC)wParam, RGB(0x00, 0x00, 0x00)); SetBkColor((HDC)wParam, GetSysColor(COLOR_MENU)); return (INT_PTR)GetStockObject(NULL_BRUSH); } Все статики стали нормальными, но почему то теперь появились проблемы с неактивными едитами и чек-баттонами... Прикреплённая картинка
На скрине, если стоит флажок, то верхние два едита неактивные (функция EnableWindow(), в них есть текст, просто я его тут замазал), если флажок убрать, то нижние два едита становятся неактивными, а верхние - активные... Как можно поправить отображение данных контролов? |
Сообщ.
#4
,
|
|
|
Цитата B.V. @ Ты неправильно обрабатываешь фон статика. https://social.msdn.microsoft.com/Forums/vs...forum=vcgeneral Афигеть: // You just need to handle WM_CTLCOLOR for the dialog HBRUSH CDialogDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); if ( CTLCOLOR_STATIC == nCtlColor ) { pDC->SetBkMode( TRANSPARENT ); HBRUSH RedBrush = CreateSolidBrush( RGB( 255,0,255)); return RedBrush; } return hbr; } Можно тут посмотреть. Это получше, но тоже не очень хорошо. |