Конференция "WinAPI" » Положение рабочей части окна на экране
 
  • demon © (23.11.08 21:51) [0]
    Как узнать положение рабочей части окна на экране?
    GetWindowRect возвращает положение всего окна, с загаловком, а он бывает разной высоты...
  • DVM © (23.11.08 21:55) [1]
    GetClientRect
  • demon © (23.11.08 22:04) [2]
    GetClientRect вернет размеры рабочей части, но не её положение на экране.
  • Anatoly Podgoretsky © (23.11.08 22:14) [3]
    > demon  (23.11.2008 22:04:02)  [2]

    Тебе что абсолютные координаты нужны, тогда ClientToScreen
  • demon © (23.11.08 22:22) [4]
    То что нужно, спасибо
  • demon © (23.11.08 22:45) [5]
    К сожалению ClientToScreen плохо работает с SetCapture/ReleaseCapture.
  • DVM © (23.11.08 22:51) [6]

    > К сожалению ClientToScreen плохо работает с SetCapture/ReleaseCapture.

    это как?
  • demon © (23.11.08 23:05) [7]
    Ну, когда ставлю SetCapture при нажатии клавиши мыши, то ClientToScreen возвращиет слишком большие координаты (по х больше нескольки тысяч), незнаю почему.
    Но все исправил: вызываю ClientToScreen раньше чем SetCapture.
  • DVM © (23.11.08 23:11) [8]

    > Ну, когда ставлю SetCapture при нажатии клавиши мыши, то
    > ClientToScreen возвращиет слишком большие координаты (по
    > х больше нескольки тысяч), незнаю почему.

    покажи код
  • demon © (23.11.08 23:26) [9]
  • demon © (23.11.08 23:49) [10]
    Может еще подскажите как задать цвет фона у листбокса?...
  • DVM © (24.11.08 12:32) [11]

    > Может еще подскажите как задать цвет фона у листбокса?..
    > .

    самый надежный и универсальный способ задать цвет фона для любых контролов это сделать обработчик WM_ERASEBKGND и заливать там нужным цветом.

    По поводу кода, я по моему уже тебе говорил, что в оконной функции надо всегда возвращать результат обработки сообщения. Иначе возможны проблемы. WM_ERASEBKGND в том числе.
  • clickmaker © (24.11.08 14:03) [12]
    > как задать цвет фона у листбокса?

    WM_CTLCOLORLISTBOX у формы
  • demon © (24.11.08 16:57) [13]
    Неполучаеть не через WM_CTLCOLORLISTBOX не через WM_ERASEBKGND.
    Не через setbkcolor, не через заливку ректа, незнаю в чем тут загвоздка...

    возвращать результат обработки сообщения
    Result:=0; это грамотно?
  • clickmaker © (24.11.08 16:59) [14]
    > Неполучаеть не через WM_CTLCOLORLISTBOX

    мда? а как пытаешься?
  • DVM © (24.11.08 17:10) [15]

    > Result:=0; это грамотно?

    где 0, где 1, где еще что-то, зависит от сообщения. Для того же WM_ERASEBKGND 1 возвращать надо.
  • demon © (24.11.08 18:38) [16]
         WM_CTLCOLORLISTBOX:
           begin
             SetTextColor(wParam, RGB(255, 255, 255));
             SetBkColor(wParam, RGB(0, 200, 0));
           end;      

  • DVM © (24.11.08 18:43) [17]

    > demon ©   (24.11.08 18:38) [16]

    сколько раз тебе повторять!!!!!!

    Return Values

    If an application processes this message, it must return the handle of a brush. Windows uses the brush to paint the background of the list box.
  • demon © (24.11.08 21:46) [18]
    А как это сделать? :-[
  • DVM © (24.11.08 22:42) [19]

    > А как это сделать? :-[

    а что непонятно то?
  • demon © (25.11.08 08:06) [20]
    сделал так result:= CreateSolidBrush($000000);
    работает!
  • clickmaker © (25.11.08 11:21) [21]
    > [20] demon ©   (25.11.08 08:06)
    > сделал так result:= CreateSolidBrush($000000);

    лучше один раз создать кисть, сохранить хэндл и его возвращать
    Result := FListBoxBrush;
    а при завершении убить DeleteObject(FListBoxBrush);

    а так будет утечка ресурсов GDI
  • demon © (25.11.08 23:08) [22]
    Но мне эта кисть будет нужна на протяжении всей работы программы, разве после завершения программы windows не очисти все незакрытые хэндлы?
    В любом случае сделал по вашему, выглядит грамотнее.
  • DVM © (25.11.08 23:10) [23]

    > разве после завершения программы windows не очисти все незакрытые
    > хэндлы?

    Очистит, очистит, но так делать все равно не надо. За собой мусор надо удалять ВСЕГДА.
 
Конференция "WinAPI" » Положение рабочей части окна на экране
Есть новые Нет новых   [134435   +33][b:0][p:0.001]