Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.01.2011, 16:19   #1
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию перерисовка/обновление клиентской области окна

Создаю окошко:
Код:
  with WindowClass do
  begin
    Style:=cs_HRedraw or cs_VRedraw;
    lpfnWndProc:=@WindowProc;
    cbClsExtra:=0;
    cbWndExtra:=0;
    hInstance:=hInstance;
    hIcon:=LoadIcon(0,idi_Application);
    hCursor:=LoadCursor(0,idc_Arrow);
    hbrBackground:=Color_BtnFace+12; //цвет синий
    lpszMenuName:=@MainMenu;
    lpszClassName:=WndClass;
  end;
//Any code here
  Wnd:=CreateWindow
          (WndClass,
           WndCaption,
           WS_OVERLAPPEDWINDOW or WS_CLIPCHILDREN,
           cw_UseDefault,
           cw_UseDefault,
           cw_UseDefault,
           cw_UseDefault,
           0,
           MainMenu,
           HInstance,
           nil);
//Any code here
  ShowWindow(Wnd,CmdShow);
  UpdateWindow(Wnd);
Запускаю приложение - появляется окно БЕЛОГО цвета - разворачиваю - отрисовывается часть синяя там, где раньше области окна не было, сворачиваю-разворачиваю - окно цвета синего. Оно не обновляется при создании!
Обрабатываю сообщение WM_PAINT:
Код:
    WM_PAINT:
    begin
      GetClientRect(Window,Rect);
      WndHDC:=BeginPaint(Window,PaintStruct);
      //BitBlt(WndHDC,Rect.Top,Rect.Left,Rect.Right,Rect.Bottom,
      //        0,0,0,BLACKNESS);
      EndPaint(Window,PaintStruct);
      SendMessage(Window,WM_NCPAINT,1,0);
    end;
Я комментировал строчку BitBlt (с ней работает нормально, только соответственно, цвет другой), но мне кажется такой подход неправильным. Помогите разобраться с правильным обновлением клиентской части окна, чтобы фон был такой, как при создании окна, а не белый, вообще не понимаю, почему винда сама не обрабатывает WM_PAINT как надо?! Столько перечитал справки, столько пробовал всего - результат отрицательный, и регионы создавал и InvalidateRect использовал, но он не работает с неправильной обработкой WM_PAINT! Заранее спасибо.
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
ImmortalAlexSan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Установить размер клиентской обл. окна Ulex Win Api 0 12.04.2010 01:47
Перерисовка окна _Dmitry_ Win Api 3 30.03.2010 19:55
Как узнать размер клиентской части окна? Belfigor Общие вопросы Delphi 4 03.03.2010 13:00
как растянуть див на всю высоту клиентской части окна браузера Anopsa - Anna HTML и CSS 3 21.09.2009 10:07
Прозрачность в клиентской части окна. Ivan_32 Win Api 2 06.02.2009 15:53