dialogbox nonclient area
От: caspi  
Дата: 08.08.05 05:02
Оценка:
Здрайствуйте!
Помогите решить проблему:
Создаю dialogbox с WS_MINIMIZEBOX|WS_MAXIMIZEBOX. В диалоговой процедуре обрабатываю WM_NCPAINT:

case WM_NCPAINT:
HDC hdc = GetWindowDC( hWnd );
HGDIOBJ hOld = SelectObject( hdc, CreateSolidBrush( RGB( 255,0,0 ) ) );
Rectangle( hdc, 0, 0, 1024, 20 );
SelectObject( hdc, hOld );
ReleaseDC(hWnd,hdc);
return true;

Проблема в том, что первом клике по загаловку диалога или при первом нажатии клавиши Alt поверх моей отрисовки загаловка выводятся кнопки свернуть/развернуть окно и кнопка закрыть окно...
Если я меняю стиль диалога и убираю WS_MINIMIZEBOX|WS_MAXIMIZEBOX — то такой проблемы не возникает..
Подскажите как исправить?
Re: dialogbox nonclient area
От: rus blood Россия  
Дата: 08.08.05 06:18
Оценка: -1
Здравствуйте, caspi, Вы писали:

1. Вернуть false после обработки сообщения.

2. Кроме этого, для сравнения вызвать

DefWindowProc(hWnd, WM_NCPAINT, wParam, lParam)

перед кодом в case WM_NCPAINT.
Имею скафандр — готов путешествовать!
Re[2]: dialogbox nonclient area
От: caspi  
Дата: 08.08.05 08:29
Оценка:
Здравствуйте, rus blood, Вы писали:

RB>Здравствуйте, caspi, Вы писали:


RB>1. Вернуть false после обработки сообщения.


RB>2. Кроме этого, для сравнения вызвать


RB>DefWindowProc(hWnd, WM_NCPAINT, wParam, lParam)


RB>перед кодом в case WM_NCPAINT.


Интересно, вы всегда подсказываете то, чего сами совершенно не знаете?
Диалоговая процедура возвращает true в случае, если обработка сообщения выполнена и другой не требуется. Это раз.
И два: диалоговая процедура не должна вызывать DefWindowProc — потому как для обработки сообщений диалога по умолчанию есть функция DefDlgProc...

Так что извините, но ничего осмысленного вами предложено не было
Re[3]: dialogbox nonclient area
От: rus blood Россия  
Дата: 08.08.05 09:01
Оценка:
Здравствуйте, caspi, Вы писали:

Сорьки, погорячился.

Пользовался примером на MFC (оказался под рукой) для ответа...
Имею скафандр — готов путешествовать!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.