На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются.
4. Используйте теги [ code=cpp ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Старайтесь формулировать свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной и более давности без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта (C++) user posted image FAQ Форума user posted image Наши Исходники user posted image Поиск по Разделу user posted image MSDN Library Online (Windows Driver Kit) user posted image Google

Ваше мнение о модераторах: user posted image B.V.
Модераторы: B.V.
  
> WM_PRINTCLIENT для перекрытых элементов управления
    Здравствуйте. Есть диалоговое окно - родитель. На нём расположено 2 дочерних Static элемента, при чем один перекрывает другой частично. Можно ли через WM_PRINTCLIENT на видимом "верхнем" Static элементе отобразить фон от перекрытого (см. далее)? Требуется сделать без явного указания HWND перекрываемого элемента - хочу завернуть в сабклассинг все это дело и вызывать только процедурки инициализации/деинициализации своей отрисовки, а там уже свое рисовать что надо, главное только HWND самого статика подсовывать. Надеюсь понятно объяснил что требуется. Просто я запутался немного, впринципе нужен какой-нибудь GetParent, но только чтобы хэндл можно было узнать хэндл контрола, который перекрыт нашим рисуемым. Как проще это сделать? Требуется для отрисовки своих элементов управления.
    Сообщение отредактировано: Maksim V. -
      Цитата
      Надеюсь понятно объяснил что требуется

      Боюсь, что нет.
        Ну пойдем другим путем. Вот шаблон.

        ExpandedWrap disabled
          101 DIALOGEX 0, 0, 150, 50
          STYLE DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
          CAPTION "Project"
          LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
          FONT 8, "MS Shell Dlg", FW_NORMAL, FALSE, 1
          {
             CONTROL "Static 1", 101, STATIC, SS_CENTER | WS_CHILD | WS_VISIBLE, 15, 15, 75, 10
             CONTROL "Static 2", 102, STATIC, SS_CENTER | WS_CHILD | WS_VISIBLE, 5, 5, 100, 25
          }


        Static2 перекрывает собой Static1 как видно из координат. Надо отрисовать фон Static1 на Static2 + фон от диалогового окна самого.
        Подменяю оконную процедуру Static2 и рисую что надо. В WM_PAINT для отрисовки фона от родительского диалогового окна использую код:

        ExpandedWrap disabled
          //
          CallWindowProc(OldStatProc, GetParent(hWnd), WM_PRINTCLIENT, hdcMem, PRF_CLIENT)
          //

        Из hdcMem делаю BitBlt в HDC, полученный через BeginPaint.

        Теперь нужно позаимствовать фон от скрытого Static1, можно конечно например GetDlgItem(GetParent(hWnd), 101) использовтаь, но это привязка уже идет. Все "работы" проводятся только для Static2 и в процедуру для установки сабклассинга подается только HWND Static2, соответственно потом удаляется подобным способом эта нахлобучка - то есть указывается hWnd одного элемента и не важно сколько должно быть под ним еще контролов, но их содержимое надо стырить для отрисовки.

        Хочу в итоге сделать как-бы Transparent контрол и вдальнейшем на нем выводить текст, планирую приспособить под бегущую строку. Соответственно для закрашиваемого фона надо этот винегрет.
        Сообщение отредактировано: Maksim V. -
          А почему "как бы", почему не просто Transparent ?
          Ну, примерно, как здесь: http://files.rsdn.ru/42164/ws_ex_transparent.zip
            Спасибо конечно, но это не то что хотелось. Мне не нужна простая отрисовка текста в окне (понятно что тут просто пустую кисть возвращают), я хочу сам выводить, например, свою анимацию и прочие графические прибамбасы.
            Вобщем так, блин, чтобы уж совсем было понятно чего есть и чего надо. Есть вобщем процедура для подмены оконной функции на свою для отрисовки (создаю свой контрол так сказать, со своими сообщениями и т.д., просто не хочу оконный класс новый создавать, пойдет и обычный статик для таких целей). Ну, например, есть void CreateMyDrawControl(HWND hStatic), где выполняю подмену оконной процедуры этого hStatic и все. А в новой оконной процедурке обрабатываю WM_PAINT и WM_ERASEBKGND как мне надо. Все, больше ничего не делаю и в родитель не лезу для окучивания всяких там WM_CTLCOLORSTATIC и прочих прибамбасов - теперь я буду определять отрисовку, а не стандартная оконная процедура статика, так что здесь этот WM_CTLCOLORSTATIC идет лесом.
            Вот. :huh:
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0337 ]   [ 16 queries used ]   [ Generated: 12.04.26, 21:36 GMT ]